Игра в змей. Тело не убирают :(
Таким образом, тело было инициализировано в исходное положение и не удаляется с доски, когда начинается игра. Уходя к этому выступающему в качестве препятствия.
Чтобы запустить код:
gcc-o змеи Змеи. c-lncurses
Затем
./Змеи
Что я уже пробовал:
#include <curses.h> #include <stdio.h> #include <time.h> #include <stdlib.h> #define LEN 22 //this will be the size of the game #define DOWN 2 //defines the movement value sequentially #define UP 3 #define LEFT 4 #define RIGHT 5 //Void function for creating the games map void boardGeneration(int x, int y, char map[][LEN]) { int Rows; int Cols; for(Rows = 0; Rows < LEN ; Rows++) { for(Cols = 0; Cols < LEN ; Cols++) { mvaddch(Rows+1,Cols+1,map[Rows][Cols]); } } mvaddch(y+1, x+1, '#'); //movement of the snakes head around the baord } //Function to determine next position of food int foodLocation(void){ srand(time(NULL)); //Generates random seed return (rand()%10); //Return comand of the random number } int main(){ int start = 1; printf("Do you want to start playing Snakes?\nType 1 for Yes or 2 for No: "); scanf("%d", &start); while (start == 1){ int score=0; //Initialises score value for game char map[][LEN]={" -------------------- ", //Defines map boundaries "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", "| |", " -------------------- ", }; map[foodLocation()][foodLocation()]='$'; keypad(initscr(),TRUE); //Allows terminal to read from keypad curs_set(0); //Removes cursor symbol mvprintw(2,23," You are now playing SNAKE'S "); //Print comments on game screen mvprintw(3,23," Move around the screen with your arrows "); mvprintw(4,23," But, be mindful of your tail and the walls! "); mvprintw(11,23," End game by pressing 'e' "); int PosX=11; //initiaised location to the center of board int PosY=11; int inc=1; int snakeLength=5; //Make snake initial length int xvalue[100]; //stores previous position int yvalue[100]; int i; int movement; //place holder for movement direction char c; //initialised end game charactor while(c!='e'){ mvprintw(10,23," Current score %d", score); boardGeneration(PosX,PosY,map); //updating displayed array c=getch(); //reading a single character from keyboard map[PosY][PosX]='*';//updates position of curser in array switch(c){ case UP: PosY--; movement=UP; break; case DOWN: PosY++; movement=DOWN; break; case LEFT: PosX--; movement=LEFT; break; case RIGHT: PosX++; movement=RIGHT; break; } if(map[PosY][PosX]=='$'){ snakeLength = snakeLength + 1; //increases the length of the snake score = score + 1; //updates score when food is eaten if((PosY+PosX)<=20){ map[foodLocation()+10][foodLocation()+10]='$'; //updates food position on map } else{ map[foodLocation()][foodLocation()]='$'; } } xvalue[0]=PosX; //current position is first in the array yvalue[0]=PosY; for(i=snakeLength;i>0;i--){ //loop for transferring past postions in the x position xvalue[i]=xvalue[i-1]; } for(i=snakeLength;i>0;i--){ //loop for transferring past postions in the y position yvalue[i]=yvalue[i-1]; } if(inc==snakeLength){ map[yvalue[snakeLength]][xvalue[snakeLength]]=' '; //Removes old position } if(inc<snakeLength){ inc=inc+1; } if(map[PosY][PosX]=='-'|| map[PosY][PosX]=='|'){ //game over if the xursor position hits the boundary break; } if(map[PosY][PosX]=='*' && snakeLength>4){ // game over if cursor runs into body break; } } endwin(); if (map[PosY][PosX]=='-'|| map[PosY][PosX]=='|'){ // print comands to tell the user how/why the game ended printf("\nYou just ran into a wall and died\nYour score was %d\n\n",score); } else if ('e'){ printf("\nThanks for playing\nYour score was %d\n\n", score); } else if (map[PosY][PosX]=='*'){ printf("\nYou just tried to eat yourself and died\nYor score was %d\n\n", score); } printf("Do you want to play Snakes again?\nType 1 for Yes or 2 for No: "); scanf("%d", &start); if (start == 2){ printf("\nYou chose not to play right now\nBYE\n"); } } }
Richard MacCutchan
И мы должны догадываться, что происходит и где?
Zacharry
Таким образом, змея предназначена для того, чтобы передвигаться по доске и собирать"$", но у меня есть проблема, которая заключается в том, что тело остается позади
Richard MacCutchan
Ваш код может быть легче понять, если вы разделите свой основной метод на отдельные функции. Создайте функцию, которая обрабатывает движения змеи, а затем выполните несколько тестов, чтобы увидеть, как она себя ведет. Тогда вы сможете быстро определить, где что-то идет не так.