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?
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.
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.
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
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).
Siis tuo @ merkki on siis se hahmo.Siitä tulee siis ASCII grafiikalla tehty tekstiseikkailu.(en selittänyt tarpeeksi selkeästi )
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.
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.
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.
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/
(Tuo liittyi tuohon Kopeekan hupikoodaukseen
https://www.ohjelmointiputka.net/keskustelu/
)
En tajua.Käytän cin oliota mielestäni aivan oikein mutta kun yritän testata niin eipä tapahdu mitään
"Mielestäsi oikein" ei pakolla ole oikeasti oikein. Anna joku pieni esimerkkikoodi cinin käytöstä, josta on korjattu kaikki edellämainitut virheet.
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; }
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?
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
Taisi tgunner mennä sekaisin siitä, kenellä oli ongelma. :)
Ongelmista kannattaisi kertoa hieman täsmällisemmin, "ei toimi" on aika heikko vinkki auttajalle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.