Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Matopeli

Sivun loppuun

Karza [02.12.2005 17:23:33]

#

Ok... tämä on sitten viimeinen aihe, jonka teen vähään aikaan.

Elikkäs jonkin muotoista matopeliä alkaisin tekemään "ikuisuus" projektiksi. Minun taidot ei siihen ehkä ihan yllä, mutta aina kun opin lisää niin jatkan jne...

Ajattelin karkean suunnitelman, jonka mukaan mato piirretään vaikka "o" -merkillä kun en tässä vaiheessa halua tutustua mihinkään grafiikkakirjastoihin.

Oikeastaan haluan vain kysyä vinkkejä/ linkkejä, mitkä vois auttaa. Olen katsonut QBasicille matopelin koodivinkkejä, lukenut niitä ja niistä sain suunnilleen kuvan, miten tuo tehdään... ei koodillisesti vaan yleensä.

Edit: Ja siis C++ teen.

Karza [02.12.2005 18:24:32]

#

Muusta varmaan selviän, mutta madon ohjausta en osaa tehdä. Miten nuolinäppäimet luetaan näppäimistöltä?

Metabolix [02.12.2005 18:33:17]

#

Pelkällä coutilla (taikka printf:llä) ei tuossa oikein minnekään pääse. Piirtämisen puolesta vaihtoehdot ovat siis DOS-kääntäjä ja näyttömuistin suora käsittely taikka Windowsiin PDCurses (ks. opasalue, löytyy DevPak), jolla saa merkkejä yleensä värillisinäkin. (Tai sitten jokin "oikea" grafiikkakirjasto...) Merkkien lukemiseen hieman samanlaisia neuvoja. DOS-kääntäjällä toimivia näppäinhandlereita on koodivinkeissä, ja NCurses (ts. PDCurses) sisältää näppäimistönkäsittelyynkin jotain.

tgunner [02.12.2005 18:42:02]

#

Suosittelisin SDL-kirjastoja. Ne ovat aika käteviä tuollaiseen.

www.libsdl.org

Karza [02.12.2005 18:44:45]

#

Eihän siinä "piirtää" tarvitse muuta kun ruuat ja mato. Ja nehän onnistuu ihan jollain vaikka "#" merkillä. Eli ei siinä mitään grafiikkakirjastoa tarvitse.

Edit: ..vai? Miksi ei onnistuisi?

Puhveli [02.12.2005 19:03:22]

#

Ongelmana on merkin tulostaminen tiettyyn kohtaan näytölle. Sitä varten on omia kirjastoja, mutta yhtäkään sekä Windowsissa että Linuxissa toimivaa en tiedä. Paljon helpompaa on matopelin tekeminen graafisena.

Karza [02.12.2005 19:11:42]

#

Mutta kun niihin en ole tutustunut ja niissä on omat tapansa koodata, niin tulee hankaluuksia...
minne ne pitää purkaa. (koitan silti.. ei kai se pahaksikaan ole).

E: Ihmettelen kyllä vieläkin, miksi se merkkien tulostaminen tiettyyn kohtaan olisi ongelma... Onnistuuhan se QBasicillakin niin miksi ei tällä. Ai, ai.. taitee QBasic jyrätä x)

rndprogy [02.12.2005 19:17:47]

#

Karza kirjoitti:

Mutta kun niihin en ole tutustunut

Olisiko korkea aika tutustua :)

Karza kirjoitti:

niissä on omat tapansa koodata

Eipäs ole. On vain erilaisia funktioita.

Mutta tarvitset kyllä joka tapauksessa jonkin kirjaston jos haluat edes vähän helpottaa matopelisi tekemistä.

Karza [02.12.2005 19:22:27]

#

Kai sitä sitten "täytyy". Siis jos.. äsh... mitä nyt sitten lataan tuolta sivulta? kun on "Runtime Libraries" ja "Development Libraries".. sanoinhan että olen pihalla noissa asioissa... minne purkaan ym...

hunajavohveli [02.12.2005 19:59:48]

#

Karza kirjoitti:

Onnistuuhan se QBasicillakin niin miksi ei tällä. Ai, ai.. taitee QBasic jyrätä x)

No onnistuuhan se C++:llakin, mutta ilman kirjastoja se täytyy tehdä eri tavalla eri käyttikselle. Ei QBasicillakaan voi tehdä ohjelmia kuin yhdelle pohjalle eli DOSille.

Karza [02.12.2005 20:07:06]

#

Karza kirjoitti:

Mitä nyt sitten lataan tuolta sivulta? kun on "Runtime Libraries" ja "Development Libraries".. sanoinhan että olen pihalla noissa asioissa... minne purkaan ym...

Niin neuvoisko joku noissa...

sqwiik [02.12.2005 20:29:29]

#

Alkuperäiseen viestiisi viitaten, näillä pääsee jonnekin asti (jos siis windowsille komentokehotesovellusta koodaat):
gotoxy(x, y); Siirtää kirjoituskohdan jonnekin ruudulla. vastaa melko pitkälti QB:n LOCATE-käskyä.
putch(merkki); tulostaa näytölle _yhden_ merkin.

Esim:

int ruoka_x = 10, ruoka_y = 10;
gotoxy(ruoka_x, ruoka_y);
putch('#');

Metabolix [02.12.2005 20:47:29]

#

sqwiik: Missä tuommoiset muka toimivat? :)

Karza: Mitähän nyt olit lataamassa? Jos DevC++:aa käytät, niin sekä SDL:lle että PDCursesille löytyy DevPakit (http://devpaks.org/ ja kohdat SDL ja TextConsole).

PDCurses on varmasti noista helpompi omaksua noin nopeasti, ja kun se on nimenomaan merkkipohjainen, niin ei tarvitse sen kummemmin grafiikoilla säätää. Kutsuu alussa käynnistysfunktiota ja lopussa lopetusfunktiota, ja välissä voi tulostaa aivan printf:n kaltaisella tulostusfunktiolla, lisänä vain tekstin koordinaatit.

Deewiant [02.12.2005 20:53:19]

#

Metabolix kirjoitti:

sqwiik: Missä tuommoiset muka toimivat? :)

Borlandin juttuja ne ovat, mutta saattavat jollain muuallakin toimia.

Karza [02.12.2005 21:26:53]

#

Jaa a... olisikohan sittenkin parempi aloittaa matopelin sijasta joku merkkipohjainen seikkaulupeli ADOMin tyyliin.

hunajavohveli [02.12.2005 21:31:16]

#

Karza kirjoitti:

Jaa a... olisikohan sittenkin parempi aloittaa matopelin sijasta joku merkkipohjainen seikkaulupeli ADOMin tyyliin.

No ei todellakaan. ADOMissa on tekstigrafiikan piirtämisessä aivan samat ongelmat kuin tuossa matopelissä, plus joukko muita paljon vaikeampia asioita.

Karza [02.12.2005 21:38:30]

#

Kyllä matopeli vaikeampi tehdä on, kun sellanen, missä vain (karkeasti otettuna) liikutellaan jotain merkkiä.

Grey [02.12.2005 21:40:57]

#

Karza kirjoitti:

Kyllä matopeli vaikeampi tehdä on, kun sellanen, missä vain (karkeasti otettuna) liikutellaan jotain merkkiä.

Et ole tainnut koskaan edes pelata kunnolla noita roolipelejä? Minä olen ja todennut että niissä on noin 69^666 erilaista juttua, joiden kanssa pitäisi säheltää. Matopelissä vain on hassu mato, joka syö omenoita, kasvaa, syö omenoita, kasvaa, puree häntäänsä ja kuolee..

-Grey-

Karza [02.12.2005 21:43:38]

#

En paljon muuta pelaakkaan kun roolipelejä. Mutta kuka sanoi että aijon tehdä ADOM Karza Edition? sanoin vain, että sen tyylisen. Mutta mitenkä sitä merkkiä sitten liikutellaan siinä.. sitä en tiedä. Matopelissä täytyy tehdä kaikki vauhtijutut ym... no jos neuvotte niin sitten.

Grey [02.12.2005 21:50:34]

#

Edelleenkin, en suosittele että väsäät mitään roolipeliä. Sellainen kun ei todellakaan ole mikään yksinkertainen homma. Yksinkertaisimman näkemäni roolipelin koodi on ollut yli 30 kiloa ja siihen määrään on mahtunut noita rivejäkin lähemmäs tuhat. Kyseistä näkemääni roolipeliä yksinkertaisempaa on mahdoton saada, eli matopeli on joka tapauksessa yksinkertaisempi..

-Grey-

Karza [02.12.2005 21:56:24]

#

Minua on aina kiinnostanut jonkin roolipelin teko.. ja lähinnä siksi että siihen voi tehdä käytännössä niin paljon sisältöä kun vaan jaksaa; tavarat ym... ja koska on mukava lisäillä tavaroita ja yhä enemmän kaikkia ominaisuuksia, niin siksi se olisi hyvä vaihtoehto. ja aikaakin on.

Nyt kun joku kertoisi miten saan liikkumisen toteutettua niin kaikki on hyvin.
(teen sen matopelin pois, sitten rupean tekemään sitä jotain muuta)

Heikki [02.12.2005 22:08:11]

#

Karza kirjoitti:

Nyt kun joku kertoisi miten saan liikkumisen toteutettua niin kaikki on hyvin.

Mihinköhän kirjastoon tms. olet päätynyt? En ainakaan itse viitsi tehdä esimerkkiä sdl:lle, ncursesille, pdcursesille ja borlandin gotoxy():lle.

Mitä sitten kirjastoksi valitsetkin, katso olisiko putkan opasalueella opasta. Jos ei ole, googleta ja/tai lue virallista dokumentaatiota.

Karza [02.12.2005 22:10:38]

#

olen tässä etsinyt vähän jokapuolelta, mutta etsin vielä. pdcursesin latasin, eli sille.

Karza [03.12.2005 00:04:09]

#

Tällänen pieni välikysymys: Onko olemassa mitään pientä yksinkertaista kehitysympäristöä + kääntäjää. Ei mitään Borland C++ Builder, vaan joku ihan muistion kokoinen ja sellanen "taskuun menevä". 2. kyssäri: onko mahdollsita kääntää jollain kääntäjällä siis ihan vaikka muistiolla tehtyä tekstitiedostoa exeksi?

Heikki [03.12.2005 00:19:52]

#

PDCursesia en hallitse joten en laita mitään koodia, mutta pitäisi olla aikalailla samanlaista kuin NCurses.

1. Itse suosittelen ihan Dev-C++:aa, vaikkei se tuollainen "taskuun menevä" täysin olekkaan. Toki kääntäminen sujuu komentoriviltä esim. MinGW:llä (jota Dev-C++ käyttää).

2. On. Kaikilla kääntäjillä tämä onnistuu.

Karza [03.12.2005 00:48:44]

#

No onko sitten mahdollista kääntää tähän tyyliin: oletetaan, että c: asemalla on muistiolla tehty c++ koodipätkä (eli txt tiedosto) otetaan kääntäjä esille kirjoitetaan siihen polku: c:/helloworld.txt. Sitten se kääntää sen.

hunajavohveli [03.12.2005 10:43:50]

#

On mahdollista.

Karza [03.12.2005 16:28:38]

#

Miten tyhjätään ruutu? Jostain täältä katoin, että pitäs olla joku kirjasto, mutta mistä sen sitten saa?

Metabolix [03.12.2005 19:27:30]

#

No vaikka sillä PDCursesilla. Olisiko clear() tai erase().

tgunner [03.12.2005 22:01:53]

#

Karza kirjoitti:

Eihän siinä "piirtää" tarvitse muuta kun ruuat ja mato. Ja nehän onnistuu ihan jollain vaikka "#" merkillä. Eli ei siinä mitään grafiikkakirjastoa tarvitse.

Edit: ..vai? Miksi ei onnistuisi?

No tottakai siinä voi piirtää objektit yksinkertaisesti, mutta jos ajattelee "hienon" matopelin tekemistä niin miksikäs ei. Ja onhan SDL:ssä hieno näppäimienluku.

Karza [03.12.2005 22:45:21]

#

Taitaa olla vähän liian vaikea mulle, mutta koittaa jotain, jos sanotte miten näppäimiä luetaan jos en kirjastoja lataa... Eli ilman SDL:llää

Metabolix [03.12.2005 22:50:52]

#

Ilman mitään kirjastoa et kyllä saa näppäimiä luetuksi reaaliaikaiseen peliin sopivasti, paitsi jos käytät DOS-kääntäjää ja koodivinkistä "DOS-näppäinhandlerit" löytyviä tapoja. Cin ei oikein kelpaa.

Ota PDCurses ja lue jo mainostettua NCurses-opasta. Se on varmaankin helpoin tapa, eikä tarvitse grafiikoita miettiä, kun käyttää ihan merkkejä vain.

Karza [03.12.2005 23:32:59]

#

Latasin sen, mutta minne se pitää purkaa? ihanko C:/Dev-Cpp/ ?
Tai no oikeastaan latasin NCursesin mutta kai se on melki sama.

Metabolix [03.12.2005 23:37:22]

#

Paitsi että NCurses ei toimi Windowsissa.

Sanoinhan jo, että lataa PDCursesin DevPak (http://devpaks.org/details.php?devpak=5). Se asentuu itsestään DevCpp:n PakManilla.

Karza [03.12.2005 23:46:13]

#

Ok... Täällä ei tainnut olla oppaita tuohon, paitsi NCursesiin.. päteekö se myös tuohon... ainakin pitäisi.

EDIT: Kopioin suoraan tuolta oppaasta jonkun esimerkkiohjelma, mutta niinkkuin arvasin, en saa toimimaan mitään.. sanoinhan että ei onnaa.

EDIT2: Enkä aikonutkaan tehdä windows ohjelmia.. vielä. Vai onko se koodillisesti kovinkaan erilaista.. oppaita missä?... bah.

Metabolix [04.12.2005 00:12:16]

#

Luonnollisesti ncurses.h-otsikko korvataan PDCursesin curses.h-otsikolla. Lisäksi projektin asetuksiin Parameters-välilehdelle Linker-laatikkoon lisätään rivi "-lcurses" (ilman lainausmerkkejä toki).

Jos aloitat projektin DevCpp:n Uusi Projekti -valikosta PDCurses-projektina, niin saat varsin toimivan pienen koodinpätkän suoraan eteesi.

Ei Windows-ikkuna Windows-ohjelmaa tee. Kaikki konsoliin tehdyt ohjelmat ovat Windows-ohjelmia, jos ne käännetään Windows-kääntäjällä. Aidoissa DOS-ohjelmissa on huomattava määrä omia jekkujaan.

Ikkunalliset Windows-ohjelmat ovat tuskaa noin ihan WinAPI:lla väännettyinä. Niiden tekoon sitten vaikkapa wxWidgets-kirjasto. Jos ei varsinaisesti kaipaa kuin sen ikkunan, niin SDL on ihan kelvollinen valinta.

Karza [04.12.2005 01:05:21]

#

Kyllä toi on aika monimutkaista. Tai en tiedä, mutta viimeksikin tuli jotain 30 erroria ja virheilmoitusta. En tiedä enään mitä ajattelis.

Karza [04.12.2005 05:36:34]

#

Kiinnostuin Allegron käytöstä, mutta en tosiaan tiedä minne noi kaikki pitää purkaa, mitä zippinä tulee. Eli minne?

Metabolix [04.12.2005 12:10:42]

#

Se on ihan säädöistä kiinni. Mutta jos zipin lataat, se on valitettavan todennäköisesti väärä zip. Opettele nyt jo vähitellen käyttämään DevPak-sivustoa, johon tässä on jo pariin kertaan annettu linkkejä. Se on varmin tapa saada asiat toimimaan DevCpp:ssa. Asennusten jälkeen kannattaa katsoa uutta projektia tehdessä näkyvät uudet vaihtoehdot.

Karza [04.12.2005 14:41:23]

#

Jaa väärä jos allegron omilta sivuilta latasin. Ja sitäpaitsi se on vielä helppo kun en tosiaan ole mikään pro. Sitäpaitsi minulla on jo se mistä olet pistänyt linkkejä, enkä osaa sillä mitään.

Edit: En saa toimimaan tätä Suomipelit.comin jutskaa, mikä löytyy sieltä Allegro oppaasta...

#include <stdio.h>
#include <allegro.h>

int main(void)
{
    // Ensin alustetaan Allegro
    allegro_init();
    // Sitten näppäimistö
    install_keyboard();
    // Sitten laitetaan oikea grafiikkatila
    set_gfx_mode(GFX_VGA,320,200,0,0);
    // Odotellaan näppäimen paimallusta
    while(!key[KEY_SPACE]){}
    // Lopetetaan Allegro
    allegro_exit();
    return(0);
}

Metabolix [04.12.2005 14:55:30]

#

Olen kaksi (2) kertaa laittanut linkin ihan tuohon DevPak-sivuston etusivulle. Sieltä voi ladata yhden jos toisenkin kirjaston, mm. Allegron.

Ja kyllä, voi olla väärä. Mitä nyt nopeasti katsoin, uusimman version lataussivulla oli noin 20 eri pakettia. Minkähän niistä mahdoit ladata?

Joka tapauksessa pääset helpommalla lataamalla sen DevPakin. Silloin ei tule asentamisen kanssa ongelmia.

Kun ei saa jotakin toimimaan, kannattaa myös kertoa, mikä siinä on ongelmana.

Karza [04.12.2005 15:46:29]

#

Juu juu.. latasin sen devpackin...
Tuossa koodissa se valittaa tuota "set_gfx_mode..." riviä sanoin: "'GFX_VGA' undeclared(first use this function)".

Metabolix [04.12.2005 16:11:30]

#

... koska nykyään allegrossa ei ole GFX_VGA-määrittelyä. Laita siihen vaikka GFX_AUTODETECT_WINDOWED.

Karza [04.12.2005 16:18:16]

#

Hmm.. mitä versio tuossa Suomipelit.comin allegro artikkelissa sitten on? ajattelin ettei tulis lisää ongelmia...

EDIT: ..joita tulee heti: ei näytä mitään tiettyä riviä ongelmaksi, mutta valittaa seuraavaa: "[build error] [Project1.exe} error 1".. jotain kääntämis vaikeuksiako?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta