为什么我的贪吃蛇,在(0,0)上的那一点,无论是什么符号,都会变成'.'?谢谢!
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>//本来是使用pthread的,但是使用的时候出现了问题,于是发现了windows可以调用线程的时候就用了;这个头文件导致了程序只能在win上跑
char wasd='0',room[10][10],last;
HANDLE hThread;
DWORD threadId;//创建线程的准备条件
struct snakelike{
int x;
int y;
}snake[100];
int snake_long=3,eat=0;//蛇的初始长度
DWORD WINAPI input(LPVOID p){//输入以控制方向
while(1){
wasd=getch();
if(wasd!='w' && wasd!='a' && wasd!='s' &&wasd!='d'){
wasd=last;
continue;
}//检测输入是不是有问题(并没有解决回头自杀的问题XD)
last=wasd;
}
}
void snake_move(){//控制蛇的移动的代码
if((snake[0].x==9 && wasd=='d')||(snake[0].x==0 && wasd=='a')||(snake[0].y==9 && wasd=='s')||(snake[0].y==0 && wasd=='w')){
system("cls");
printf("game over!\n");
system("pause");
exit(0);
}//出界判断
room[snake[snake_long-1].y][snake[snake_long-1].x]='.';//这导致吃下果实并不会立马让身体变长
for(int i=snake_long-1;i>0;i--){
snake[i].x=snake[i-1].x;
snake[i].y=snake[i-1].y;
}
room[snake[0].y][snake[0].x]='*';
switch(wasd){
case 'w':
snake[0].y--;
break;
case 's':
snake[0].y++;
break;
case 'a':
snake[0].x--;
break;
case 'd':
snake[0].x++;
break;
}
if(room[snake[0].y][snake[0].x]=='*'){
system("cls");
printf("game over!\n");
system("pause");
exit(0);
}
if(room[snake[0].y][snake[0].x]=='@'){
snake_long++;
eat=1;
}
room[snake[0].y][snake[0].x]='X';
if(eat){
eat=0;
for(int i=0;i<1000;i++){
int X=rand()%10;
int Y=rand()%10;
if(room[Y][X]=='.'){
room[Y][X]='@';
break;
}
}
}
}
void game(){
int food_x=7,food_y=7;
srand((unsigned)time(NULL));
room[7][7]='@';
while(1){
system("cls");
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
printf(" %c",room[i][j]);//表明现在蛇出于什么情形
printf("\n");
}
Sleep(458);
SuspendThread(hThread);//防止其中输入介入导致的程序问题
snake_move();
ResumeThread(hThread);//恢复输入
}
}
int main(){
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
room[i][j]='.';//初始化
printf("Welcome to Gluttonous Snake\nPlease enter any key among wasd to confirm the direction and start the game\n");
snake[0].x=4,snake[0].y=4;//蛇头初定位
room[snake[0].x][snake[0].y]='X';
while(1){
wasd=getch();
if(!(wasd!='a' && wasd!='s' && wasd!='d' && wasd!='w'))break;
}
switch(wasd){//这是对蛇的形态的初始定义
case 'w':
snake[1].x=4,snake[1].y=5,snake[2].x=4,snake[2].y=6;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
case 's':
snake[1].x=4,snake[1].y=3,snake[2].x=4,snake[2].y=2;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
case 'a':
snake[1].x=5,snake[1].y=4,snake[2].x=6,snake[2].y=4;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
case 'd':
snake[1].x=3,snake[1].y=4,snake[2].x=2,snake[2].y=4;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
}
last=wasd;//用来防止途中输入的不是wasd
hThread = CreateThread(NULL,0,input,0,0,&threadId);//输入线程
game();
}
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>//本来是使用pthread的,但是使用的时候出现了问题,于是发现了windows可以调用线程的时候就用了;这个头文件导致了程序只能在win上跑
char wasd='0',room[10][10],last;
HANDLE hThread;
DWORD threadId;//创建线程的准备条件
struct snakelike{
int x;
int y;
}snake[100];
int snake_long=3,eat=0;//蛇的初始长度
DWORD WINAPI input(LPVOID p){//输入以控制方向
while(1){
wasd=getch();
if(wasd!='w' && wasd!='a' && wasd!='s' &&wasd!='d'){
wasd=last;
continue;
}//检测输入是不是有问题(并没有解决回头自杀的问题XD)
last=wasd;
}
}
void snake_move(){//控制蛇的移动的代码
if((snake[0].x==9 && wasd=='d')||(snake[0].x==0 && wasd=='a')||(snake[0].y==9 && wasd=='s')||(snake[0].y==0 && wasd=='w')){
system("cls");
printf("game over!\n");
system("pause");
exit(0);
}//出界判断
room[snake[snake_long-1].y][snake[snake_long-1].x]='.';//这导致吃下果实并不会立马让身体变长
for(int i=snake_long-1;i>0;i--){
snake[i].x=snake[i-1].x;
snake[i].y=snake[i-1].y;
}
room[snake[0].y][snake[0].x]='*';
switch(wasd){
case 'w':
snake[0].y--;
break;
case 's':
snake[0].y++;
break;
case 'a':
snake[0].x--;
break;
case 'd':
snake[0].x++;
break;
}
if(room[snake[0].y][snake[0].x]=='*'){
system("cls");
printf("game over!\n");
system("pause");
exit(0);
}
if(room[snake[0].y][snake[0].x]=='@'){
snake_long++;
eat=1;
}
room[snake[0].y][snake[0].x]='X';
if(eat){
eat=0;
for(int i=0;i<1000;i++){
int X=rand()%10;
int Y=rand()%10;
if(room[Y][X]=='.'){
room[Y][X]='@';
break;
}
}
}
}
void game(){
int food_x=7,food_y=7;
srand((unsigned)time(NULL));
room[7][7]='@';
while(1){
system("cls");
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
printf(" %c",room[i][j]);//表明现在蛇出于什么情形
printf("\n");
}
Sleep(458);
SuspendThread(hThread);//防止其中输入介入导致的程序问题
snake_move();
ResumeThread(hThread);//恢复输入
}
}
int main(){
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
room[i][j]='.';//初始化
printf("Welcome to Gluttonous Snake\nPlease enter any key among wasd to confirm the direction and start the game\n");
snake[0].x=4,snake[0].y=4;//蛇头初定位
room[snake[0].x][snake[0].y]='X';
while(1){
wasd=getch();
if(!(wasd!='a' && wasd!='s' && wasd!='d' && wasd!='w'))break;
}
switch(wasd){//这是对蛇的形态的初始定义
case 'w':
snake[1].x=4,snake[1].y=5,snake[2].x=4,snake[2].y=6;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
case 's':
snake[1].x=4,snake[1].y=3,snake[2].x=4,snake[2].y=2;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
case 'a':
snake[1].x=5,snake[1].y=4,snake[2].x=6,snake[2].y=4;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
case 'd':
snake[1].x=3,snake[1].y=4,snake[2].x=2,snake[2].y=4;
room[snake[1].y][snake[1].x]='*',room[snake[2].y][snake[2].x]='*';
break;
}
last=wasd;//用来防止途中输入的不是wasd
hThread = CreateThread(NULL,0,input,0,0,&threadId);//输入线程
game();
}