Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Hahmo liikkumaan

Sivun loppuun

WCCsplinter [08.09.2007 22:52:55]

#

Eli olen tekemmässä ohjelmalla DevC++ peliä ja olen vasta aloittelia.
Kysymys kuuluu miten saisin hahmon liikkumaan tästä-

#include <iostream>

using namespace std;

int main(int)
{
cout<<" hahmo " << endl;


    cin.get ();
    return 0;
}

Eli suoraan sanoen miten jatkaa kun hahmo on tulostettu?

Antti Laaksonen [08.09.2007 23:20:13]

#

Tuo tulostustapa ei sovellu pelin tekemiseen, koska hahmo voisi liikkua ainoastaan ylöspäin, ja sinnekin vain, jos tulostat riittävästi tyhjiä rivejä.

Jos aiot tehdä pelin C++:lla, tarvitset heti alkajaisiksi jonkin lisäkirjaston grafiikan yms. toteutukseen. Yksi sellainen on SDL, ja opasalueelta löydät neuvoja sen asennukseen ja käyttöön.

Grez [08.09.2007 23:30:11]

#

No, kyllähän se periaatteessa onnistuisi noinkin kun tunkisi VT102, ANSI tms ohjauskoodeja väliin. Tietysti mitään järkeähän moisessa ei ole vaan kannattaa tosiaan käyttää jotain valmista kirjastoa joka hanskaa yleisimmät terminaalit.

WCCsplinter [09.09.2007 09:48:26]

#

Nyt on kyllä ongelmia tuon SDLän kanssa.Kaikista vinkeistä huolimatta en tiedä mitä mihinkin pitää laittaa että saisin @merkin liikkumaan.Olen jo kokeillut kaikkea tietämääni keinoa

Metabolix [09.09.2007 11:20:02]

#

Ei SDL:ssä ole @-merkkiä, jos et sellaista kuvatiedostosta lataa. SDL on graafinen eikä tekstipohjainen, se käsittelee vain kuvia.

Kannattaa opetella kielen alkeet jotenkin yksinkertaisemmin eli käyttää sitä, mitä saa cout-olion avulla tulostettua. Voit tehdä vaikkapa tekstiseikkailupelin tai pienen ristinollan tai mitä tahansa muuta, kunhan vain sovitat suunnitelmasi siihen rajoitukseen, että tulostettua riviä ei voi enää muokata vaan rivejä tulee vain lisää.

Kun perusteet ensin ovat hallinnassa, voit joko tehdä SDL:llä graafisen ohjelman tai vaikkapa PDCursesilla tekstipohjaisen (kuten ilmeisesti haluaisit).

WCCsplinter [09.09.2007 11:28:02]

#

Siis tuo @ merkki on siis se hahmo.Siitä tulee siis ASCII grafiikalla tehty tekstiseikkailu.(en selittänyt tarpeeksi selkeästi )

Metabolix [09.09.2007 12:24:37]

#

Käsitin kyllä, sinä sen sijaan et tainnut käsittää vastausta.

Termeistä vielä, niin tekstiseikkailu on siis vaikkapa tällainen:

Seisot tienhaarassa. Mitä teet?
1) Menen oikealle.
2) Menen vasemmalle.
3) Käännyn takaisin.
Valitse: 2

Käännyit tienhaarasta vasemmalle. Näet edessäsi lauman örkkejä. Mitä teet?
1) Juoksen pakoon.
2) Kuolen.
Valitse: ...

Tekstit siis voi tulostaa cout-oliolla ja vastauksen pyytää lukuna cin-oliolla.

ASCII-graafinen peli on asia erikseen, ja jottei tarvitsisi selittää kaikkea uudestaan, lue edellinen viesti.

squid [09.09.2007 18:00:30]

#

Toi seikkailupelin tekeminen on jo hyvä senkin takia, että siinä opit tekemään tarinan. Mukavampi sitten tehdä vaativampaa peliä, kun on jo jonkinlainen tarinapohja valmiina, ja tiedät mitä hahmoja, aseita ja varusteita tarvitset.

crafn [10.09.2007 19:02:16]

#

Hmm.. Kyllähän tuo tulostaminen tiettyyn kohtaan onnistuu sillä tavalla että tekee luokan ruudun käsittelylle joka sisältää 2-ulotteisen taulukon ja kun kaikki tarvittava on lisätty taulukkoon niin tulostetaan taulukon sisältö.

#include <iostream>

using std::cout;

class Ruutu {
    private:
    char merkit[24][80];
    public:
    Ruutu(){
        for(int i=0; i<24; i++){
            for(int i2=0; i2<80; i2++){
                merkit[i][i2] = ' '; //Alustetaan kaikki merkit välilyönneiksi
            }
        }
    }
    void SetChar(int x, int y, char merkki){
        merkit[x][y] = merkki;
    }
    void Draw(){
        for(int i=0; i<24; i++){//piirretään jokainen merkki yksitellen
            for(int i2=0; i2<80; i2++){
                cout << merkit[i][i2];
            }
        }
    }

};

int main()
{
    Ruutu ruutu;
    ruutu.SetChar(10, 10, '@');
    ruutu.Draw();

    return 0;
}

Edit: Koodi testattu. Pitäisi toimia ihan oikein.

FooBat [10.09.2007 19:52:55]

#

Kyllä tuo kannattaa heti alusta lähtien tehdä Metabolixin mainitsemalla PDCurses kirjastolla.
En tiedä auttaako tämä ainoa tuolla itseni nopeasti tekemä ja _niukasti_ kommentoitu tekele mitään, mutta siinä ainakin on kursorin liikutus ascii ruudulla. Google auttaa Pdcursesin funktioden toimintojen selvittämisessä.
http://www.niksula.hut.fi/~jasainio/Miscellaneous/mandelbrot.c

(Tuo liittyi tuohon Kopeekan hupikoodaukseen
https://www.ohjelmointiputka.net/keskustelu/14382-kuukauden-hupikoodaus-ascii-mandelbrot
)

WCCsplinter [10.09.2007 20:38:10]

#

En tajua.Käytän cin oliota mielestäni aivan oikein mutta kun yritän testata niin eipä tapahdu mitään

tgunner [11.09.2007 14:53:27]

#

"Mielestäsi oikein" ei pakolla ole oikeasti oikein. Anna joku pieni esimerkkikoodi cinin käytöstä, josta on korjattu kaikki edellämainitut virheet.

jimi-kimi [12.09.2007 10:29:41]

#

Siis ei toimi mitenkään? Toimiiko seuraava koodi sinulla?

#include <iostream>

int main()
{
  int luku;
  std::cout << "\nSyota jokin numero "; std::cin>> luku;
  std::cout << "\nSyottamasi luku on: " << luku;

  std::cin.get();
  return 0;
}

tgunner [12.09.2007 15:46:52]

#

Täydellisesti toimii.

c:\nyrre\ohjelmointi\harjoitukset> g++ -s -o2 -o cin.exe cin.cpp
c:\nyrre\ohjelmointi\harjoitukset> cin

Syota jokin numero 5

Syottamasi luku on: 5
c:\nyrre\ohjelmointi\harjoitukset>

Millainen "ei toimi mitenkään"-tapahtuma tämä on?

edit. vai puhutko koodin pohjalla olevasta cin.getistä, joka ei tässä tapauksessa ole kovin vaikutusvaltainen?

jimi-kimi [13.09.2007 22:30:33]

#

tgunner, kohdistitko kysymyksesi minulle? Koitin karsia vähän eri vaihtoehtoja MCCsplinterin ongelmasta.

WCCsplinter kirjoitti:

En tajua.Käytän cin oliota mielestäni aivan oikein mutta kun yritän testata niin eipä tapahdu mitään

Metabolix [14.09.2007 09:21:58]

#

Taisi tgunner mennä sekaisin siitä, kenellä oli ongelma. :)

Ongelmista kannattaisi kertoa hieman täsmällisemmin, "ei toimi" on aika heikko vinkki auttajalle.


Sivun alkuun

Vastaus

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

Tietoa sivustosta