Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ongelma roguelikeä tehdessä

Sivun loppuun

Wisva [03.07.2007 15:56:26]

#

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.

Metabolix [03.07.2007 17:03:07]

#

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.

Wisva [04.07.2007 15:25:38]

#

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.

Metabolix [04.07.2007 15:42:49]

#

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).

Wisva [05.07.2007 12:43:23]

#

# 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?

tgunner [05.07.2007 12:56:45]

#

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!

Heikki [05.07.2007 17:35:09]

#

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ä.

TeeVee [05.07.2007 17:47:56]

#

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.

Wisva [05.07.2007 17:57:37]

#

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.

Wisva [10.07.2007 09:55:51]

#

Joo sain sen ohjelman toimimaan. Mistä muuten kannattaisi hakea lisätietoa, sitten kun haluan tehdäpeliini tallentamismahdollisuuden?

tgunner [10.07.2007 19:08:51]

#

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.

Wisva [11.07.2007 20:59:53]

#

Mistähän löytyisi neuvoa siihen, kuinka ohjelmani voi luoda tai lukea tuollaisia tekstitiedostoja?

tgunner [11.07.2007 21:02:56]

#

Öö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!

Wisva [13.07.2007 10:10:49]

#

asia selvä

Wisva [21.07.2007 13:35:41]

#

Ö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?

os [21.07.2007 13:46:11]

#

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.

Wisva [21.07.2007 18:33:14]

#

Selvä. Edetäänpä rauhallisesti joo...


Sivun alkuun

Vastaus

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

Tietoa sivustosta