Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <conio.h> //_kbhit(), _getch
- #include <ctime> //time()
- #include <vector>
- using namespace std;
- //felsorolás típus
- const int SZELESSEG = 20;
- const int MAGASSAG = 20;
- struct koordinata
- {
- int X;
- int Y;
- };
- enum Irany {BAL,FEL,JOBB,LE, STOP};
- koordinata kigyoFej;
- Irany kigyoIrany;
- koordinata kaja;
- vector<koordinata> kigyoTest;
- koordinata getKajaKoordinata()
- {
- koordinata k;
- do
- {
- k.X = rand() % SZELESSEG;
- k.Y = rand() % MAGASSAG;
- if(k.X != kigyoFej.X && k.Y != kigyoFej.Y)
- break;
- }
- while(1);
- return k;
- }
- void szamol()
- {
- //A kigyoirany tartalma alapján elmozdítom a kígyó fejét a koordináta rendszerben
- switch(kigyoIrany)
- {
- case BAL:
- kigyoFej.X--;
- break;
- case FEL:
- kigyoFej.Y--;
- break;
- case JOBB:
- kigyoFej.X++;
- break;
- case LE:
- kigyoFej.Y++;
- break;
- default:
- break;
- }
- if(kigyoFej.X == kaja.X && kigyoFej.Y == kaja.Y)
- {
- koordinata k;
- k.X = kigyoFej.X;
- k.Y = kigyoFej.Y;
- kigyoTest.insert(kigyoTest.begin(),k);
- kaja = getKajaKoordinata();
- }
- }
- void beolvas()
- {
- //cin-t kell használni?
- //nem jó, mivel csak akkor lépek, ha van bill.leütés
- //HELYETTE: detektáljuk, van-e bill.leütés, ha van, akkor azzal lépünk tovább
- //_kbhit(): detektálja, hogy van-e leütés, int értékkel tér vissza 0: nem volt, bármi más: volt.
- if(_kbhit())
- {
- //biztosan volt leutes, meg kell valtoztatni a mozgas iranyt.
- //_getch(): visszakerem a leutott bill.-t
- switch(_getch())
- {
- case 'a':
- if(kigyoIrany != JOBB)
- kigyoIrany = BAL;
- break;
- case 'w':
- if(kigyoIrany != LE)
- kigyoIrany = FEL;
- break;
- case 'd':
- if(kigyoIrany != BAL)
- kigyoIrany = JOBB;
- break;
- case 's':
- if(kigyoIrany != FEL)
- kigyoIrany = LE;
- break;
- case 'x':
- break;
- }
- }
- }
- void palyaKirajzol()
- {
- //kerenyo torles: háttérben az operációs rendszer utasítás készletét felhasználva hajtom végre
- //Máshogyan törlünk Unix és Windows alatt (unix: clear, windows: cls) windows alapú futtató környezet esetén definiálva lesz egy _WIN32 konstans érték.
- #ifdef _WIN32
- system("cls");
- #else
- system("clear");
- #endif // _WIN32
- //Balfelső sarokban áll a kurzor
- //A felso szegely kirajzolása
- cout << "+";
- for(int i=0; i<SZELESSEG; i++)
- cout << "-";
- cout << "+" << endl;
- //palya kirajzolasa
- for(int i= 0; i < MAGASSAG; i++)
- {
- cout << "|";
- for(int j=0; j<SZELESSEG; j++)
- {
- if(kigyoFej.X == j && kigyoFej.Y == i)
- cout << "O";
- else if(kaja.X == j && kaja.Y == i)
- cout << "#";
- else
- cout << " ";
- }
- cout << "|" <<endl;
- }
- //Also szegely kirajzolasa
- cout << "+";
- for(int i=0; i<SZELESSEG; i++)
- cout << "-";
- cout << "+" << endl;
- if(kigyoFej.X <= 0)
- kigyoFej.X = SZELESSEG+kigyoFej.X;
- else if(kigyoFej.X >= SZELESSEG)
- kigyoFej.X = kigyoFej.X - SZELESSEG;
- if(kigyoFej.Y <= 0)
- kigyoFej.Y = MAGASSAG + kigyoFej.Y;
- else if(kigyoFej.Y >= MAGASSAG)
- kigyoFej.Y = kigyoFej.Y - MAGASSAG;
- }
- int main()
- {
- //inicializálom a random számokat
- srand(time(NULL));
- kaja = getKajaKoordinata();
- int lefoglalni = SZELESSEG*MAGASSAG / 2;
- kigyoTest.reserve(lefoglalni);
- kigyoIrany = STOP;
- kigyoFej.X = SZELESSEG/2;
- kigyoFej.Y = MAGASSAG/2;
- while(true)
- {
- palyaKirajzol();
- beolvas();
- szamol();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement