C++ -ban a kígyós játékot miért nem indítja újra?
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;
}
}
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?
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...
"...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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!