贪吃蛇毕业论文.docx

上传人:b****0 文档编号:425128 上传时间:2022-10-10 格式:DOCX 页数:18 大小:43.66KB
下载 相关 举报
贪吃蛇毕业论文.docx_第1页
第1页 / 共18页
贪吃蛇毕业论文.docx_第2页
第2页 / 共18页
贪吃蛇毕业论文.docx_第3页
第3页 / 共18页
贪吃蛇毕业论文.docx_第4页
第4页 / 共18页
贪吃蛇毕业论文.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

贪吃蛇毕业论文.docx

《贪吃蛇毕业论文.docx》由会员分享,可在线阅读,更多相关《贪吃蛇毕业论文.docx(18页珍藏版)》请在冰豆网上搜索。

贪吃蛇毕业论文.docx

贪吃蛇毕业论文

一.功能描述ﻩ2

二.基本原理2

三、设计的具体实现ﻩ3

(1)函数定义ﻩ3

(2)主函数main()ﻩ4

(3)画界面函数DrawK()ﻩ5

(4)游戏具体过程函数GamePlay( )ﻩ5

(5)游戏结束函数GameOver( )8

四、调试及解决方法ﻩ10

五、测试结果ﻩ10

六、设计心得体会12

七、参考文献12

一.功能描述

基本功能:

开始蛇向右方移动。

按键盘上定义的上下左右键,蛇改变游动的方向,可以上下左右游动。

蛇不能碰到图中的灰色栅栏,如碰到游戏结束。

若蛇碰到图中一粒豆子,则豆子被蛇吃掉,图中的豆子消失,蛇身变长。

最终所有的豆子都被吃掉,游戏结束。

增强要求:

(1)必须改进游戏的界面,增加显示相关的统计信息。

左边的显示区保持不变,右边动态显示积分和总时间统计信息,其中积分栏目显示当前已经吃下的豆子数目,总时间显示本局游戏从开始到现在经过的时间。

(2)优化主程序,注意CPU和内存的使用效率。

(3)考虑一个合理的得分算法,得分值应该取决于吃下去的豆子和游戏持续的时间。

(4)得分可以在发光二极管上显示出来。

 

二.基本原理

游戏开始后进入游戏界面.首先初始化蛇的坐标,食物的坐标.线程基本流程:

判断是否是暂停阶段,是否有有退出按键,游戏是否有结束,如果都没有就执行,如果游戏结束了就重新游戏或者退出。

开启键盘功能,实现通过方向键来控制蛇的移动方向; 开启数码管功能,实现蛇吃到食物后能够更新和显示分数;利用变量,实现吃了6个食物后,游戏能够结束,并能通过增加蛇的移动速度来增加游戏的难度。

三、设计的具体实现

(1)函数定义 

函数定义是对各个

基础函数的定义,并且设置需要运用的信息,便于调用

#defineN 200

#define M200

#include"gra

phics.h"

#include<stdlib.h>

#include<stdio.h>

#include

#include

#include

#include<conio.h>

#include<windows.h>

#defineLEFT97//A

#define RIGHT100//D

#define DOWN115//S

#defineUP119//W

#define Esc0x011b

inti,key;

intscore=0;

intgamespeed=250;//游戏速度可根据实际情况自行调整

structFood

{

intx;//食物的横坐标

ﻩinty;//食物的纵坐标

ﻩintyes;//判断是否要出现食物的变量

}food;//食物的结构体

structSnake

{

ﻩintx[M];

ﻩinty[M];

intnode;//蛇的节数

intdirection;//蛇的移动方向

ﻩint life;//蛇的生命,0表示活着,1表示死亡

}snake;

voidInit();//图形驱动

voidClose();//图形结束

voidDrawK();//开始画面

voidGamePlay();//玩游戏的具体过程

voidGameOver();//游戏结束

voidPrScore();//输出成绩

(2)主函数main() 

主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序

voidmain()//主函数

{

Init();//图形驱动

DrawK();//开始画面

GamePlay();//玩游戏的具体过程

Close();//图形结束

}

voidInit()//图形驱动

{

intgd=DETECT,gm;

initgraph(&gd,&gm,"");/*此处为turboc的路径,读者可以根据自己的电脑而改*/

cleardevice();

}

(3) 画界面函数DrawK()

主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。

void DrawK()//开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙

{

setbkcolor(GREEN);

setcolor(LIGHTRED);

setlinestyle(0,0,5);//设置线型

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);//右边

}

(4)游戏具体过程函数GamePlay( ) 

这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。

voidGamePlay()//玩游戏的具体过程

ﻩrand();//随机数发生器

ﻩ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)//可重复玩游戏,按ESC键结束

{

ﻩﻩ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)//1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头

ﻩﻩﻩ{

case1:

ﻩﻩﻩﻩsnake.x[0]+=10;break;

ﻩﻩﻩcase 2:

ﻩﻩﻩﻩsnake.x[0]-=10;break;

ﻩcase3:

ﻩﻩﻩﻩsnake.y[0]-=10;break;

ﻩﻩcase4:

ﻩﻩﻩ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(WHITE);//画出蛇

ﻩﻩfor(i=0;i

ﻩﻩrectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);

ﻩSleep(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);

ﻩif(snake.life==1)//如果蛇死就跳出循环

break;

key=getchar();//接受案件

if(key==Esc)//按ESC键退出

ﻩﻩbreak;

elseif(key==UP&&snake.direction!

=4)

ﻩsnake.direction=3;

ﻩelse if(key==RIGHT&&snake.direction!

=2)

ﻩﻩsnake.direction=1;

ﻩﻩelseif(key==LEFT&&snake.direction!

=1)

ﻩﻩsnake.direction=2;

ﻩﻩelseif(key==DOWN&&snake.direction!

=3)

ﻩﻩsnake.direction=4;

ﻩ}//endwhile

(1)

(5)游戏结束函数GameOver()

游戏结束,清除屏幕,输出分数,显示游戏结束信息

voidGameOver()//游戏结束

{

cleardevice();

ﻩPrScore();

setcolor(RED);

outtextxy(100,100,"我会回来的!

!

!

!

!

");

ﻩgetch();

}

voidPrScore()//输出成绩

{

charstr[10];

ﻩsetfillstyle(SOLID_FILL,YELLOW);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1