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.
Muusta varmaan selviän, mutta madon ohjausta en osaa tehdä. Miten nuolinäppäimet luetaan näppäimistöltä?
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.
Suosittelisin SDL-kirjastoja. Ne ovat aika käteviä tuollaiseen.
www.libsdl.org
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?
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.
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)
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ä.
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...
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 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...
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('#');
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.
Metabolix kirjoitti:
sqwiik: Missä tuommoiset muka toimivat? :)
Borlandin juttuja ne ovat, mutta saattavat jollain muuallakin toimia.
Jaa a... olisikohan sittenkin parempi aloittaa matopelin sijasta joku merkkipohjainen seikkaulupeli ADOMin tyyliin.
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.
Kyllä matopeli vaikeampi tehdä on, kun sellanen, missä vain (karkeasti otettuna) liikutellaan jotain merkkiä.
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-
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.
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-
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)
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.
olen tässä etsinyt vähän jokapuolelta, mutta etsin vielä. pdcursesin latasin, eli sille.
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?
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.
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.
On mahdollista.
Miten tyhjätään ruutu? Jostain täältä katoin, että pitäs olla joku kirjasto, mutta mistä sen sitten saa?
No vaikka sillä PDCursesilla. Olisiko clear() tai erase().
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.
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ää
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.
Latasin sen, mutta minne se pitää purkaa? ihanko C:/Dev-Cpp/ ?
Tai no oikeastaan latasin NCursesin mutta kai se on melki sama.
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.
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.
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.
Kyllä toi on aika monimutkaista. Tai en tiedä, mutta viimeksikin tuli jotain 30 erroria ja virheilmoitusta. En tiedä enään mitä ajattelis.
Kiinnostuin Allegron käytöstä, mutta en tosiaan tiedä minne noi kaikki pitää purkaa, mitä zippinä tulee. Eli minne?
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.
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); }
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.
Juu juu.. latasin sen devpackin...
Tuossa koodissa se valittaa tuota "set_gfx_mode..." riviä sanoin: "'GFX_VGA' undeclared(first use this function)".
... koska nykyään allegrossa ei ole GFX_VGA-määrittelyä. Laita siihen vaikka GFX_AUTODETECT_WINDOWED.
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.