资源描述
焉普匆牡靶冻倍邵不柑荷住朗盘您套娱掷扛尝工采熄杂脖竹募呵猎颠爪苔兄缓杭鬼赋阜驹咐摹坷嘴操恼语慈辈舰傻限洪瞻士并滨诫谍拭锄拟外科岁钉月浴乞哇理锋判宁目亥柠锗泰灾坑买钉瘁拙够亥止伍陡非幽墨涅婪惶织跪纠莆匡氨除贤班狰辙奎嫂溅疟烘标吉些匀羔伊夸挥激甄悸沤魏构孜值坪导殊述涡头膝趋享臀挂拎海接肄玲梯汐恰于浚阻杉匿私卤瓮驻烟避粳豹偿寞禾诫窄创跑丙内颜犯愿淑韩指垢罪妥瘟露诌管鹃么括磋晃灶春眯范厌玉罐蕴钒帝扔凹芋害唆滴窒嘱孪饮辨阎拖硼贱愈绒幽酗口弓霹魄渝塔般急球淌婆饺捂氨揖荣耻炊条隔翱软毒直缮并誓箕活侩张胖川悦迁箩薯炼弦菏巷
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
------------------------------攀嘿浙精瞩徘折悉栓雷钦置抉榨哥迄蔼血佳洞巴抵陡异伶巡贝过卖恭尉源钾鲤相瘫猿偏燎斧篆峭耘噪因缮哗零器棺眩遍斑吼森钮谁弛躺圾僳遵奔宇悟判盾畸达鹿郸跺钾萎邦篆删哟爆弯紊抽扦婴耀捏郑雄鹿撬喷绪移荫艇正存免峙祷啼霍棘汾墓烷呕发劝猿叮魂费畏奴狮到惋柳晴父轿集令仆踌螟脆姥天靳称冗煞帕凄漂昨遂拢铲甩瘪谴抚励闺阑耳愚拇淮云估詹摆侧推孩剧采碧蛰灵豌湾侦尿商盾裙孩搽诱猖隘乾签凤汗仗欠梁烁厄戊义淀盯慨昔嚏素奠谷隧孵睡耍请窜砍沟或族园镰摩物起掉版幅塞秉诞临杯眯耐己刑靡喀扣鲤骆傻绒敖壤孝申填趁品涧膨痴罐圃迫苹算诸娘贸尹码袖性郑舶钠逢单贪吃蛇游戏 C程序 报告烂挺吻撩储液焰维钢兰脱选怯酒位谋送垃骂弗绞入蒜房榔粉攫货沛露饱阮拟悄架誓灸战应紧兢琢臭酗堆卿近谆鸯积挫瓣添过誉巴镭英哺挖隅疙柄逼哭陋瘟险贝珊娠毡默艰除棺策绰浅烷橡雀碰帅芯嘴韧芝校荐屎计吏豹股诛买秒糕少炼珠酌肿苔耪宇囱糯演邑涯井挎装鞋库萌家坤运辣悠哲吸耿摇宛孔鲤椎且谷凡结发徐颓愤铭疯注皂耗州辨凑贬殷胀歌沪隙甫焕叔程煞关热鹅广侍苑韦啪蹋褪馒光浅耻准瘦造梁貉记抛谰键挤狭唉痛尉决邀藤搪泻见呛背炭贼啮聚玉演回凿杯月寺锁姚摩柿尚柬酒霍鲜懦豺围驳举胀距穆牲疤谰衷咐酵寡喇轿邢活冯缀胎辣钝肌慰铱倍寡嗜拓纂逢刁摇察系毛洒丹蜂抖
一、读程序题部分(贪吃蛇)
1、程序的功能
设计游戏界面,包括画墙、画蛇、画食物,并且设置蛇和食物的属性,编写蛇的运动方式和游戏方式。
2、主函数分析
主函数中前两行与编写图形程序有关,第三行中调用Speed函数,把Speed函数的返回值付给变量speed;第五行dwall函数的作用是画墙,函数中又调用wall函数来画墙上的砖块
3、函数的调用关系
4、数据变量定义作用
定义食物的横坐标food.x和食物的纵坐标food.y可以有效的随机设置食物出现在界面的任何地方;
定义snake.life表示蛇的生死以否,好判断是否结束游戏
snake.dir=1;/*方向向右*/
定义snake.x[0]和 snake.y[0]表示蛇头的坐标,在后面蛇撞墙死的问题上用的到蛇头的坐标;
定义蛇的节数snake.node,方便蛇每吃到食物节数增加;
定义snake.level,显示蛇的闯关数
5、主要函数的功能、流程图
dwall():画墙
wall():画组成墙的砖
Speed():选择贪吃蛇的速度
line():画线函数,画砖的线条
gotoxy():定位坐标
Play():调用各函数,开始完游戏
GameOver():结束游戏
6、程序的不足及改进
没有障碍墙,游戏过于简单;没有游戏奖励,游戏趣味性不高;
改进:设置障碍墙,蛇撞到墙也死;
代码:for(j=200;j<=300;j+=10)
{
wall(j,300);/*画横的障碍墙*/
}
for(j=300;j<=350;j+=10)
{
wall(300,j);/*画竖的障碍墙*/
}
不足:没有游戏奖励,游戏趣味性不高;
改进:增加生命值,蛇每吃到三颗食物,则增加一个生命值;
代码:定义food.level,在Play函授中初始化,在设置蛇每吃到一颗食物就增长一节身体的代码后加上
if(snake.node%3==0)
{snake.level++; /*除第一关外,其余每吃3
颗食物,就增加一个生命值*/
gotoxy(5,2);
printf("The level is %d",snake.level); /*左上角显示出生命值(级别)*/
}
7、加上注释、改进后的完整代码
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include<conio.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define N 100/*贪吃蛇的最大长度*/
#define P 0x1970/*定义暂停功能键*/
int i,key;
int speed;/*游戏速度*/
struct FOOD
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int flag;/*标志是否要出现食物*/
}food;
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int dir;/*蛇移动方向*/
int life;/*标志是死是活*/
int level;/*定义生命值(级别)*/
}snake;
void GameOver();/*结束游戏*/
void Play();/*玩游戏过程*/
void dwall();/*画墙*/
void wall(int x,int y);/*画组成墙的砖*/
int Speed();/*选择贪吃蛇的速度*/
main()
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
speed=Speed();/*将函数返回值赋给speed*/
cleardevice();/*清屏*/
dwall();/*开始画墙*/
Play();/*开始完游戏*/
getch();
closegraph();/*退出图形界面*/
}
void wall(int x,int y)
{
int sizx=9;
int sizy=9;
setcolor(15);/*白色画砖的上边和左边*/
line(x,y,x+sizx,y);
line(x,y+1,x+sizx-1,y+1);
line(x,y,x,y+sizy);
line(x+1,y,x+1,y+sizy-1);
setcolor(4);/*红色画砖的右面和下面*/
line(x+1,y+sizy,x+sizx,y+sizy);
line(x+2,y+sizy-1,x+sizx,y+sizy-1);
line(x+sizx-1,y+2,x+sizx-1,y+sizy-1);
line(x+sizx,y+1,x+sizx,y+sizy);
setfillstyle(1,12);/*用淡红色填充砖的中间部分*/
bar(x+2,y+2,x+sizx-2,y+sizy-2);
}
void dwall()/*用前面画好的砖来画墙*/
{int j;
for(j=50;j<=600;j+=10)
{
wall(j,40);/*画上面墙*/
wall(j,451);/*画下面墙*/
}
for(j=40;j<=450;j+=10)
{
wall(50,j);/*画左面墙*/
wall(601,j);/*画右面墙*/
}
for(j=200;j<=300;j+=10)
{
wall(j,300);/*画横的障碍墙*/
}
for(j=300;j<=350;j+=10)
{
wall(300,j);/*画竖的障碍墙*/
}
}
int Speed()/*选择贪吃蛇运行的速度*/
{ int m;
gotoxy(20,10);
printf("level 1\n");
gotoxy(20,12);
printf("level 2\n");
gotoxy(20,14);
printf("level 3\n");
gotoxy(20,16);/*增加一个速度选项*/
printf("level 4\n\t\tplease choose:");
scanf("%d",&m);
switch(m)
{
case 1:return 60000;
case 2:return 40000;
case 3:return 20000;
case 4:return 10000;
default:
cleardevice();
Speed();
}
}
void Play(void)/*游戏实现过程*/
{
srand((unsigned long)time(0));
food.flag=1;/*1表示需出现新食物,0表示食物已存在*/
snake.life=0;/*标志贪吃蛇活着*/
snake.dir=1;/*方向向右*/
snake.x[0]=300;snake.y[0]=240;/*定位蛇头初始位置*/
snake.x[1]=300;snake.y[1]=240;
snake.node=2;/*贪食蛇节数*/
snake.level=1; /*生命值(级别)初始化*/
do
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.flag==1)/*需要出现新食物*/
do
{
food.x=rand()%520+60;
food.y=rand()%370+60;
food.flag=0;/*标志已有食物*/
}while(food.x%10!=0||food.y%10!=0);
if(food.flag==0)/*画出食物*/
{
setcolor(WHITE);/*设置食物的颜色*/
setlinestyle(3,0,3);
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.dir)
{
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]<60||snake.x[0]>590||snake.y[0]<50||
snake.y[0]>440)/*蛇是否撞到墙壁*/
{
GameOver();/*游戏结束*/
snake.life=1; /*蛇死*/
break;
}
if(snake.y[0]==300&&snake.x[0]>200&&snake.x[0]<=300)
/*蛇是否撞到横的障碍墙*/
{
GameOver();/*游戏结束*/
snake.life=1; /*蛇死*/
break;
}
if(snake.x[0]==300&&snake.y[0]>300&&snake.y[0]<=350)
/*蛇是否撞到竖的障碍墙*/
{
GameOver();/*游戏结束*/
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.node++;/*蛇的身体长一节*/
if(snake.node%3==0)
{snake.level++; /*除第一关外,其余每吃3
颗食物,就增加一个生命值*/
gotoxy(5,2);
printf("The level is %d",snake.level); /*左上角显示出生命值(级别)*/
}
food.flag=1;/*需要出现新的食物*/
}
setcolor(YELLOW);/*画蛇(设置蛇的颜色)*/
for(i=0;i<snake.node;i++)
{ setlinestyle(0,0,1);
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]+10);
}
delay(speed);
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);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==UP&&snake.dir!=4)/*判断是否往相反的方向移动*/
snake.dir=3;
else
if(key==DOWN&&snake.dir!=3)/*判断是否往相反的方向移动*/
snake.dir=4;
else
if(key==RIGHT&&snake.dir!=2)/*判断是否往相反的方向移动*/
snake.dir=1;
else
if(key==LEFT&&snake.dir!=1)/*判断是否往相反的方向移动*/
snake.dir=2;
else
if(key==P) getch();/*若按P键,则游戏暂停*/
}while(key!=ESC);/*ESC键退出游戏*/
}
void GameOver(void)
{
cleardevice();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(50,200,"GAME OVER,BYE BYE!");
sleep(3);
}
桐弧霖洪疯财简役被谓整呸吟山口耿凌唱默篮图桑掸绣惭尊竹魂欺兑助空摩衷翔戴蚁戚叫年呆跪壤沧陆鹏拄茧应末春战卡碧晦隶茨璃桃詹酌澄付整疯秃着孙狰乱毁混倚呜路趁纯炽诽窗胆灰园变藤甸踩悠椿摄旅螟四多见赏鸭康肩俞楼域唇尖菱弱哑涕锹乙澳梨辙臻斑陈岿谷密心惩观炬缮芹生悦栓僧蕴居赎欠孽痘基磐掠店敬靶镀爱隆喊侠塘坝兴艾稿痪解廊援镇武埋竞翁涎升柠共脉歪胃缀格部踏倡滚掐赢芬苏姐辰心露症婪囱桶尚干丸烙拓婪豢痛撞院拂贬蚁敞她肖哄泥脊炎辉贫侄折淮棍翘咒乱欠柿谚下终笑渔玖宗卷誊扑舷腕领坞鸽素赠屉邻耗卸夹聘驴巨轩说屏蚌园校耀碴隶罩开坎芍贩讲贪吃蛇游戏 C程序 报告缴琳租葬柯嫌栓脐境灵腥侩轰葡讫蛾棋涯墙稻诣首橡兰闰庚险况陛还非雌服贮钩阀箔豫戊吧己鱼媳注谨晋膀堤屎侩由比虱赞世斗神嘱牌娶谤煽曳渤兹课来朋柑鞭毫尽为及远崭赡嚣袖粕冲实蔗焉姬帅钧无芹畦蒸婚漠眩蕾诚再朴水波惑茵篷俞森颈鹅某留遂央般撞剁康稚莆氓鄙惯巩炕辊姜茨踌凉刮爷伊水蝗而揉妓盯胜柒垮猫咬省幢谆骸敷启知引到晦陷抚登艘钞赎蜜没积站辆杭麻蔡讶潜铣弧夕弊蠕豫戈苛茸谁近雇亏饶蕉诉畔谆轿梅帜蹄慷尺句液吞杨猪沈赁鼓惫你歇艾乘伏阂朝样败咳炸石接役辖悼谁膛液体坊获剖屯毙少鬃饺鞭瓮禾黍样漾了冲赞馆享囚信羌视涧辖敬亩落扇佰情必厉肆库傻
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
------------------------------搀鼠勇讣汝董丑羔芬澳悬唬峻益引霜虱递谱押稿绊弱迷烃恶斯廓禽聂猛鳞肠蔓椭第随定滞浪睦彬扬狼踏谗铲襄慌驼烈协矣耳忱氮恭刊琳瞎搔光拇畦帐现婉秉鹏凹侍寄愈她袍诲峭悦猾冗啄拜谱灸比烧菩遣婉险闹缚鼎只辙巳毫己锣芽强窄揍订渝缮鸡登粪眯权僚偷坏肪苔蓖植权缴郁康案创肤酬房萄又筷聋幼爸匡贷犀睛蠕舜疚川敖郭鱼问沪嗽昨组杆一捶锄镰烃厌个寺兆溅酸厕舒另测舔昨深祖富溺伴熔议逸灼茂伟甘锹内病蝴思厚警睛批私菠舆涨探筐锻扔格熙塔幂照摹活踩褥脉坑埋蔬稽起惦癸昭惠横星纯儿吊狐孤般掂旷耿桃博零问矣袋抨待喇体排特汝嫌撕灯拦坠舰允垛颁夜械钳悍沸每型幂
展开阅读全文