问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求贪吃蛇Pascal源程序

发布网友 发布时间:2023-10-31 01:29

我来回答

1个回答

热心网友 时间:2024-11-22 23:54

值得注意的是,要将EGAVGA.BGI文件拷到和这个源程序同一个目录下才能正常显示。
EGAVGA.BGI在C语言软件的安装目录下,你可以在该文件夹搜索找到!
#include "stdio.h"
#include "graphics.h"
#include "stdlib.h"
#include "dos.h"
#define N 200
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define Esc 0x011b
int i,key;
int score=0;
int gamespeed=50000;
struct Food
{
int x;
int y;
int yes;
}food;
struct Snake
{
int x[N];
int y[N];
int node;
int direction;
int life;
}snake;
void Init();
void DrawK();
void GamePlay();
void GameOver();
void PrScore();
void Close();
void main()
{
Init();/*图形界面驱动*/
DrawK();/*作围墙*/
GamePlay();
Close();

}

/*图形界面驱动模块*/
void Init()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
}

/*作矩形围墙*/
void DrawK()
{
setcolor(11);
setlinestyle(0,0,3);
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);
}
getch();
}
void GamePlay()
{
randomize();

/*初始状态*/
food.yes=1;
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;

/*将食物出现位置控制在整格*/
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[0]==snake.y[i])
{
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);
/*去除最后一节*/
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);
}/*end while(!kbhit())*/

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;
}/*endwhile(1)*/
}

//游戏结束
void GameOver()
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*打印分数*/
void PrScore()
{
char str[10];
setfillstyle(1,14);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*图形结束*/
void Close()
{
getch();
closegraph();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 为什么中国武术里没有像跆拳道那样的腿法呢? 转支付宝对方账户没用了,钱能退回来吗? 用pascal编的游戏有什么?20 我的天龙360康机国四的4年了,动力不足油嘴没事,增压新的,还是费油,求... PASCAL源程序 跪求1 给几个Pascal的小游戏9 小松360挖掘机增压器底座有油是怎么回事 华少,莎莎的藏头诗。希望有文采的人可以给予帮助。在线等待。1 氯碱厂能干一辈子吗 4dpsk中绝对码0111001001怎么计算得到相对码?求...28 我2005年就获得的房地产经纪人协理证没有注册,已经过期,听人说可以上... 通信原理中绝对码和相对码是干什么的?为什么要引进这两个概念?10 通信原理中设绝对码全1111 1111,0000 0000,...3 身边的朋友,王者荣耀实名认证,人脸识别都出来了,我就没有 中国武术为何没有像跆拳道那样的腿法表演呢? 在山西农业大学生活多少生活费合适 用工行网银卡给支付宝充值5000元,为什么提示超限 请问大家一般都是在哪些网站购买鲜花的?3 微信6.1.5的旧版本为什么下载不了1 用工行网银卡给支付宝充值5000元,为什么提示超限 Pascal游戏代码一般有多长? pascal语言可以编写小游戏吗3 小木棍 Pascal源程序+题解7 wxid开头的怎么添加好友? 机筛强磁怎么拆 月港有没有申遗成功 中国武术那么多门派为什么没有像跆拳道那样以腿为主的武术呢? 世界非物质文化遗产研究院真实吗 哪个姓氏学霸最少啊 急求运动员姓氏,学霸们,加油吧! 在哪个网上买东西是真的,淘宝网还是京东商城还是其它网站,请指...8 在网上买东西,京东和天猫哪个好,淘宝卖的基本都是假货,我应该...18 QQ钱包实名制认证是什么意思啊,如果QQ被盗,认证的身份证号等信息会... 机体杀伤和清除异常突变细胞的功能是 ...是印度的 有很多大象和很多动物 不知道叫什么电影 关于团员自我鉴定400字 中国武术有很多门派为什么没有像跆拳道那样以腿法为主以旋转踢法为主... 永康市忠通工贸有限公司怎么样? 怎样在网上追一个自己喜欢的女生323 中国黄金足金999是什么意思,为什么上面不是千足金,是纯黄金吗,和标志千...