Как сделать так, чтобы игра возвращала главное меню, когда нужно было коснуться хвоста ?
//Author Me// #include <iostream> #include <conio.h> #include <windows.h> using namespace std; bool gameOver; const int width = 49; const int height = 15; int x, y, fruitX, fruitY, score; int tailX[500], tailY[500]; int nTail; enum eDirecton {STOP = 0, LEFT, RIGHT, UP, DOWN}; eDirecton dir; void setup() { gameOver = false; dir = STOP; x = width / 2; y = height / 2; fruitX = rand() % width; fruitY = rand() % height; score = 0; } void Draw() { //for balance speed directions -- [non active]. //if(dir == LEFT || dir == RIGHT) //{ // Sleep(0); //} //if(dir == UP || dir == DOWN) //{ // Sleep(0); //} HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD Position; Position.X = 0; Position.Y = 0; SetConsoleCursorPosition(hOut, Position); cout << "\n\t ooooO Snake Game ooooO\n\n"; for(int i = 0; i < width + 2; i++) cout << "#"; cout << endl; for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) { if(j == 0) cout << "#"; if(i == y && j == x) cout << "O"; else if(i == fruitY && j == fruitX) cout << "$"; else { bool print = false; for(int k = 0; k < nTail; k++) { if(tailX[k] == j && tailY[k] == i) { cout << "o"; print = true; } } if(!print) cout << " "; } if(j == width - 1) cout << "#"; } cout << endl; } for(int i = 0; i < width + 2; i++) cout << "#"; cout << endl; cout << "\nAuthor: Me Press 'x' to exit game Score " << score << endl; } void imput() { if(_kbhit()) { switch(_getch()) { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': cout << "\n\n\t\t\tStopped by user !"; Sleep(3000); system("cls"); cout << "\n\n\n\n\n\n\n\n\n\n\n\t\t\t Game Over"; Sleep(3000); gameOver = true; break; } } } void logic() { int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = x; tailY[0] = y; for (int i = 1; i < nTail; i++) { prev2X = tailX[i]; prev2Y = tailY[i]; tailX[i] = prevX; tailY[i] = prevY; prevX = prev2X; prevY = prev2Y; } switch(dir) { case LEFT: x--; break; case RIGHT: x++; break; case UP: y--; break; case DOWN: y++; break; default: break; } //Another option - hitting the walls will make the game stop -- [non active]. //if(x > width || x < 0 || y > height || y < 0) // gameOver = true; if(x >= width) x = 0; else if(x < 0 ) x = width - 1; if(y >= height) y = 0; else if(y < 0 ) y = height - 1; for(int i = 0; i < nTail; i++) { if(tailX[i] == x && tailY[i] == y) gameOver = true;//<--from here do something else to return main function. Not to exit console.. what should it be instead of 'gameOver = true' ?// } if(x == fruitX && y == fruitY) { score += 1; fruitX = rand() % width; fruitY = rand() % height; nTail++; } } int main() { menu: system("cls"); int a; cout << "\n\n\n\n\t\t\t ooooO Snake Game ooooO\n"; cout << "\n\n\n\t\tMain menu\n\n"; cout << "\t\t1. Play game\n"; cout << "\t\t2. Game controls\n"; cout << "\t\t3. Exit game\n"; cout << "\n\t\tSelection "; cin >> a; if(a == 1) { setup(); while(!gameOver) { Draw(); imput(); logic(); Sleep(0); } } else if (a == 2) { system("cls"); cout << "\n\n\n\n\t\t\t ooooO Snake Game ooooO\n"; cout << "\n\n\n\tGame controls\n"; cout << "\n\n\n\t\t\t 'a' = LEFT\n"; cout << "\n\t\t\t 'd' = RIGHT\n"; cout << "\n\t\t\t 'w' = UP\n"; cout << "\n\t\t\t 's' = DOWN\n"; cout << "\n\tWhile playing game 'x' = EXIT\n\n\n"; cout << "\n\tPress any key to return Main menu"; getch(); goto menu; } else if(a == 3) { gameOver = true; cout << "\n\n\n\t\t\t\tExit game\n\n\n"; Sleep(1500); system("cls"); } else { cout << "\n\t\tNo such option press 1, 2 or 3 !"; Sleep(2500); goto menu; } return 0; }
Что я уже пробовал:
Я пытался изменить это.
gameOver = true;с
gameOver = false;Но кажется, что в игре заходит какой-то баг вроде бы ... ну, это никогда не заканчивается, и правая боковая стенка постоянно меняется.
Пожалуйста, помогите мне понять, как перейти от логической функции к основной функции?
ZurdoDev
Вы написали этот код?