我的蛇游戏有问题(在 c - 代码块中)。
大多数时候,它不会产生果实。此外,当蛇(“+”)与水果(“*”)进入同一行时,它突然开始窃听(不知道如何描述它,只需尝试代码)。
请详细说明问题,以免我犯同样的错误两次。 (我是自学的,所以我需要了解这一点才能继续学习并希望成为一名软件工程师)。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <unistd.h>
int fruit = 0;
int snake_row = 9;
int snake_column = 21;
int fruit_row;
int fruit_column;
int move;
int gameover = 0;
void draw(){
sleep(0.9);
system("cls");
if (move==1)
snake_row--;
if (move==2)
snake_column--;
if (move==3)
snake_row++;
if (move==4)
snake_column++;
if (snake_row<1 || snake_row>19 || snake_column<1 || snake_column>43)
gameover++;
if (snake_row!=fruit_row){
printf(" ___________________________________________");
for (int i = 0; i<19; i++){
if (i==fruit_row){
printf("\n|");
for (int j = 1; j<fruit_column; j++)
printf(" ");
printf("*");
for (int j = 0; j<43-fruit_column; j++)
printf(" ");
printf("|");
}
else if (i==snake_row){
printf("\n|");
for (int j = 1; j<snake_column; j++)
printf(" ");
printf("+");
for (int j = 0; j<43-snake_column; j++)
printf(" ");
printf("|");
}
else
printf("\n| |");
}
}else if (snake_row==fruit_row){
printf(" ___________________________________________");
for (int i = 0; i<19; i++){
if (i==fruit_row){
printf("\n|");
if (fruit_column<snake_column){
for (int j = 1; j<fruit_column; j++)
printf(" ");
printf("*");
for (int j = 1; j<snake_column-fruit_column; j++)
printf(" ");
printf("+");
for (int j = 1; j<42-snake_column; j++)
printf(" ");
printf("|");
}else if (snake_column>fruit_column){
for (int j = 1; j<snake_column; j++)
printf(" ");
printf("+");
for (int j = 1; j<fruit_column-snake_column; j++)
printf(" ");
printf("*");
for (int j = 1; j<42-fruit_column; j++)
printf(" ");
printf("|");
}
else{
fruit = 0;
for(int j = 1; j<snake_column; i++)
printf(" ");
printf("+");
for(int j = 1; j<43-snake_column; i++)
printf(" ");
printf("|");
}
}
else
printf("\n| |");
}
}
printf("\n---------------------------------------------\n");
}
void set_stage(){
if (fruit == 0){
srand(time(0));
int fruit_position = (rand()*rand())%860;
fruit_row = fruit_position/19;
fruit_column = fruit_position%43;
fruit++;
}
draw();
}
void input(){
if (kbhit()){
switch(getch()){
case 'w':
move=1;
break;
case 'a':
move=2;
break;
case 's':
move=3;
break;
case 'd':
move=4;
break;
default:
break;
}
}
}
int main()
{
while (gameover==0){
set_stage();
input();
}
return 0;
}