Hankin tuossa PD Cursesin Dev-C++ v.4.9.9.2:een. Aioin alkaa väkertämään roguelike peliä. Aluksi päätin ihan vain tehdä ohjelman, jossa ohjataan miukumauku-merkkiä(alias @)muuten tyhjässä ikkunassa. Mutta eihän siitä mitään tullut. Ongelma oli siinä etten jotenkin saanut cin>>-funktiota toimimaan. En tiedä johtuiko tämä siitä että iostreamin lisäksi käytössä oli curses.h, vaiko siitä että C++ kieli on muuttunut (ja minä en). Onhan PD Cursesissa omat funktionsa käyttäjän käskyjen vastaanottoon, mutta en osaa käyttää niitä.
Joten voisiko joku laittaa esiin tälläisen "liikkuva miukumauku ohjelman" koodin ja selittää sen minulle. Kiitos.
Wisva suunnilleen kirjoitti:
Moi, teen pelin PDCursesilla, en kylläkään käytä sitä vaan tavallista C++:aa, miksei toimi?!!
Jokin järki mukaan ja Putkan ncurses-opas käteen. Jos et ymmärrä sen avulla, yrität varmaankin haukata turhan suurta palasta ja pitäisi palata alkeisiin.
Siitä olisi apua jos joku vähän tarkemmin selittäisi kuinka tuo getstr()-funktio toimii. Siis kuinka sitä käytetään? Tai olisiko jossain sellaisen ohjelman koodi josta aiemmin puhuin, varmaan selviäisi silläkin.
Jos lukisit sitä opasta, huomaisit, että siellä sekä kerrotaan käytöstä että annetaan esimerkki. Lisäksi kokeilemalla huomaisit itse, mitä funktio tekee (ja että se ei tee sitä, mitä haluat; ota getch ennemmin).
# include <curses.h> # include <iostream> int main() { //esitellään muuttujat //liittyen omaan hahmoon int X = 5; int Y = 5; int eX ; int eY ; char suunta; initscr(); noecho(); curs_set(0); liike: mvprintw(X,Y,suunta); eX = X; eY = Y; getch (suunta); switch(suunta) { case 2: X++; case 8: X--; case 6: Y++; case 4: Y--; } ; goto liike; return 0; }
Eli tuossa on käyttämäni koodi. Missä siinä on vika, ja miten se pitäisi korjata?
En ole ihan varma noiden include-rivien terveellisyydestä. Mihin tarvitset eX ja eY -muuttujia? "getch" ei toimi noin vaan näin: suunta = getch(). Switch ei tarvitse ;-merkkiä aaltosulkulopetuksen jälkeen. Sinä et breikkaa (break) case-vertailujen jälkeen. Et sulje cursesia lopussa. ...
Lue ensinnäkin joku hemmetin C tai C++ -opas, sitten curses-opas ja ala tämän jälkeen miettimään tämmöisiä projekteja!
Lisäksi mvprintw:lle annetaan ensin y-koordinaatti ja sitten x-koordinaatti (ainakin ncursesia käytettäessä, pdcurses on käsittääksen likimain samanlainen).
Huomaa myös, että 2, 4, 6 ja 8 eivät ole varmaan minkään näppäimen näppäinkoodeja. Oheisella esimerkkiohjelmalla voit selvittää eri näppäinten näppäinkoodit ja näet samalla, miten näppäinten lukeminen ja ruudulle tulostaminen onnistuu.
#include <curses.h> int main() { int X = 5; int Y = 5; char suunta; /* Alustukset */ initscr(); noecho(); /* Tutkitaan näppäinkoodeja */ while(1) { suunta=getch(); mvprintw(Y,X,"%d",suunta); Y++; } return 0; }
Tarkista myös c-opassarjasta (löytyy opasalueelta) switch-rakenteen oikea syntaksi, tarvitset sinne brake;-käskyjä.
OT: Tässä keskustelussa kulminoituu hieman ohjelmointiputkan nykysuunta. Aloittelijoille ja koodarinaluille puhutaan epäkohteliaasti ja lannistavasti, vaikkakin mielestäni ohjelmointiputkan valtteja ovat olleet aloittelijaystävällisyys ja auttamisenhalukkuus keskustelijoilla. Siksi ainakin minä olen aina tykännyt enemmän käyttää putkaa kuin kuhaa. Viesti pätee koko alueelle eikä vain tähän säikeeseen.
ja aiheeseen:
Niinkuin muutkin kertoivat, niin todennäköisesti yrität hieman liian vaikeita asioita vielä. Vakiovalinta C++:n opiskeluun suomeksi on Hassun Hauska C++-opas (vai oliko se hassun hauska? :>). Putkan C-opas on myös hyvä vaihtoehto. Toisaalta, kuten tgunner sanoi, sinulla on perusasioiden kanssa vielä vaikeuksia, niin voisi olla kenties hyvä harkita jotain muuta helpompaa ohjelmointikieltä, jotka ovat selkeämpiä ja joilla on helpompaa tehdä nopeasti jälkeä, josta itse nauttii. Jokin basic-kieli voisi kenties olla hyvä, taikka esimerkiksi Python. Jälkimmäisellä saat ohjelmoitua vaikka mitä ja jos tarvitset joskus jotain tehokkaampaa ja Python ei riitä, niin astetta haastavamman työkalun, eli C++:n opiskelu tuskin tuottaa vaikeuksia.
Todellakin olisi suositeltavaa tarkistaa opas ja lukea se huolella ajatuksen kanssa ennenkuin alkaa kysymään jotain ja aloittaa uutta säiettä keskustelupalstalle :)
PS: Avauduimpa tästä putkan nykymenosta pitkän sivustakatselun jälkeen :D. Jo vuodesta -04 (vai vasta vuodesta?) asti seuranneena ja ensimmäisiä versioita muistellessani juuri aloittelijaläheisyys ja aloittelijan harrastuksen tukeminen ja kannustaminen olivat niitä arvoja, joita putka noudatteli, ja joiden avulla pääsin itsekin joskus ohjelmoinnissa liikkeelle. Pitäkäämme lippu korkealla.
Tuossa oleva koodi on tosiaan pahasti keskeneräinen. Ja kiitos siitä kun sanoit miten getch toimii. Tein sen ncurses-oppaassa neuvotun ASCII-arvon testausohjelman, ja uskon sen avulla saavani ohjelman toimimaan...
Tuossa aloittelija ystävällisyys asiassa olen samaa mieltä TeeVeen kanssa. Oletukseni on ettei kukaan täällä tarkoituksella loukkaa ketään, mutta kannattaa ottaa huomioon, ettei viestistä tunnista äänensävyä. Leikinlasku ja pilkka voivat näyttää samalta.
Joo sain sen ohjelman toimimaan. Mistä muuten kannattaisi hakea lisätietoa, sitten kun haluan tehdäpeliini tallentamismahdollisuuden?
No ensinnäkin sinun täytyy miettiä, mitä tietoja tarvitset pelitilanteen tallentamiseen. Varmaankin hahmon tiedot, kentän, jossa hahmo majailee ja jos vielä tarkemmin haluat, niin lisäksi hahmon koordinaatit kentässä.
Tallennusmahdollisuudet riippuvat sinusta aivan kokonaan, koska tallennustiedosto on vain tavallinen (tai ehkä sisällöltään kryptattu) tekstitiedosto, joka pitää joitakin tietoja sisällään.
Mistähän löytyisi neuvoa siihen, kuinka ohjelmani voi luoda tai lukea tuollaisia tekstitiedostoja?
Ööh, ootko miettiny esimerkiks C tai C++ -oppaita? Ihan standardikirjastojen funktioilla lähtee.
Kuten sanoin ylempänä:
tgunner kirjoitti:
Lue ensinnäkin joku hemmetin C tai C++ -opas, sitten curses-opas ja ala tämän jälkeen miettimään tämmöisiä projekteja!
asia selvä
Öh... Mistä löydän tavan tehdä tallentamis tekstitiedostoja. Selasin hassun hauskan C++-oppaan, mutta joko kykyni etsiä on heikko tai siellä ei ole apua. Mihin tällainen liittyy? Jonkinlaisiin osoittimiin, vaiko muuhun?
Wisva kirjoitti:
Selasin hassun hauskan C++-oppaan
Väärin. Lue opas kunnolla alusta loppuun ja tee kaikki siellä esitetyt harjoitukset tms. Tähän kuluu varmaan useita kuukausia. Et voi opetella C++:aa selaamalla oppaita. Niin kauan, kun tuon oppaan sisältö on sinulle hepreaa, sinulla ei ole minkäänlaisia mahdollisuuksia koodata toimivaa roguelike-peliä riippumatta siitä, kuinka paljon sinua esimerkiksi täällä neuvotaan. Kun vastaavasti osaat kieltä kunnolla, osaat jo tehdä tallennustekstitiedoston. Tämä ei ole mikään kummoinen temppu, jos tiedät, miten luku- ja kirjoitusfunktiot ja "Jonkinlaiset osoittimet" toimivat. Perusasioita.
Edit: Roguelike-peli on hämäävän yksinkertaisesta ulkonäöstään huolimatta sisäisesti hyvin monimutkainen projekti, eikä sellaisen ohjelmointi ole helppoa, vaikka kieli olisi periaatteessa hallussa. Ei missään tapauksessa ensimmäiseksi peliksi. Suosittelen lämpimästi aloittamaan jostakin muusta.
Selvä. Edetäänpä rauhallisesti joo...
Aihe on jo aika vanha, joten et voi enää vastata siihen.