Kezdőoldal » Számítástechnika » Programozás » C++ -ban a kígyós játékot...

C++ -ban a kígyós játékot miért nem indítja újra?

Figyelt kérdés

Ez lenne a kód...a gondom: ha összeszedek egy gyümölcsöt, és vesztek, megkérdezi, hogy kérek e új játékot, és ha beírom hogy igen, újra a vesztettemre dob. Egy videó segítségével, de sok saját elgondolással írtam a programot.

A hibánál arra gondoltam, hogy a "jatekvege" változót nem jó helyre állítja, de nem, mert a menu(); visszaállítja. Előre is köszönöm!

#include <iostream>

#include <cstdlib>

#include <windows.h>

#include <ctime>

#include <conio.h>

#include <fstream>


using namespace std;


//tábla méretezés

const int szelesseg = 30;

const int magassag = 30;

int pontszam = 0;


int x, y, gyumolcshelyX, gyumolcshelyY;

int farokX[50], farokY[50];

int farokhossz;


// pontszam kiiras

ifstream pontbeker;

ofstream pontmentes;

int elso;

int sor;


// int ido = 20;

char ujjatek;

int fomenu;


//iranyitas

enum iranyok { Megall = 0, Bal, Jobb, Fel, Le};

iranyok irany;


//alap ellenõrzés

bool jatekvege;


int indulas()

{

cout << "Welcome to SNAKE GAME!" << endl;

cout << "Button 1: Play game " << endl;

cout << "Button 2: Highscores" << endl;

cout << "Button 3: Credits" << endl;

cin >> fomenu;


}

void menu()

{

jatekvege = false;

irany = Megall;

x = szelesseg / 2;

y = magassag / 2;

//gyümölcs helyénke koordinátái

gyumolcshelyX = rand() % szelesseg;

gyumolcshelyY = rand() % magassag;

}

void tabla()

{

//konzol kitakarítás: #include <windows.h>

system("cls");

//felsõ sor

for (int i = 0; i < szelesseg+1; i++)

cout << "-";

cout << endl;


for (int i = 0; i < magassag; i++)

{

for (int j = 0; j < szelesseg; j++)

{

if (j == 0)

cout < "o";

// kígyó feje

if ( i == y && j == x)

cout << "8";

//gyümölcs helye

else if (i == gyumolcshelyX && j == gyumolcshelyY)

cout << "O";

else

{

bool farokiro = false;

for (int k = 0; k < farokhossz; k++)

{


if(farokX[k] == j && farokY[k] == i)

{

cout << "o";

farokiro = true;

}


}

if (!farokiro)

cout << " ";

//cout << " ";

}


if (j == szelesseg -1)

cout << "|";


}

cout << endl;

}

//alsó sor

for (int i = 0; i < szelesseg+1; i++)

cout << "-";

cout << endl;

cout << pontszam << endl;


}

void bevitel()

{

if (_kbhit())// megnyomtuk e a billentyût, ha nem, értéke 0 lesz

switch (getch())

{

case 'a':

irany = Bal;

break;

case 'd':

irany = Jobb;

break;

case 'w':

irany = Fel;

break;

case 's':

irany = Le;


}

}

void gephaz()

{

int farokelsoX = farokX[0];

int farokelsoY = farokY[0];

int farokmasodikX, farokmasodikY;

farokX[0] = x;

farokY[0] = y;

for (int i = 1; i < farokhossz; i++)

{

farokmasodikX = farokX[i];

farokmasodikY = farokY[i];

farokX[i] = farokelsoX;

farokY[i] = farokelsoY;

farokelsoX = farokmasodikX;

farokelsoY = farokmasodikY;

}


//mozgas magyarazat

switch (irany)

{

case Bal:

x--;

break;


case Jobb:

x++;

break;


case Fel:

y--;

break;


case Le:

y++;

break;


default:

break;

}


if(x > szelesseg || x < 0 || y > magassag || y < 0)

{jatekvege = false;

jatekvege = true;

system("cls");

}


for (int i = 0; i < farokhossz;i++)

{

if(farokX[i] == x && farokY[i] == y)


{

jatekvege = true;

system("cls");

}

}

//ha megvan a gyumolcs

if (x == gyumolcshelyY && y == gyumolcshelyX)

{

pontszam += 10;

gyumolcshelyX = rand() % szelesseg;

gyumolcshelyY = rand() % magassag;

farokhossz++;

}



}


int main()

{


indulas();

switch (fomenu)

{

case 1:

system("Color 1A");

srand(time(NULL));

menu();


while (!jatekvege)

{



tabla();

bevitel();

gephaz();

Sleep(20);


}

if (jatekvege == true)

{

system("cls");

cout << "Game Over" << endl;

cout << "Number of points: " << pontszam << endl;

pontszam = 0;

}

jatekvege = false;

cout << "New Game? y/n";

cin >> ujjatek;

do

{

main();

}

while (ujjatek == 'y');



case 2:

cout << "Highscores" << endl;

cout << "1st player: Under Developing" << endl;

cout << elso << endl;

break;


case 3:

system("cls");

system("Color 3A");

cout << "Programmed by NightHunter AKA. Norbii" << endl;

cout << "NO RIGHTS RESERVED" << endl;

cout << "It is just a free game, some ideas of code are from videos. Not for sale" << endl;

cout << "To go back to menu, press button '1'" <<endl;

cin >> fomenu;

if (fomenu == 1)

indulas();

cin >> fomenu;

main();


break;

}

}



2017. febr. 21. 20:24
 1/8 anonim ***** válasza:
Szüzanyám
2017. febr. 21. 20:30
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:
mikor írtam nem volt ilyen gáz :D olyan szépen tagoltam...
2017. febr. 21. 20:35
 3/8 anonim ***** válasza:
Hát öregem, ebben olyan dolgok vannak... Nem bántásból, hanem tényleg jótanácsként mondom: vegyél/töls le pár tankönyvet és olvasd el, mert láthatóan alapelvekkel nem vagy tisztában. Pl szabvány szerint main() függvényt nem hívunk. Globális változók: nope. Kerüldöd, míg nem kell feltétlen használod. {jatekvege = false; jatekvege = true; kapásból egymás után... stb. Am nekem maga játék se fut már egyszer se, nemhogy többször.
2017. febr. 21. 22:07
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:

pedig kimásoltam most és megy...másik gépen is...Code:blockban fejlesztettem. És tudom hogy alap hiányosságok vannak, igyekszem kiküszöbölni de nem teljesen megy, pedig már nem az első könyvet olvasom el de egyedül nehezen haladok:)

Akkor a main() helyett hogy hívjam újra a programot?

2017. febr. 21. 22:12
 5/8 A kérdező kommentje:
ja és a jatekvege változót igyekeztem törölni mert arra gyanakodtam, hogy nem áll vissza false-ra amikor újrafuttatom, de a menu()ben benne van... de nem vettem úgy látszik ki mindenhonnan, a programomba javítva
2017. febr. 21. 22:13
 6/8 tabaki ***** válasza:

De ugye, a javított változatot már nem ide fogod feltenni?

Csak azért kérdem, mert bemásolásra készen tartom a 'József és testvéreit' erre az esetre...

2017. febr. 22. 16:49
Hasznos számodra ez a válasz?
 7/8 tabaki ***** válasza:

"...a main() helyett hogy hívjam újra a programot?"


Arra még nem gondoltál, hogy az egész játék lehet a main()en kívül, egy függvényben? A main()ben meg csak azt intéznéd, hogy meghívja-e újra, vagy sem.

2017. febr. 22. 16:55
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Nem terveztem feltenni, de már nekem is eszembe jutott hogy máshova kellett volna:) és megnézem ezt a függvényes dolgot
2017. febr. 22. 17:39

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!