贪吃蛇纯c编译成功,运行出错,求大神指点
运行就出错 #include "stdafx.h"//dev的话吧这行删掉#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
//方向键的ASCLL值:上72,左75,右77,下80
//背景颜色的代码: 0=黑色1蓝色 2 绿色 3湖蓝色 4红色 5紫色 6黄色 7白色 8灰色 9淡蓝色
//**改变当前光标方块的背景颜色和字体颜色**//
void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台的句柄
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//改变当前光标的背景和字体颜色
}
//**改变光标的位置**//
void gotoxy(int x, int y) {
HANDLE handle;
COORD coord; //获取坐标轴结构体
coord.X = x;
coord.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄,值为-11
SetConsoleCursorPosition(handle, coord); //移动光标到x,y处
}
//**初始化地图数据**//
void restart(int bk, int look, int move) {
//bk为总的地图数据记录整个地图,为1时表示墙体,为2时表示果实,为3时表示蛇
//look记录数据,为0时表示朝向,为1时表示长度,为3时表示胜负情况,为4表示分数
//move记录蛇走过的路程,用来打印蛇时判断用
int pp, qq;//用来记录获取的随机坐标
//接下来要初始化整个地图//
for(int i=0;i<=16;i++)
for (int j = 0; j <= 16; j++) {
if (i == 0 || i == 16 || j == 0 || j == 16)bk = 1;//1表示墙体
else bk = 0; //0表示什么都没有
move = 0; //该数组用来记录蛇移动的轨迹
}
//将蛇初始化在8,8坐标上
bk = 3;
move = 1;//则此时8,8,上的轨迹就应该记录为1
move = 1;//用此来记录步数
pp = rand() % 15 + 1;//范围是1-15
qq = rand() % 15 + 1;
bk = 2;//表示这个位置有果实了
look = 1;//表示朝向,向上
look = 1;//表示长度
look = 0;//当为1是表示失败
look = 0;//记录得分
//接下来要绘制地图//
for(int i=0;i<=16;i++)
for (int j = 0; j <= 16; j++) {
gotoxy(i * 2, j);//光标移动,每个光标都是矩形
switch (bk) {
case 0:
BackGround(0, 0);
break;//如果没有东西打印黑色
case 1:
BackGround(0, 1);
break;//墙打印蓝色
case 2:
BackGround(0, 2);
break;//果实打印绿色
case 3:
BackGround(0, 3);
break;//蛇打印湖蓝色
default:
break;
}
printf("");//地图中直接就是涂空格符
}
//接下来要显示积分//
gotoxy(35, 0);
BackGround(7, 0);//用白字黑底打印
printf("现在得分是:%d,请再接再厉!^_^", look);
}
//**运动主体**//
void map(int bk, int look, int xy, int move) {
//bk是地图信息,look作数据记录,xy记录坐标,move记录蛇的运动轨迹
int b, qq=0, pp=0;//b用来吸收输入,qq和pp用来随机初始化果实坐标
if (kbhit()) {//记录按下的是哪个方向键
b = getch();//用b来记录
if (b == 224)b = getch();//如果为224表示为方向键,但是要再一次获取才行
if (b == 72 && look != 2)
//如果输入的为上并且朝向不为下
look = 1;
if (b == 80 && look != 1)
look = 2;
if (b == 75 && look != 4)
look = 3;
if (b == 77 && look != 3)
look = 4;
}
switch (look) {
case 1:
//往上走
xy--;
break;
case 2:
//往下走
xy++;
break;
case 3:
//往左走
xy--;
break;
case 4:
//往右走
xy++;
break;
}
//接下来蛇就开始走动了//
move++;//蛇的步数加一
move]] = move;//记录当前格子中蛇的轨迹
gotoxy(35, 2);
BackGround(7, 0);
printf("横坐标:%d,纵坐标:%d", xy,xy);
gotoxy(xy * 2, xy);//这里蛇头就往前移动了
BackGround(0, 3);//与蛇体一个颜色
printf("");
//如果吃了果实//
if (bk]] == 2) {
look++;//分数加一
look++;//长度加一
//更新分数
gotoxy(35, 0);
BackGround(7, 0);
printf("现在得分是:%d,请再接再厉!^_^", look);
while (bk != 0) {
pp = rand() % 15 + 1;
qq = rand() % 15 + 1;
}
bk = 2;//将这个地方变为果实
gotoxy(pp * 2, qq);
BackGround(0, 2);
printf("");
}
//如果撞了墙或者自己//
if (bk]] == 1 || bk]] == 3) {
look = 1;//表示已经输了
gotoxy(6, 6);
BackGround(7, 0);
printf("你输了,最后得分:%d", look);
}
bk]] = 3;//使这个位置变成蛇
//接下来要检测蛇然后刷新蛇的位置//
for(int i=0;i<=16;i++)
for (int j = 0; j <= 16; j++) {
if (move == move]] - look){
//如果符合这个条件,则表示蛇已经移动出这个位置了
//要删除这个位置的蛇尾巴
//一次只有一个方块会符合要求吧?
bk = 0;
gotoxy(i * 2, j);
BackGround(0, 0);
printf("");
break;//一次只找一个
}
}
end:;
}
int main() {
int bk, xy, move, look;
xy = xy = 8;
srand((unsigned) time(NULL));//初始化随机种子
system("pause");
restart(bk, look, move);
while (look == 0) {
Sleep(200);//休眠400ms一次
map(bk, look, xy, move);
}
system("pause");
printf("游戏结束,谢谢游玩!^_^");
return 0;
}
采纳我吧 楼主,问题解决了,请结帖!
页:
[1]