Опять застрял.. Проблема в основной функции...пожалуйста, помогите !
После запуска кода выбор 1 из главного меню запустит игру, и когда had touch the tail программа предположит, что вернет главное меню, которое действительно происходит (это была моя проблема предвидения, когда в игре had Touch tail не возвращался в Главное меню, которое я решил), теперь истинная проблема заключается в том, что когда вы поворачиваетесь к главному меню и повторяете то же самое действие снова, которое нажимает 1 из главного меню, программа не будет работать в игре, вместо этого она останавливается в меню, и если выбран вариант 3, который является выходом из игры, ничего не происходит, программа показывает то же самое меню.
что я упускаю ?
//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, LEFT, RIGHT, UP, DOWN}; eDirecton dir; void setup(); void Draw(); void input(); void logic(); 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(); input(); logic(); Sleep(10); } } 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 choose 1, 2 or 3 !"; getch(); goto menu; } return 0; } 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 -- [not 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 input() { 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\t Game Over"; Sleep(3000); gameOver = true; } } } 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; } //for future, another option - hitting the walls game stops -- [not 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) main(); } if(x == fruitX && y == fruitY) { score += 1; fruitX = rand() % width; fruitY = rand() % height; nTail++; } }
Что я уже пробовал:
Я просто застрял, еще ничего не пробовал.. вероятно, нужно изменить goto, который больше похож на бесконечный цикл с корпусом переключателя в основной функции ..?
Пожалуйста помочь..