小白c++写的贪吃蛇,在别人电脑编译没事但运行出错,求帮忙,该如何解决
小白c++写的贪吃蛇,在别人电脑编译没事但运行出错,求帮忙
如题,我昨天用c++写的贪吃蛇,在我自己电脑上用codeblocks编译运行一点事没有,编译不出错,运行妥妥的。但是.cpp发给我同学后,在他们codeblocks上编译不报错,但是运行就不行,求解释。试了好几个人都一样,我们codeblocks版本都一样13.12的。完全摸不着头脑。
先附上报错图:

附上代码:
最后恳求大神指点迷津,给我讲解下哪里出错了
------解决思路----------------------
路过瞥一眼只见……
没初始化。
如题,我昨天用c++写的贪吃蛇,在我自己电脑上用codeblocks编译运行一点事没有,编译不出错,运行妥妥的。但是.cpp发给我同学后,在他们codeblocks上编译不报错,但是运行就不行,求解释。试了好几个人都一样,我们codeblocks版本都一样13.12的。完全摸不着头脑。
先附上报错图:
附上代码:
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include<time.h>
using namespace std;
int s_score,sec;
int food_x,food_y,eaten;//食物x,y坐标,eaten表示食物是否被吃了
const int s_up=1,s_down=2,s_left=3,s_right=4;
int op;
int game_speed=500;
int sx[400]={},sy[400]={};//用于储存蛇的每一点坐标
int b[20][20]={};//存储蛇的状态,0表示" "(这里是两个空字符),1表示蛇身"实心圆",2表示食物"空心三角形",3表示砖块"实心正方形"(即边界);PS:发帖的时候被系统告知不能包含那些实心圆那些特殊符号,所以用文字替代了= =
//隐藏光标函数
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//gotoxy()函数的定义
void gotoxy(int x, int y)
{
int xx=0x0b;
HANDLE hOutput;
COORD loc;
loc.X=x;
loc.Y=y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, loc);
return;
}
class Snake
{
private:
int head_x,head_y,tail_x,tail_y;
int dir;//移动方向
int len;//蛇长
int s_prex,s_prey;//前一个蛇尾的x,y坐标;
int s_latx,s_laty;//后一个蛇头的x,y坐标
public:
Snake()
{
head_x=9;head_y=9;//注意,此处的x,y轴是根据数组来定义的,x轴垂直向下为正方向,y轴水平向右为正方向.
tail_x=9;tail_y=9;
b[head_x][head_y]=1;
b[tail_x][tail_y]=1;
dir=s_up;
len=0;
sx[len]=head_x;//储存蛇每一点的坐标
sy[len]=head_y;
s_prex=tail_x;
s_prey=tail_y;
};
//绘制地图
void map_create()
{
//绘制边界.
for(int i=0,j=0;j<=19;j++)
{
b[i][j]=3;
}
for(int i=19,j=0;j<=19;j++)
{
b[i][j]=3;
}
for(int j=0,i=0;i<=19;i++)
{
b[i][j]=3;
}
for(int j=19,i=0;i<=19;i++)
{
b[i][j]=3;
}
}
//寻找函数,用于判断下一格是否是蛇身的点或者边界
int s_search(int dir)//返回s_exit值,取值为0,1
{
int s_exit=0;//用于判断游戏是否退出的标准,0不退出,1退出
switch(dir)
{
case s_up:
if(head_x-1==0)s_exit=1;
else
for(int i=0;i<=len;i++)
{
if(head_x-1==sx[i]&&head_y==sy[i])s_exit=1;
};break;
case s_down:
if(head_x+1==19)s_exit=1;
else
for(int i=0;i<=len;i++)
{
if(head_x+1==sx[i]&&head_y==sy[i])s_exit=1;
};break;
case s_left:
if(head_y-1==0)s_exit=1;
else
for(int i=0;i<=len;i++)
{
if(head_x==sx[i]&&head_y-1==sy[i])s_exit=1;
};break;
case s_right:
if(head_y+1==19)s_exit=1;
else
for(int i=0;i<=len;i++)
{
if(head_x==sx[i]&&head_y+1==sy[i])s_exit=1;
};break;
default:exit(0);break;
}
return s_exit;
}
//显示边界
void map_show()
{
for(int i=0;i<=19;i++)
{
for(int j=0;j<=19;j++)
{
switch(b[i][j])
{
case 0:cout<<" ";break;
case 1:cout<<"实心圆";break;
case 2:cout<<"空心三角行";break;
case 3:cout<<"实心正方形";break;
default:cout<<"error";
}
if(j==19)cout<<"\n";
}
}
}
//显示蛇,每一次move后,前一个蛇尾和下一格蛇头都被被用来判断,用于描点,其他格子不扫描不判断
void snake_show()
{
gotoxy(2*food_y,food_x);cout<<"空心三角";
if(b[s_prex][s_prey]==0){gotoxy(2*s_prey,s_prex);cout<<" ";}
if(b[s_latx][s_laty]==1){gotoxy(2*s_laty,s_latx);cout<<"实心圆";}
}
//随机产生食物
void food()
{
while(1)
{
food_x=rand()%19;//这里rand产生的随机数为1到18,不会出现在边界上
food_y=rand()%19;
if(b[food_x][food_y]==0){b[food_x][food_y]=2;break;}//当食物坐标所对应的蛇数组表示不为1时,表明此方格可以产生食物.
}
}
//蛇根据当前方向进行移动,判断方向后的变化会存在b数组里面.
int snake_move()
{
s_prex=tail_x;
s_prey=tail_y;
eaten=0;//用eaten记录是否食物;
switch(dir)
{
case s_up://up
if(head_x-1==food_x&&head_y==food_y)//如果食物坐标与蛇下一格子冲突,便eat.
{
head_x=head_x-1;
b[head_x][head_y]=1;//有食物的时候蛇头部加1个
len++;
sx[len]=head_x;
sy[len]=head_y;
eaten=1;
}
else
{
head_x=head_x-1; //蛇信息变化
b[head_x][head_y]=1;
b[tail_x][tail_y]=0;
//重写蛇每一点的坐标
for(int i=0;i<=len;i++)
{
sx[i]=sx[i+1];
sy[i]=sy[i+1];
}
sx[len]=head_x;
sy[len]=head_y;
tail_x=sx[0];
tail_y=sy[0];
}
break;//没食物的时候蛇的头部向上,尾巴少一个,在代码最开始定义了up=1,down=2,right=3,left=4;
case s_down://down
if(head_x+1==food_x&&head_y==food_y)//如果食物坐标与蛇下一格子冲突,便eat.
{
head_x=head_x+1;
b[head_x][head_y]=1;//有食物的时候蛇头部加1个
len++;
sx[len]=head_x;
sy[len]=head_y;
eaten=1;
}
else
{
head_x=head_x+1; //蛇信息变化
b[head_x][head_y]=1;
b[tail_x][tail_y]=0;
//重写蛇每一点的坐标
for(int i=0;i<=len;i++)
{
sx[i]=sx[i+1];
sy[i]=sy[i+1];
}
sx[len]=head_x;
sy[len]=head_y;
tail_x=sx[0];
tail_y=sy[0];
}
break;
case s_left://left
if(head_x==food_x&&head_y-1==food_y)//如果食物坐标与蛇下一格子冲突,便eat.
{
head_y=head_y-1;
b[head_x][head_y]=1;//有食物的时候蛇头部加1个
len++;
sx[len]=head_x;
sy[len]=head_y;
eaten=1;
}
else
{
head_y=head_y-1; //蛇信息变化
b[head_x][head_y]=1;
b[tail_x][tail_y]=0;
//重写蛇每一点的坐标
for(int i=0;i<=len;i++)
{
sx[i]=sx[i+1];
sy[i]=sy[i+1];
}
sx[len]=head_x;
sy[len]=head_y;
tail_x=sx[0];
tail_y=sy[0];
}
break;
case s_right://right
if(head_x==food_x&&head_y+1==food_y)//如果食物坐标与蛇下一格子冲突,便eat.
{
head_y=head_y+1;
b[head_x][head_y]=1;//有食物的时候蛇头部加1个
len++;
sx[len]=head_x;
sy[len]=head_y;
eaten=1;
}
else
{
head_y=head_y+1; //蛇信息变化
b[head_x][head_y]=1;
b[tail_x][tail_y]=0;
//重写蛇每一点的坐标
for(int i=0;i<=len;i++)
{
sx[i]=sx[i+1];
sy[i]=sy[i+1];
}
sx[len]=head_x;
sy[len]=head_y;
tail_x=sx[0];
tail_y=sy[0];
}
break;
default:exit(0);
}
s_latx=head_x;
s_laty=head_y;
return eaten;
}
//记录游戏得分
int getscore()
{
return len;
}
//主体,游戏入口
void snake_game()
{
food();
while(1)
{
snake_show();
Sleep(game_speed);//此处里面的参数单位为毫秒,可以通过调整参数达到控制游戏速度的效果
if(kbhit())//kbhit()用于判断是否有键盘输入
{
switch(getch())
{
case 'w':if(dir!=s_down)dir=s_up;break;
case 's':if(dir!=s_up)dir=s_down;break;
case 'a':if(dir!=s_right)dir=s_left;break;
case 'd':if(dir!=s_left)dir=s_right;break;
default:break;
}
}
if(s_search(dir)==1){s_score=getscore();system("cls");cout<<"\n\n\n\n\n\n\n 游戏结束了!你的得分:"<<s_score<<" points\n\n\n\n\n\n";system("pause");exit(0);}//gameover则下面语句不执行,并推出游戏
if(snake_move()==1)food();
}
}
};
void meun()
{
int k=0;
int op=4;
while(1)
{
system("cls");
cout<<"\n\n\n\n *****************************\n";
cout<<"\n\n\n\n 1.进入游戏\n";
cout<<"\n\n\n\n 2.调节速度\n";
cout<<"\n\n\n\n 3.退出\n";
cout<<"\n\n\n\n *****************************\n\n请选择: ";
cin>>op;
switch(op)
{
case 1:system("cls");break;
case 2:
system("cls");
cout<<"\n\n\n 请输入每一步的间隔,只能为整数\n\n\n Second = ";
cin>>sec;
game_speed=sec*100;
op=4;
break;
case 3:
system("cls");cout<<"\n\n\n 哦。\n\n\n";exit(0);break;
default:
k=3;op=4;break;
}
if(op==1)break;
if(k==3){system("cls");cout<<"\n\n\n 你智商让doge吃了?选项只能输入1、2、3,看不懂?坑比!\n\n\n\n\n";exit(0);}
}
}
int main()
{
HideCursor();
meun();
Snake A;
A.map_create();
A.map_show();
A.snake_game();
return 0;
}
最后恳求大神指点迷津,给我讲解下哪里出错了
------解决思路----------------------
路过瞥一眼只见……
没初始化。