跪求c++贪吃蛇源代码!!!高手救命啊!!!可以用的话追加5分。复制别人的不要来了,我搜过好多不可以用

不要装饰,不要绘图,要像一个新手编的。愿意写实验报告继续追加!!!!!分可以商量。我还有55分全给!921551657@qq.com... 不要装饰,不要绘图,要像一个新手编的。愿意写实验报告继续追加!!!!!分可以商量。我还有55分全给!921551657@qq.com 展开
 我来答
南柯一梦之小
2011-09-03 · TA获得超过430个赞
知道小有建树答主
回答量:458
采纳率:0%
帮助的人:326万
展开全部
/*贪吃蛇游戏代码*/
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#define MAX_JOINTS 200
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define MV_RIGHT 1
#define MV_LEFT 2
#define MV_UP 3
#define MV_DOWN 4
void InitGraph(void) ; /*图形驱动初始化函数*/
void DrawFence(void); /*绘制游戏场景*/
void GameOver(int score); /*结束游戏*/
void GamePlay(void); /*玩游戏具体过程*/
void PrScore(int score); /*输出成绩*/
struct Food /*食物的结构体定义*/
{
int x; /*食物的横坐标*/
int y; /*食物的纵坐标*/
int addFood; /*判断是否要出现食物的变量*/
};
struct Snake /*蛇的结构体定义*/
{
int x[MAX_JOINTS]; /*保存蛇身第一节位于屏幕上的列坐标*/
int y[MAX_JOINTS]; /*保存蛇身第一节位于屏幕上的行坐标*/
int joint; /*蛇的节数*/
int direction; /*蛇移动方向*/
int life; /*蛇的生命,0活着,1死亡*/
};
/*主函数*/
main()
{
IntGraph(); /*图形驱动*/
DrawFence(); /*游戏场景*/
GamePlay(); /*玩游戏具体过程*/
closegraph(); /*图形结束*/
}
/*图形驱动初始化函数*/
void InitGraph(void)
{
int gd = DETECT, gm;
initgraph(&gd, &gm, "");
cleardeviece();
setbkcolor(BLUE);
cleardeviece();
setcolor(WHITE);
settextstyle(DEFAULT_FONT,HORIZ_DIR,3);
outtextxy(170,150,"Greedy Snake");
outtextxy(219,254,"ready");
setcolor(BLUE);
cleardevice();
}
/*游戏开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void Drawfence(void)
{
int i;
setbkcolor(LIGHTGREEN);
setcolor(11);
setlinrstyle(SOLID_LINE,0,THICK_WIDTH);
/*画围墙*/
for (i=50;i<=600;i+=10)
{
rectangle(i,40,i+10,49); /*上边*/
rectangle(i,451,i+10,460); /*下边*/
}
for (i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左边*/
rectangle(601,i,610,i+10); /*右边*/
}
}
/*控制贪吃蛇吃食物*/
void Gameplay(void)
{
int i,key;
int gamespeed=22000; /*控制游戏速度*/
int score=0; /*记录游戏得分*/
struct Food food; /*食物结构体变量*/
struct Snake snake; /*蛇结构体变量*/
food.addFood=1; /*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0; /*置蛇的生命状态为活着*/
snake.direction=MV_RIGHT; /*置蛇头方向为向右*/
snake.x[0]=100;snake.y[0]=100; /*置蛇头初始位置*/
snake.x[1]=110;snake.y[1]=100;
snake.joint=2; /*置蛇的初始节数为2*/
Prscore(score);
/*重复玩游戏,直到按Esc键结束*/
srand(time(NULL));
while(1)
{
while(!kbhit())
{ if(food.addfood==1)
{
food.x=rand()%400+60;
food.y=rand()%350+60;
/*食物出现后必须在整格内才能让蛇吃到*/
while(food.x%10!=0)
{
food.x++;
}
while(food.y%10!=0)
{
food.y++;
}
food.addFood==0; /*画面上有食物*/
}
if(food.addFood==0) /*画面上有食物,则显示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.x-10);
}
for(i=snake.joint-1;i>0;i--) /*蛇的每个节向前移动*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示左,右,上,下四个方向,来决定蛇头的移动*/
switch(snake.direction)
{
case MV_RIGHT:snake.x[0]+=10;break;
case MV_LEFT:snake.x[0]-=10;break;
case MV_UP:snake.y[0]-=10;break;
case MV_DOWN:snake.y[0]+=10;break;
}
/*从蛇的第四节开始判断是否撞到自己,因为蛇头为两节,第三节不可能拐过来*/
for(i=3;i<snake.joint;i++)
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver(score); /*显示失败*/
snake.life=1; /*蛇死亡*/
break;
}
}
/*判断蛇是否撞到墙壁*/
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)
{
GameOver(score); /*本次游戏结束*/
snake.life=1; /*蛇死亡*/
break;
}
/*以上两种判断后,如果蛇死就跳出内循环,重新开始*/
if(snake.life==1) break;
if(snake.x[0]==food.x&&snake.y[0]==food.y) /*吃到食物后*/
{
/*把画面上的食物清除*/
setcolor(o);
rectangle(food.x,food.y,food.x+10,food.y-10);
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.joint++; /*蛇的身体长一节*/
food.addFood=1; /*画面上出现新食物*/
score+=10;
Prscore(score); /*输出新得分*/
}
/*画蛇*/
setcolor(4);
for(i=0;i<snake.joint;i++)
(
rectangle(snake.x[i],snake.y[i],
snake.x[i]+10,snake.y[i]-10);
}
delay(gamespeed); /*延迟控制蛇的速度*/
/*去除蛇的最后一节*/
setcolor(0);
rectangle(snake.x[snake.joint-1],snake.y[joint-1],
snake.x[snake.joint-1]+10,snake.y[snake.joint-1]+10);
} /*end of while(!kbhit)*/
if(snake.life==1)break; /*如果蛇死,则跳出循环*/
key=bioskey(); /*按接收键*/
/*判断按键,是否向相反方向移动,按Esc键则退出*/
if(key==Esc)break;
else if(key==UP&&snake.dierction!=4)
snake.direction=MV_UP;
else if(key==RIGHT&&snake.direction!=MV_LEFT)
snake.direction=MV_RIGHT;
else if(key==LEFT&&snake.direction!=MV_RIGHT)
snake.direction=MV_LEFT;
else if(key==DOWN&&snake.direction!=MV_UP)
snake.direction==MV_DOWN;
} /*end of while(1)*/
}/*结束游戏*/
void GameOver(int score)
{
cleardeviece();
Prscore(score);
setcolor(RED);
settextxy(0,0,4);
outtextxy(200,200,"GAMEOVER");
getch()
}
/*输出成绩*/
void Prscore(int score)
{
char str[10];
setfillstyle(SOILD_FILL,YELLON);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
zhangfeng2316
2011-09-03 · TA获得超过176个赞
知道答主
回答量:182
采纳率:0%
帮助的人:103万
展开全部
#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;
int gamespeed=32000;
struct Food /*食物的结构体*/
{
int x; /*食物的横坐标*/
int y; /*食物的纵坐标*/
int yes; /*食物是否出现的变量*/
}food;
struct Snack /*蛇的结构体*/
{
int x[N];
int y[N];
int node; /*蛇的节数*/
int direction; /*蛇的方向*/
int life; /*蛇的生命,0活着,1死亡*/
}snake;
void Init(void); /*图形驱动*/
void Close(void); /*关闭游戏函数*/
void DrawK(void); /*画图函数*/
void GameOver(void);/*输出失败函数*/
void GamePlay(); /*游戏控制函数 主要程序*/
void PrScore(void); /*分数输出函数*/

DELAY(char ch)/*调节游戏速度*/
{
if(ch=='3')
{
delay(gamespeed); /*delay是延迟函数*/
delay(gamespeed);
}
else if(ch=='2')
{
delay(gamespeed);
}
}

Menu()/*游戏开始菜单*/
{
char ch;
printf("Please choose the gamespeed:\n");
printf("1-Fast 2-Normal 3-Slow\n");
printf("\nPlease Press The numbers..\n");
do
{ch=getch();}
while(ch!='1'&&ch!='2'&&ch!='3');
clrscr();
return(ch);
}

/*主函数*/
void main(void)
{
int ch;
ch=Menu();
Init();
DrawK();
GamePlay(ch);
Close();
}

void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}

void DrawK(void)
{
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
for(i=50;i<=600;i+=10)
{
rectangle(i,40,i+10,49); /*画出上边框*/
rectangle(i,451,i+10,460); /*画出下边框*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*画出左边框*/
rectangle(601,i,610,i+10); /*画出右边框*/
}
}

void GamePlay(char ch)
{
randomize(); /*随机数发生器*/
food.yes=1; /*1代表要出现食物,0表示以存在食物*/
snake.life=0;
snake.direction=1;
snake.x[0]=100;snake.y[0]=100;
snake.x[1]=110;snake.y[1]=100;
snake.node=2;
PrScore();
while(1) /*可以重复游戏*/
{
while(!kbhit()) /*在没有按键的情况下蛇自己移动*/
{
if(food.yes==1) /*需要食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60; /*使用rand函数随机产生食物坐标*/
while(food.x%10!=0)
food.x++;
while(food.y%10!=0)
food.y++; /*判断食物是否出现在整格里*/
food.yes=0; /*现在有食物了*/
}
if(food.yes==0) /*有食物了就要显示出来*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--) /*贪吃蛇的移动算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1]; /*贪吃蛇的身体移动算法*/
}

switch(snake.direction) /*贪吃蛇的头部移动算法,以此来控制移动*/
{
case 1:snake.x[0]+=10;break;
case 2:snake.x[0]-=10;break;
case 3:snake.y[0]-=10;break;
case 4:snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++) /*判断是否头部与身体相撞*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();
snake.life=1;
break;
}
}
/*下面是判断是否撞到墙壁*/
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)
{
GameOver();
snake.life=1;
}
if(snake.life==1) /*如果死亡就退出循环*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y) /*判断蛇是否吃到食物*/
{
setcolor(0);
rectangle(food.x,food.y,food.x+10,food.y-10); /*吃的食物后用黑色将食物擦去*/
snake.x[snake.node]=-20;snake.y[snake.node]=-20; /*现把增加的一节放到看不到的地方去*/

snake.node++;
food.yes=1;
score+=10;
PrScore();
}
setcolor(4); /*每次移动后将后面的身体擦去*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
delay(gamespeed);
DELAY(ch);
setcolor(0);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

}
if(snake.life==1)
break;
key=bioskey(0); /*接受按键*/
if(key==ESC)
break;
else
if(key==UP&&snake.direction!=4)/*判断是否改变方向*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}
}

void GameOver(void)
{
cleardevice();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}

void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"scord:%d",score);
outtextxy(55,20,str);
}
void Close(void)
{
getch();
closegraph();
}
追问
大哥你有邮箱吗?能不能帮我填一下实验报告?我把剩下的50分都给你,我邮箱921551657@qq.com
追答
1154942064@qq.com
你把报告发来我看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
啦急抱抱熊1234
2011-09-03 · TA获得超过6.2万个赞
知道大有可为答主
回答量:4.1万
采纳率:0%
帮助的人:5446万
展开全部
啦啦啦啦,一楼的真厉害!赞一个先~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
颛孙力勤
2011-09-05 · TA获得超过254个赞
知道答主
回答量:242
采纳率:0%
帮助的人:150万
展开全部
我发到你的邮箱了,注意查收(收件箱或垃圾箱)
追问
我查收过邮箱包括垃圾箱确实没找到,能再发一次吗谢谢了,还有库函数过来,能运行才行
921551657@qq.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
asdwx8465
2011-09-03
知道答主
回答量:6
采纳率:0%
帮助的人:1万
展开全部
weq3er4wr3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式