我用的是vc++6.0,然后代码敲出来后F7显示没有问题,但是运行后发现蛇不会动,但是检查代码后不知道问题出在哪里了。
下面是代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#define WIDE 60 //宽度
#define HIGH 20 //高度
int score = 0; //分数
int kx = 0; //用户按下asdw任意一个按键所得到的坐标值
int ky = 0;
int lastX = 0; //蛇尾的坐标
int lastY = 0;
int sleepSecond;
//个体的对象
struct BODY
{
int X;
int Y;
};
//定义蛇对象
struct SNAKE
{
struct BODY body[WIDE*HIGH];
int size;
}snake; //一个蛇对象
//定义食物对象
struct FOOD
{
int X;
int Y;
}food; //一个食物对象
//声明函数
void initSnake(void);
void initFood(void);
void initUI(void);
void playGame(void);
void initWall(void);
//定义初始化蛇函数
void initSnake(void)
{
snake.size = 2;
snake.body[0].X = WIDE/2; //初始化蛇头
snake.body[0].Y = HIGH/2;
snake.body[1].X = WIDE/2-1; //初始化一节蛇身
snake.body[1].Y = HIGH/2;
}
//定义初始化食物函数
void initFood(void)
{
food.X = rand() % WIDE; //食物坐标0-59 (用的stdlib.h头文件)
food.Y = rand() % HIGH; //食物坐标0-59
return;
}
//初始化界面控件
void initUI(void)
{
COORD coord={0}; //光标移动的位置
//画蛇
for(size_t i = 0; i<snake.size ; i++)
{
coord.X = snake.body[i].X;
coord.Y = snake.body[i].Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
if(i==0)
putchar('@');
else
putchar('*');
}
//去除蛇尾
coord.X = lastX;
coord.Y = lastY;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
//画食物
coord.X = food.X;
coord.Y = food.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
putchar('#');
//让光标的默认位置不干扰游戏
//COORD coord;
coord.X = 0;
coord.Y = HIGH+2;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void showScore()
{
printf("Game Over!!!\n");
printf("成绩为:%d\n\n\n",score);
}
void initWall(void)
{
for(size_t i = 0;i <= HIGH ; i++) //一列中的多行
{
for(size_t j = 0;j <= WIDE ; j++) //一行中的多列
{
if(j == WIDE)
{
printf("|");
}
else if(i == HIGH)
{
printf("_");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
void playGame(void)
{
char key = 'd'; //默认蛇向右移动
//判断蛇撞墙没
while(snake.body[0].X>=0 && snake.body[0].X<WIDE
&& snake.body[0].Y>=0 && snake.body[0].X<HIGH)
{
initWall();
//更新蛇
initUI();
//接受用户按键输入 asdw
if (_kbhit())
{ //为真时,说明用户按下按键
key=_getch();
}
switch (key)
{
case'w':kx=0;ky=-1;break;
case's':kx=0;ky=+1;break;
case'd':kx=+1;ky=0;break;
case'a':kx=-1;ky=0;break;
default:
break;
}
//蛇撞身体:蛇头==任意一节身体
for (size_t i =0;i<snake.size;i++)
{
if(snake.body[0].X==snake.body[i].X
&& snake.body[0].Y==snake.body[i].Y)
{
return; //游戏结束
}
}
//蛇头撞食物
if (snake.body[0].X==food.X && snake.body[0].Y==food.Y)
{
initFood(); //食物消失
snake.size++; //身体增长
score+=10; //加分
sleepSecond-=100; //加速
}
//储存蛇尾坐标
lastX = snake.body[snake.size - 1].X;
lastY = snake.body[snake.size - 1].Y;
//蛇移动,前一节身体给后一节身体赋值
for((size_t) i = snake.size-1;i>0 ;i--)
{
snake.body[i].X=snake.body[i-1].X;
snake.body[i].Y=snake.body[i-1].Y;
}
snake.body[0].X+=kx; //蛇头坐标根据用户按键,修改
snake.body[0].Y+=kx;
Sleep(sleepSecond);
//清屏
system("cls");
}
return;
}
int main(void)
{
_kbhit();
srand(time(NULL)); //播种随机种子(srand用的stdlib.h头文件 time用的math.h头文件)
initSnake(); //初始化蛇
initFood(); //初始化食物
initWall(); //画墙
initUI(); //画蛇和食物
playGame(); //开始游戏
showScore(); //打印分数
system("pause");
return EXIT_SUCCESS;
}
现在是不能运行还是出什么问题了,兄弟
检查下运行时键盘是不是开启了大写锁。我的博客有控制台贪吃蛇的教程,你可以参考。