您的位置:首页 > 编程语言

无法执行的贪吃蛇游戏代码,求大神帮忙改动!

2016-01-12 19:24 435 查看
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>                                 //使用当前时间做种子
enum dir {up,down,left,right};                    //枚举类型enum dir //围墙
class Fence
{
public:
void initFence();
void OutputF();
public:
char game[20][20];
} f;                                               //定义对象  //画框框
void Fence::lnitFence()
{
for (int i=0; i<20; i++)
for (int j=0; j<20; j++)
{
if (i==0||i==19||j==0||j==19)
game[i][j]='*';
else
game[i][j]=' ';
}
}                                                   //显示框框
void Fence::OutputF()
{
for (int i=0; i<20; i++)
{
for (int j=0; j<20; j++)
cout<<game[i][j]<<'';
cout<<endl;
}
}                                                    //蛇结点
class SnakeNode
{
private:
int x,y;
SnakeNode *prior,*next;
public:
void add_head(int x,int y)
int get_x();
int get_y();
void delete_tail();
}
*head=NULL,*tail=NULL;                                 //插入头结点
void SnakeNode::add_head(int x,int y)
{
SnakeNode *q=new SnakeNode;
q->x=x;
q->y=y;
q->next=head;
q->prior=NULL;
if (head)
head->prior=q;
head=q;
if (!tail)
tail=head;
f.game[x][y]='*';                                   //f对象能够在定义Fence类时定义。且Fnce类在SnakeNode类前定义
}
int SnkeNode::get_x()
{
return x;
}
int SnakeNode::get_y()
{
return y;
}                                                        //删除尾结点
void SnakeNode::delete_tail()
{
SnakeNode *p=tail;
f.game[tail->get_x()][tail->get_y()]=' ';            //把尾结点的坐标表示的'*'置为空格;
if (tail==head)
tail=head=NULL;
else
{
tail=tail->prior;
tail=next=NULL;
}
delete p;
}
class move
{
public:
dir point;                                            //枚举变量point:控制方向
int food_x;
int food_y;
public:
void moving();
void change_point(char);                               //改变方向;
void get_food();
};
void move::moving()
{
int a,b;
a=head->get_x();                                        //取得头结点横坐标
b=head->get_y();                                        //取得头结点纵坐标
switch (point)
{
case up:
--a;
break;
case down:
++a;
break;
case left:
--b;
break;
case right:
++b;
break;
}
if (a==19||b==19||a==0||b==0||game[a][b]='*')             //推断是否撞墙
{
cout<<"gameover!!!"<<endl;
exit(0);
}
if (a==food_x&&b==food_y)                                 //吃food
{
head->add_head(a,b);
get_food;
}
else
{
head->add_head(a,b);                                   //插入头结点
head->delete_tail();                                   //删除尾结点
}
void move::change_point(char keydown)
{
switch (keydown)
{
case 'w':
point=up;
break;
case 's':
point=down;
break;
case 'a':
point=left;
break;
case 'd':
point=right;
break;
}
}
void move::get_food()
{
srand((unsigned int) time(NULL));                       //做种子(程序执行时间)
food_x=rand()%18+1;
food-y=rand()%18+1;
f.game[food_x][food_y]='*';
}
}
int main()
{
cout<<"Using 'w,a,s,d'to control direction!!!\n\n\n";     //画框框和小蛇;
move m;
f.lnitFence();
head->add_head(4,3);
head->add_head(4,4);
head->add_head(4,5);
m.get_food();
f.OutputF();
while (ture)
{
char keydown =getch();                                  //getch()返回
m.chan
ge_point(keydown);
while (!kbhit())                                        //推断有没有按键落下
{
system("cls");                                       //清屏函数;
m.moving();
f.OutputF();
sleep(200);
}
}
return 0;
}


错误显示:





这是我在网上看到的。照着原图花了半个多小时敲出来的代码,可问题还是一大堆。网上的东西果然不可信啊 这里面好像大部分都是C语言,求有空的大神帮我改动成C++,找出错误并改正,谢谢啦;新手上路,请多多关照。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: