当前位置:文档之家› 单片机C语言贪吃蛇程序可下

单片机C语言贪吃蛇程序可下

单片机C语言贪吃蛇程序可下
单片机C语言贪吃蛇程序可下

【单片机游戏设计及贪吃蛇程序】

管理提醒:

本帖被icneo 执行取消置顶操作(2009-01-02)

【单片机游戏设计及贪吃蛇程序】

单片机游戏设计

1。概念

对于大部分单片机+LCD的游戏设计,基本采用前后台方式,就是一个台中断,一个台循环(哪个前哪个后忘了),LCD部分基本是以固定点阵形式设计,什么叫固定点阵??首先先明确,我们设计的游戏不是什么魔兽争霸或CS,而是黑白形式的固定点阵游戏,例如常见著名游戏贪吃蛇或俄罗斯方块。他们的每个点都是预先就固定下来的,而且是比较大的点,这类专门的游戏机玻璃是经过厂家开模出来的,有固定的COM,SEG线,然后接到专门的单片机上,例如常用的6502指令集合的单片机,呵呵,我以前就用6502设计过一个。

对于业余设计的游戏,我们一般用如128*64的LCD来显示,那么我们设计的时候首先应该把这个1 28*64的LCD分块,也就是分出固定点阵出来。LCD的基本点阵是128*64,就是?¥##¥总之就是好多个点啦,但我们事实上不一定要运算这么多个点,除非你做的游戏很有看头。例如你只用左边6 4*64的地方来做贪吃蛇,那么你打算你的贪吃蛇的活动空间是多少呢?如果是8*8个点的话,算一下就是每个点64/8,64/8,也就是8*8个基本点阵,不过想好玩一点,当然就是要有16*16个点的活动空间啦,那么每个固定点阵就要占4*4的基本点阵了。要注意,这些4*4的东西在64*64LCD上共16*16个,每个都要用来独立运算。

2。时钟

这个其实是游戏的速度,对于一般的弱智类游戏机,他也代表了难度,物体在每个时钟到达的时候就传动一次,例如俄罗斯方块没个时刻向下跑一层。赛车游戏每个时刻想前走一步。一般这类时钟的时间在0.X秒到1秒之间,物体有规律地匀速运动,让人看到感觉是连动。

3。运动

在这里,我先介绍两种比较普遍的弱智游戏机的物体运动规则:柔体传动,刚体传动。

刚体传动

代表作是俄罗斯方块,所谓刚体,就是硬硬的一个东东,运动的时候也不怎么旋转(注意,俄罗斯方块是会旋转,但其实他是没有经过算法的旋转,纯提取数组的方式,也就是把一个放块做成4个模式的点阵结构,其实就是4个方向,呵呵)对于刚体的传动,在每个时钟到达的时候向一个方向(很可能是用户输入的)运动一个固定点阵。如果以坐标来表达,就是物体的所有基本点阵同时向一个方向(X或Y)移动一个单位。

柔体传动

代表作是贪吃蛇,贪吃蛇跑动的时候并不是整条蛇向一个方向动的(呵呵,蛇蛇身体僵硬了),而是在每个时钟的到来,物体由能量头带动(如蛇头),每个点的方向都向下一个点传播,然后自己向新的方向走动一步,走动后,下一个点由于得到了上一个点的方向并同样地运动一步,所以,他会马上填补上一个点的地方,如此类推。说的好象没说,看不懂没关系,因为实际的算法可以简化(傻瓜才

会一个个点来走的),实际上在设计贪吃蛇的时候,只需要把蛇尾巴的那个点阵去掉,然后在蛇头的新方向放一个点阵就是了。期间需要记录下每个蛇身的固定点阵的位置,并且在每个运动时刻过后刷新一次每个点的位置。

4。显示接口

我们用的一般是点阵式LCD,就是一大片点点,128*64,132*64,240*128等等等等啦,这些又叫条屏,就是一写就写一条——8个点(有的也提供写一个点的功能,但贵,至少我没有),那么如果你只想写一个点怎么办?那就得先把这个点所在的条读出来,然后通过

与,或,的运算后,再放回到LCD上,这时候就要涉及到一个读LCD的问题了,有的LCD提供读的功能,你写过什么在上面他记的很清楚(就好象老丁实验板上的LCD),但有的便宜货就不行了,那么我们怎么办?没关系,你在内存中提取出一片空间,虚拟一个LCD出来,每次写在真实LCD上面的时候,也同时写到内存的哪个虚拟LCD上,那么你要读出LCD的值的时候实际就是读出虚拟L D上的数据,然后与或后,再重新写到LCD上,记得也要写到虚拟LCD上哦。你可以把这片缓冲叫做显存(COOL吧??)

5。流程

这是成功设计游戏的灵魂,你在设计游戏之前必须能正确构思到一个基本模型出来。这个基本是菜鸟和虾米的一个区别,有了构思,其他的其实都是时间问题了。以贪吃蛇为例,我们需要有这样的基本思路:(普通手机上的那种)

蛇运动处理,吃到食物的处理,放新食物的处理,死亡的处理。

以上是基本的思路,至于那些记录分数,音乐效果,玩到一定分数会自动加速度等不是游戏的必须,可以在后期处理!

分析下来:

运动:根据用户输入按键进行柔体传动。

吃到食物:置没有食物标志了,蛇长大一个点阵。

放新食物:判断食物标志,如果没有食物,就要放食物,判断放的食物是否和蛇身重叠,

重叠了要重放。

死亡处理:判断是否撞中自己或撞墙。

这就是基本要做的东西,实际上就是程序要做的东西,那么把上面的东西连成一个流程是怎样的呢?我以文字表达:

蛇向一个固定方向进行柔体传动,没个运动时钟到达要做:1。判断食物标志,没有食物了就放一个,放的时候判断,不能和蛇身重叠2。得到用户按键值,蛇走一步,并判断是否撞死了,没撞死,再判断是否吃到东西了,没有吃到,就等下一个运动时钟,吃了?就增长一点。置一个没有食物的标志。然后等待下一个时刻的来临。

呵呵,其实程序就是这么简单,基本设计只有LCD部分和按键部分是和单片机有关的,其他都是程序思维和算法。对于菜鸟来说,难度在于思维,而不是单片机。说了屁话一堆,还得放上个能玩的,这里我介绍我的贪吃蛇程序,在实验板上跑的,很久以前就写的了,有人也玩过。放到现在才拿出来

希望大家不要介意:)

程序注意:这是在丁丁的板子上跑的程序,有些函数部分采用了别人写的底层:例如键盘扫描,汉字显示,LCD显示等,为了保障老丁的利益,我没有完全给出所有的底层部分,其实他们和贪吃蛇本身没有太大关系。贪婪者别以为拿来就用,我只希望大家用来交流学习。其实改改就能玩的了。

注释应该很详尽,有不懂自己想啦。

还有,我有点反感有些人公布程序了,但却把很多注释去掉,这个不知道是什么心态呢??希望大家能大方点,要给,就要给最好的!!

【单片机游戏设计及贪吃蛇程序】

程序:

/*snake_flag是游戏标志,第一位是跑动标志,在定时器中断上设置,下面程序没有定时

器中断函数,因为定时器函数在丁板上是给很多个程序共用的,函数根据标志判断当前是

为那个进程服务*/

//贪吃蛇游戏程序,屏左半部用于游戏活动,右半部为分数显示

//游戏屏为16*16游戏点阵,可容纳蛇身块数256。每个游戏点阵又由4*4个LCD基本点阵组

//蛇行标志在定时器上置位,这里为游戏的主体部分。

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define LCMD XBYTE[0xAfff] // 液晶数据口

#define LCMC XBYTE[0xAbff] // 液晶命令口

#define TIME_RUN 10 //定时器分品系

#include "study.h"

#include "reg51.h"

#include "absacc.h"

#include "intrins.h"

//游戏部分

//x,y最大极限

#define MAX_GAME_X 15

#define MAX_GAME_Y 15

#define lcd_no_read 1 //编译选项,把这项屏蔽掉就

采用LCD读出方式,否则采用显存形式

uchar snake_flag, //蛇头标志 7 6 5 4 3 2

1 0

// 上下左右x gameover food run

snake_len, //蛇身长度

snake_food; //食物位置,高4位Y,低4位x

uchar xdata snake_body[256]; //蛇身每个部分的数据

// 7 6 5 4 3 2 1 0

//

高4位Y方向低4位X方向

#ifdef lcd_no_read

uchar xdata lcd_buf[8][64];//lcd缓冲,用于记录LCD内部的点阵,可以理解为显存//当

LCD无读出功能时,就要采用显示缓冲。本LCD为可读,一般不用这个功能

//缓

冲只记录蛇身活动的部分,即LCD左半屏

#endif

/******************************************************

* 游戏LCD部分,根据游戏的特点把LCD分成16*16块

* 用作游戏点阵,

*******************************************************/

//

//函数名:clr_game_dot

//功能:清一个游戏点

//输入参数:游戏点的X,Y坐标

//注意事项:这里的X,Y坐标和LCD底层的X,Y坐标不同,他最大只能是

MAX_GAME_X,MAX_GAME_Y

//使用方式:内部调用

void clr_game_dot(uchar x,uchar y)

{

uchar lcd_x,i,tmp;

while(x>MAX_GAME_X)x-=(MAX_GAME_X+1); //这个是写程序习惯的保护措施,预防输入范围过大

while(y>MAX_GAME_Y)y-=(MAX_GAME_Y+1);

lcd_x=x<<2;

LCMC=lcd_x&0x0f; //设置x位置

LCMC=(lcd_x>>4)|0x10;

LCMC=0xb0+y/2; //设置Y位置

LCMC=0xe0;

if(y%2)//行的下半部

{

for(i=0;i<4;i++)

{

#ifdef lcd_no_read //以下是显存法的清点程序,其他例如亮点的部分和这个原理一样

tmp=lcd_buf[y>>1][(x<<2)+i];

//先从缓冲读出要修改的LCD片的数据

tmp&=0x0f;

//清对应的游戏点

LCMD=tmp;

_nop_();

lcd_buf[y>>1][(x<<2)+i]=tmp;

//把新数据写回缓冲

#else

tmp=LCMD;tmp=LCMD;

//读LCD的方法,要求连读2次

LCMD=tmp&0x0f;

#endif

}

}

else //行的上半部,下同

{

for(i=0;i<4;i++)

{

#ifdef lcd_no_read

tmp=lcd_buf[y>>1][(x<<2)+i];

tmp&=0xf0;

LCMD=tmp;

_nop_();

lcd_buf[y>>1][(x<<2)+i]=tmp;

#else

tmp=LCMD;tmp=LCMD;

LCMD=tmp&0xf0;

#endif

}

}

LCMC=0xee;

}

//函数名:fill_game_dot

//功能:亮一个游戏点

//输入参数:游戏坐标的X,Y坐标

//注意事项:这里的X,Y坐标和LCD底层的X,Y坐标不同,他最大只能是

MAX_GAME_X,MAX_GAME_Y

// 这个函数和上面的clr_game_dot基本相同,只是在写LCD数据的时候是全1而不是0

//使用方式:内部调用

void fill_game_dot(uchar x,uchar y)

{

uchar lcd_x,i,tmp;

while(x>MAX_GAME_X)x-=(MAX_GAME_X+1);

while(y>MAX_GAME_Y)y-=(MAX_GAME_Y+1);

lcd_x=x<<2;

LCMC=lcd_x&0x0f; //设置x位置

LCMC=(lcd_x>>4)|0x10;

LCMC=0xb0+y/2; //设置Y位置

LCMC=0xe0;

if(y%2)//行的下半部

{

for(i=0;i<4;i++)

{

#ifdef lcd_no_read

tmp=lcd_buf[y>>1][(x<<2)+i];

tmp|=0xf0;

LCMD=tmp;

_nop_();

lcd_buf[y>>1][(x<<2)+i]=tmp;

#else

tmp=LCMD;tmp=LCMD;

LCMD=tmp|0xf0;

#endif

}

}

else

{

for(i=0;i<4;i++)

{

#ifdef lcd_no_read

tmp=lcd_buf[y>>1][(x<<2)+i];

tmp|=0x0f;

LCMD=tmp;

_nop_();

lcd_buf[y>>1][(x<<2)+i]=tmp;

#else

tmp=LCMD;tmp=LCMD;

LCMD=tmp|0x0f;

#endif

}

}

LCMC=0xee;

}

【单片机游戏设计及贪吃蛇程序】

程序续:

//函数名:fill_game_dot2

//功能:亮一个游戏点(另一种方式,这里用来显示食物用)

//输入参数:X,Y

//注意事项:X,Y为游戏的点阵,非LCD点阵...还有LCD填充数据是0x05或0x50 //使用方式:内部调用,显示蛇的食物的时候用这个函数,区分开蛇身和食物.

void fill_game_dot2(uchar x,uchar y)

{

uchar lcd_x,i,tmp;

while(x>MAX_GAME_X)x-=(MAX_GAME_X+1);

while(y>MAX_GAME_Y)y-=(MAX_GAME_Y+1);

lcd_x=x<<2;

LCMC=lcd_x&0x0f; //设置x位置

LCMC=(lcd_x>>4)|0x10;

LCMC=0xb0+y/2; //设置Y位置

LCMC=0xe0;

if(y%2)

{

for(i=0;i<4;i++)

{

#ifdef lcd_no_read

tmp=lcd_buf[y>>1][(x<<2)+i];

tmp|=0x50;

LCMD=tmp;

_nop_();

lcd_buf[y>>1][(x<<2)+i]=tmp;

#else

tmp=LCMD;tmp=LCMD;

LCMD=tmp|0x50;

#endif

}

}

else

{

for(i=0;i<4;i++)

{

#ifdef lcd_no_read

tmp=lcd_buf[y>>1][(x<<2)+i];

tmp|=0x05;

LCMD=tmp;

_nop_();

lcd_buf[y>>1][(x<<2)+i]=tmp;

#else

tmp=LCMD;tmp=LCMD;

LCMD=tmp|0x05;

#endif

}

}

LCMC=0xee;

}

/************************************************************

*

* 游戏算法部分(8*8LCD)

*

**************************************************************/

//函数名game_init()

//功能:游戏开始的时候初始化画面的,这里只是简单地把132*64LCD用一条中间线划分开来//注意事项:暂时在中间画条线用来划分游戏空间

//使用方式:内部调用,

void game_init()

{

uchar i;

uchar xdata *da;

for(da=0;da<0x8000;da++)//清空xDATA,

*da=0x0;

cls(9); //丁丁的清屏函

initlcd();

for(i=0;i<8;i++)

{

LCMC=64&0x0f;

LCMC=(64>>4)|0x10; //线在x=64,

LCMC=0xb0+i; //y=(0-15)的地方

LCMC=0xe0; //把LCD划分,左边用来游戏

LCMD=0xff;

}

LCMC=0xee;

}

//函数名:snake_init

//功能:蛇初始化

//注意事项:初始化只有3节蛇身,向右跑

//使用情况:内部调用

void snake_init()

{

fill_game_dot(0,0); //显示射身

fill_game_dot(1,0);

fill_game_dot(2,0);

snake_len=2;

snake_flag=0x10; //蛇的初始化,3个身.向右跑

snake_body[0]=0x02; //装入射身数据

snake_body[1]=0x01;

snake_body[2]=0x00;

//一开始游戏时的文字部分

setcursor(8,0);

lcdstring("分数为:\r\n");

setcursor(8,2);

lcddigit(snake_len-2);

}

//函数名:show_mark

//功能:显示当前分数,暂时以蛇身个数为分数

//参数说明:0,和非0, 0代表游戏中的显示,!0代表挂了的显示

//注意事项:调用到LCD.c显示函数,并需要汉字库的支持.

// 返回值在GAMEOVER时候有效,返回0退出游戏,1从新游

//使用情况:snake_run()在蛇吃到食物的时候调用,在GAMEOVER后调用uchar show_mark(uchar mode)

{

uchar ch;

setcursor(8,0);

lcdstring("分数为:\r\n");

setcursor(8,2);

lcddigit(snake_len-2);

if(mode)//gameover中显示

{

setcursor(8,0);

lcddigit(snake_len-2);

lcdstring(" 分.");

setcursor(8,2);

lcdstring("C退出");

setcursor(8,4);

lcdstring("回车继续");

do ch=getkey(1000);

while( (ch!='C') && (ch!='Y') );

//游戏结束了会在这里死等,直到用户按键

if(ch=='Y')

return(1);

else

return(0);

}

return(0);

}

//函数名:snake_run

//功能:蛇运行函数

//输入参数:一个全局变量flag_snake,蛇根据这个变量判断运动方向//注意事项:蛇跑动函数,用于判断路径,食物,长大,死亡

//使用情况:内部调用

void snake_run()

{

uchar tmp_head_x,tmp_head_y;

uchar i;

switch(snake_flag&0xf0) //取蛇头方向

{

case 0x80://向上走y--

tmp_head_x=snake_body[0]

&0x0f;

tmp_head_y=(snake_body[0]

>>4);

if(tmp_head_y==0)

snake_flag|=0x04;//这个代表撞墙了,就置GAMEOVER标志,下同else tmp_head_y--;

break;

case 0x40://向下走y++

tmp_head_x=snake_body[0]

&0x0f;

tmp_head_y=(snake_body[0]

>>4);

if(tmp_head_y==MAX_GAME_Y)

snake_flag|=0x04;

else tmp_head_y++;

break;

case 0x20://向左走x--

tmp_head_y=snake_body[0]

>>4;

tmp_head_x=snake_body[0]

&0x0f;

if(tmp_head_x==0)

snake_flag|=0x04;

else tmp_head_x--;

break;

case 0x10://向右走x++

tmp_head_y=snake_body[0]

>>4;

tmp_head_x=snake_body[0]

&0x0f;

if(tmp_head_x==MAX_GAME_X)

snake_flag|=0x04;

else tmp_head_x++;

break;

default:break;

}

if(!(snake_flag&0x04)) //如

果在之前没有撞墙,就可以进行下一步判断

{

//以下是得到食物的判断。

if(snake_food!=( (tmp_head_y<<4)

+tmp_head_x ))//蛇头和食物坐标没重叠就代表没有吃到食物{//得不到食物的处理

clr_game_dot(snake_body[snake_len]

&0x0f,snake_body[snake_len]>>4);//灭蛇尾巴

for(i=snake_len;i>0;i--)

//柔体传动

snake_body=snake_body[i-1];

snake_body[0]=( tmp_head_y<<4 ) +

tmp_head_x;

}

else

{//得到食物的处理

snake_body[snake_len+1]=snake_body

[snake_len]; //保留蛇尾巴(这是增长型柔

体传动)

for(i=snake_len;i>0;i--)

snake_body=snake_body[i-1];

snake_body[0]=( tmp_head_y<<4 ) +

tmp_head_x; //新蛇头

snake_len++;//长度增加1

snake_flag&=~0x02;//清食物标志

show_mark(0);//显示分数

}

fill_game_dot(tmp_head_x,tmp_head_y);//显示新蛇

}

for(i=1;i

//判断是否撞中自己

{

if(snake_body[0]==snake_body)

{

snake_flag|=0x04;

//撞中了就置GAMEOVER标志

break;

}

}

}

//函数名:set_food

//功能:放食物

//注意事项:这个函数在被调用前会先判断是否需要放食物, // 这里用自己编写的随机数来产生食物,随机数和蛇身位置,定时器有关

// 每次放食物的时候必须先判断是否和蛇身重叠了,重叠了要重新放

// 这里设定了如果蛇长度达到某值了就不再放食物.

//影响变量:snake_food

//使用情况:内部调用

void set_food()

{

uchar seed0,seed1,i=0;

seed0=snake_body[snake_len-2];

if(snake_len==250)

{

return;//蛇都快满屏了,就不放食物了,事实上我还没玩过超过100的呢:) }

seed0=((seed1>>3)*4+seed0+TL0);//随机数的生成,其实乱做就可以了:)seed1=(snake_body[0]>>4)+seed0;

snake_food=(seed1+seed0*3);

food:

for(i=0;i

{

if( snake_body==snake_food )

{

snake_food=(snake_food+0x01); //如

果重叠了,位置就+1,然后

goto food;

//重新比较,这里可以换成i=255,效果一样

}

}

fill_game_dot2(snake_food&0x0f,snake_food>>4);//放食物

snake_flag|=0x02;//置有食物标志

}

// 函数名:定时器1初始化程序

// 晶振22.1184,定时时间35MS

void timer0_init(void)

{

TMOD=0x1;

TH0=0x0;

TL0=0x0;

}

//函数名:snake_game

//功能:整个游戏的主要函数

//注意事项:游戏利用了定时器产生蛇的运行速速度

// 调用前应该先初始化定时器

//使用情况:外部调用

//

extern uchar time_service; //这个东东是使

定时器公用的。

void snake_game()

{

uchar tmp_snake_flag,ch;

cls(8);

time_service=1;

lcdstring("贪吃蛇游戏\r\nC退出,任意键进入\r\n游戏说明:\r\n2:上5:下4: 左6:右");

while((ch=getkey(1000))==0);

if(ch=='C') return;

ch=0;

begin_game:

game_init(); //一堆初始化

snake_init();

timer0_init();

TR0=1;

ET0=1;

EA=1;

tmp_snake_flag=snake_flag;

while(1)

{

ch=getkey(1000);

switch(ch)

{

case '2'://按了上按键

if( (snake_flag&0x40) ||

(snake_flag&0x80) )break;//向上走的时候,上下键盘都无效,下同

tmp_snake_flag&=0x0f;tmp_snake_flag|=0x80;

break;

case '5'://按了下按键

if( (snake_flag&0x80) ||

(snake_flag&0x40) )break;

tmp_snake_flag&=0x0f;tmp_snake_flag|=0x40; break;

case '4'://按了左按键

if( (snake_flag&0x10 ||

(snake_flag&0x20) ))break;

tmp_snake_flag&=0x0f;tmp_snake_flag|=0x20; break;

case '6'://按了右按键

if( (snake_flag&0x20 ||

(snake_flag&0x10) ))break;

tmp_snake_flag&=0x0f;tmp_snake_flag|=0x10; break;

case 'C'://任何时候,按C就结束游戏

return;

default:

break;

}

if(!(snake_flag&0x02)) //如果图上已经没食物了,就set_food(); //放

食物

if((snake_flag&0x01))

//判断是否够时间跑一步

{

snake_flag=( snake_flag&0x0e ) |

tmp_snake_flag;//取消跑动标志,置新方向

snake_run();

tmp_snake_flag=snake_flag;

}

if((snake_flag&0x04)) //判断游戏结束

标志

{

if(show_mark(1))

{

snake_flag&=~0x04;

goto begin_game;

}

else return;

//游戏结束}

}

}

贪吃蛇设计文档.doc

贪吃蛇游戏的设计文档 目录 一、需求分析 ................................................. 错误 ! 未定义书签。1.功能需求 . .............................................. 错误 ! 未定义书签。 2.非功能需求 错误 ! 未定义书签。 . ............................................ 二、系统设计 ................................................. 错误 ! 未定义书签。 1. 实际思路 . ............................................... 错误 ! 未定义书签。2,结构设计 . .............................................. 错误 ! 未定义书签。 (1), main(), 主函数; . ................................ 错误 ! 未定义书签。 (2), init() , 图形化驱动函数 . ......................... 错误 ! 未定义书签。 (3), help(), 帮助信息函数 . ............................ 错误 ! 未定义书签。 (4), drawfence(), 周围墙壁函数 . ....................... 错误 ! 未定义书签。 (5), printscore(), 得分显示函数 . ...................... 错误 ! 未定义书签。 (6), playgame(), 游戏控制函数 . ........................ 错误 ! 未定义书签。 (7), gameover(), 游戏结束函数 . ........................ 错误 ! 未定义书签。 (8), closegraph(), 关闭图形驱动函数 ................... 错误 ! 未定义书签。 三、系统实现 ................................................. 错误 ! 未定义书签。 1, help() 函数流程图 . ...................................... 错误 ! 未定义书签。 2, drawfence() 函数流程图 . ................................. 错误 ! 未定义书签。 3, printscore() 函数流程图 . ................................ 错误 ! 未定义书签。 4, playgame() 函数流程图 . .................................. 错误 ! 未定义书签。 5, gameover() ,游戏结束函数 . .............................. 错误 ! 未定义书签。 四、系统测试 ................................................. 错误 ! 未定义书签。

C语言贪吃蛇程序设计说明书

C语言贪吃蛇程序设计说明书 题目:贪吃蛇游戏 学校: 系别: 专业 班级: 姓名: 学号: 指导老师: 日期: 一、设计题目: 贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。 二、功能设计: 本游戏要求实现以下几个功能: (1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长; (2) 用户可以调节蛇的运行速度来选择不同的难度; (3) 游戏分多个难度级别; (4) 用户可自选颜色; (5) 记录成绩前五名的游戏玩家; (6) 增加背景音乐; (7) 提高障碍物和游戏级别。 三、程序模块图: 贪吃蛇游戏 初画控设帮 始图制置助 模模模模化 块块块块

墙蛇食移食死变成等音 体身物动物亡长绩级效 2 四、算法流程图: 开始初始化界面和蛇身 放置食物 获取按键 开始运动 碰到边界 是 否 否蛇吃到食 是 蛇长大 蛇死亡是 继续 否 结束 3 五、函数原型与功能 1.主函数:void main() 启动程序,触动其他函数。 2.初始化:void init () 设置背景框大小、蛇体初始值,随机产生食物。 3.随机产生食物:void setfoodcrd()

设置食物生成坐标,0表示食物被吃。 4.画食物:void showfood() 用矩形框来画食物 5.画蛇:void showsnake() 根据蛇的坐标和节数,循环用矩形框来画蛇。 6.蛇移动:void snakemove() 根据按键,重设坐标 7.改变蛇的方向:void changeskdir() 响应用户的运动方向 8.判断蛇是否死亡:void judgeslod 判断蛇是否碰到自己或墙。 9.判断蛇是否吃到食物:void judgefood() 判断是否吃到食物,吃食后变0,蛇增长一节。 10.结束游戏:void gameover() 结束话语,并执行下一步。 六、基本代码 #include #include #include #pragma comment(lib,"Winmm.lib") #include "MyTimer.h" #define SIZEMAX 100 /*蛇最大长度*/ #define SPEED 100 /*初始速度*/ #define len 20 /*蛇宽度*/ #define lm 10 /*蛇每次移动距离*/ #define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/ typedef struct { int x,y; }DIR; int snakelen=Min_snakelen; /*蛇的长度*/

C语言课程设计报告——贪吃蛇源程序

C 语言课程设计(小游戏贪吃蛇的程序设计报告) 设计人: 班级: 201 年月号

目录一:概述 1:研究背景及意义 2:设计的任务与需要知识点3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏的具体过程 4:游戏的结束处理 5:显示排行榜信息模块 五:程序的调试与测试1:动画与音乐同步 2:蛇的运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献

一. 概述 本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C语言技术为基础,使用Turbo C++3、0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统的实现与测试。 1、1 研究的背景及意义 随着社会的发展,人们生活的节奏日益加快,越来越多的人加入了全球化的世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成为了人们的需要。此次课程设计完成的贪吃蛇小游戏,正就是为了满足上述需求而设计出来的。贪吃蛇游戏虽小,却设计诸多的知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程的与那个发,技术与工具开发软件的过程,进一步掌握结构化,模块化的程序设计方法与步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构的使用方法,掌握图形,声音,随机数等多种库函数的使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程的学习与将来实际软件开发打下坚实的基础。 1、2 设计的任务与需要的知识点 1、2、1 课程设计主要完成的任务 1)、通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计的思想,培养解决实际问题的能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物的对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入的理解与掌握课程教学中的基本概念,培养读者应用基本技术解决实际问题的能力,从而进一步提高分析问题与解决问题的能力。 1、2、2需要掌握与运用的知识点 1、2、3本次课程设计需要掌握与运用如下的知识点: 1) 数组的应用。 2) 全局变量的使用。 3) 按键处理。 4)结构体的应用。 5)图形,音乐与动画的有关知识。 6)随即函数的使用。 7)文件的基本出操作。 8) 结构化,模块化的设计方法。

c语言课程设计贪吃蛇设计

. 《C语言程序设计》课程设计 题目:贪吃蛇游戏设计 学院:信息学院 专业:网络工程 姓名:李益双 学号:1101010121 班级:信息A1111班 指导教师:罗成 职称:讲师 完成日期:2012年6月

目录 1、前言 (3) 2、摘要 (4) 3、项目背景 (5) 4、需求分析 (6) 5、概要设计 (7) 6、详细设计与测试 (8) 601 定义蛇身的数据结构 (8) 602算法设计与程序流程图 (8) 602.1贪吃蛇算法设计 (8) 602.2程序流程图 (9) 603光标移动的设计与实现 (10) 603.1显示水平围墙的实现 (10) 603.2显示分数的实现 (11) 603.3接受玩家按键信息的实现 (11) 603.4游戏结束时显示信息的实现 (11) 604 贪吃蛇游戏主干的设计 (12) 604.1游戏的初始化与加载的实现 (12) 604.2食物随机产生的实现 (13) 604.3蛇身的增长设计 (14) 604.4蛇身的显示与移动的设计实现 (15)

604.5蛇的头部与物体碰撞的而设计实现 (16) 7、编码 (17) 8、结论 (18) 9、参考文献 (19) 10、致谢 (19) 前言 C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。 C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年由肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Micro soft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C+ +、Objective-C、Java、C#等。 1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。1980年代至今的有关程式开发工具,一般都支持符合ANSI C的语法。

java课程设计贪吃蛇游戏设计

前言 Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。于是改造了Oak,以“Java”的名称正式发布。 Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

STM32课程设计贪吃蛇

STM32大作业报告 学生: 学号: 所在院系:光电信息与计算机工程学院专业班级: 授课教师: 完成时间:2016年

前言 随着科学技术的不断进步,嵌入式近些年来逐渐兴起,其领域比较新,发展非常迅速,由于它属于新兴领域,接触的人并不是很多,但是嵌入式在各种电子设备上的应用越来越越广泛,并且各种电子设备也在朝着嵌入式微系统,智能化的方向前进。STM32系列是基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M核。作为21世纪的人才,为了与社会实际需要相衔接,提高我们的学习兴趣,利用STM32系列单片机进行了一次嵌入式系统设计。 摘要 在本次作业中采用STM32系列中的STM32F103RCT6微控制器芯片,采用ALIENTEK战舰STM32开发板,使用MiniSTM32开发板上的LCD 接口,来点亮TFTLCD,实现触摸屏功能。

一、课程设计任务要求 本次的课程设计目的是实现一个经典的贪吃蛇游戏,整个游戏实现功能分别为: 1、初始化程序。 2、随机红点、左转、右转、判断边框。 二、系统硬件设计 硬件设计原理图 根据此硬件设计图再结合软件设计就能做出此游戏。 三、系统软件实现 此次的课程设计在于开发个贪吃蛇游戏,其流程图如下图所示。

程序流程图 为方便介绍,此软件实现只给出主要程序部分: 1、本例程提供了硬件平台的初始化 GPIO是常规输入/输出端口,STM32F103RCT6有PA、PB、PC、PD、PE 共5个16位的GPIO。STM32的GPIO都可编程,具有很多复用功能。GPIO 可以配置为很多总模式,这些模式有:输入浮空、输入上拉、输入下拉、模拟输入、开漏输入、推挽输出、推挽复用、开漏复用。通过对GPIO寄存器编程,可以设置每个端口的工作模式。 24C02 EEPROM是开发板板载的2Kbit(256 个字节)EEPROM ,型号为:24C02,用于掉电数据保存。因为STM32 部没有EEPROM,所开发板外扩了24C02,用于存储重要数据,用来做IIC 实验,该芯片直接挂在STM32 的IO 口上。 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS 公司开发的两线式

贪吃蛇小游戏源代码

#include #include #include #include int head=3 ,tail=0; int main() { int i,j,k=0; int zuobiao[2][80]; long start; int direction=77; int gamespeed; int timeover; int change(char qipan[20][80],int zuobiao[2][80],char direction); zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[ 1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4; /*处理棋盘*/ char qipan[20][80];//定义棋盘 for(i=0;i<20;i++) for(j=0;j<80;j++) qipan[i][j]=' ';//初始化棋盘 for(i=0;i<80;i++) qipan[0][i]='_'; for(i=0;i<20;i++) qipan[i][0]='|'; for(i=0;i<20;i++) qipan[i][79]='|'; for(i=0;i<80;i++) qipan[19][i]='_'; qipan[1][1]=qipan[1][2]=qipan[1][3]='*';//初始化蛇的位置 qipan[1][4]='#'; printf("This is a game of a SNAKE.\nGOOD LUCK TO YOU !\n"); printf("Input your game speed,please.(e.g.300)\n"); scanf("%d",&gamespeed); while(direction!='q') { system("cls"); for(i=0;i<20;i++)//打印出棋盘 for(j=0;j<80;j++) printf("%c",qipan[i][j]); timeover=1;

贪吃蛇游戏设计之设计思路

贪吃蛇游戏设计思路 1.首先制作游戏的窗体布局。其中包括窗体的大小,位置,添加按钮组件,在窗体上面划定游戏区域等。 2.为按钮添加监听器,为开始按钮,结束按钮,键盘,还有游戏结束的时候的确定按钮. 3.单击开始按钮,看到的效果是在游戏区域里面看到一个随机产生的食物,和蛇体。产生随见事物使用Random类,随机定位一个游戏区域里面的方块,然后使用Graphrics可以定位到这个方块的坐标图上颜色,这样就产生了肉眼可见的食物。关于蛇体,我们将蛇体的每个方块添加到集合里面,使用的是List,为什么不用数组,原因是数组的长度总是有限的,你不知道蛇体里面最终存放多少方格,而且数组比较繁琐。我们将蛇体的每个方块另外创建一个类(蛇体的每个方格)snakeAct,包含成员变量方格的坐标,每个snakeAct对象实例就是一个方块,将这个对象添加到列表List中就好了,然后再用Graphics,循环画出列表中的每个对象,就成功的画出了蛇体。设置蛇体的初始长度只有蛇头,并设置蛇头的初始位置为居中。 4.通过方向键设置蛇头的移动,定义move()方法,蛇头每移动一次位置就会变化到另外一个方块,对应的坐标x,y都是有相应的变化,例如按下UP键,坐标的变化就是,x不变,y减1。 5.蛇头可以运动只有面临的问题就是要吃食物,而吃食物的过程是在移动过程中,所以在move()方法中添加eat()方法,吃到食物的条件是蛇头的坐标和食物的坐标对应相等,蛇头吃到食物的过程就是将列表中没有吃到食物前的最后一个方格重新画一遍,这样列表的长度就加一,而列表中的对象就多了一个。 6.将食物添加到列表中之后,仍然只是蛇头可以移动,让蛇体跟着蛇头移动定义othermove()方法,就是将蛇体的每个蛇块替换移动前的前一个蛇块的坐标,这样在移动只有,整个蛇体就可以移动了,othermove方法也写在move()方法里面,move()方法写在键盘的监听方法里面。 7.撞墙的或者蛇头撞到自己的身体,可以再move()方法里面进行预判,如 果蛇头移动满足判定条件,才可以移动,若蛇头碰到墙壁或者自己的身体,弹出对话框,点击确定按钮,恢复初始化,清空列表。

贪吃蛇游戏程序设计一课程设

贪吃蛇游戏程序设计__ 一、课程设.txt 同志们:别炒股,风险太大了,还是做豆腐最安全!做硬了是豆腐干,做稀了是豆腐脑,做薄了是豆腐皮,做没了是豆浆,放臭了是臭豆腐!稳赚不亏呀!贪吃蛇游戏程序设 计 一、课程设计任务贪吃蛇小游戏程序设计 二、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合 理的运用资料,实现理论与实际相结合。 (1).收集资料,分析课题,分解问题,形成总体设计思路;(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍; (3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4).完成课程设计报告,并进行答辩 三、需求分析3.1 、程序功能 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。 3.2 、设计思想程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。3.3 、流程图 开始 初始化界面和蛇身 放置食物 蛇开始运动 蛇吃到食? 蛇长大 蛇死亡? 继续? 退出界面 N Y N

贪吃蛇游戏程序设计

测控技术与仪器专业课程设计题单班级0982011 学生刘某某 课程名称计算机课程设计 课题贪吃蛇游戏程序设计 设计要求 1.学习游戏设计有关知识。 2.设计贪吃蛇游戏程序。 3.调试并修改程序。 4.完成课程设计论文。 课题发给日期2011年6月25日 课程设计完成日期2011年7月09日 指导教师余某某 评语:

贪吃蛇游戏 学生姓名:刘某某班级:0882011 指导老师:余某某 摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。 作为一个完整的程序,必须考虑人机交流与用户体验。游戏的界面不能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。 关键词:贪吃蛇流程图c语言源程序

目录 1 前言 (1) 2 课设内容 (3) 2.1课设目的 (3) 2.2设计功能 (3) 2.3结构设计 (7) 3结论 (11) 参考文献 (15) 附录A (16)

1 前言 C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。 制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。 通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。 C语言课程应注重边学边练,但由于课堂教学和实验的深度和广度有限,练习的深度也受到一定限制。为了弥补这一点,学校开设了本课程设计。它比教学实验复杂一些,涉及的深度广些并更加接近实用。目的是通过课程设计的综合训练,培养我们实际分析问题、编程和动手能力,最终目标是想通过这种形式,帮助我们系统地掌握程序设计的主要内容,更好地完成学业。 这次课程设计的主要特点如下: 1.函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增

C语言贪吃蛇

------------ 大学 C语言程序设计课程设计(论文)题目:贪吃蛇 院(系): 专业班级: 学号: 学生姓名: 指导教师: 教师职称: 起止时间:

课程设计(报告)任务及评语 院(系):教研室: 学号学生姓名专业班级 程序设计 (报告) 题目 贪吃蛇 程序设计(报告)任务 程序设计的任务与要求: (1)掌握C语言编程的基础知识。 (2)较熟练地编写C语言应用程序。 (3)了解C语言的常用标准函数、编程技巧、异常处理。 (5)联系已学过的内容,巩固所学的理论,增强独立工作能力。 (6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 指 导 教 师 评 语 及 成 绩 成绩:指导教师签字: 2011年 1 月 4 日

目录 第1章 C语言课程设计的实训目的与要求 (1) 1.1 C语言课程设计目的 (1) 1.2 C语言课程设计的实验环境 (1) 1.3 C语言课程设计的预备知识 (1) 1.4 C语言课程设计要求 (1) 第2章 C语言课程设计内容 (2) 2.1程序功能介绍 (2) 2.2程序整体设计说明 (2) 2.2.1设计思路 (2) 2.2.2数据结构设计及用法说明 (3) 2.2.4各模块的功能及程序说明 (7) 2.2.5程序结果 (8) 2.3程序源代码及注释 (10) 第3章 C语言课程设计总结 (17) 参考资料.. (20)

贪吃蛇游戏详细设计说明书

详细设计说明书 1 引言 1.1 编写目的 本说明书在概要设计的基础上,对贪吃蛇游戏的各模块、程序、子系统分别进行了实现层面上的要求和说明。软件开发小组的产品实现人员阅读和参考本说明进行代码的编写和测试。 本说明书预期的读者是软件开发小组的产品实现人员。 1.2 背景 说明: 系统名称:贪吃蛇游戏 任务提出者:手机策划人员 开发者:软件开发小组的产品实现人员 用户:NOKIA手机用户 运行该程序系统的计算中心:NOKIA手机芯片 1.3 定义 1.节: 一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。节是蛇身上最小的单位。 2.链表: 用来保存每一段的状态,链表的元素单位是节。且链表的第一个元素表示蛇的头部。 3.坐标系: 以左上角那点为(0,0),向右则x递增,向下则y递增。 1.4 参考资料 张海藩:《软件工程导论》第五版清华大学出版社 肖刚等:《实用软件文档写作》清华大学出版社

2 程序系统的组织结构 2.1每个模块和子程序的名称、标识符: 1Ground类: 1)private int TYPE; 2)public int[][] rocks=new int[Global.WIDTH][Global.HEIGHT]; 3)public void setGround(int type){} 根据不同的Type值将rocks的不同下标的元素设为1,其他元素为0。 4)public boolean isSnakeEatRock(Snake snake){} 判断蛇头的所在的位置在数组rocks中的值是否为1,如果是1,则表示蛇吃 到了石头,返回TRUE,否则返回FALSE。 5)public Point getPoint(){} 产生一组随机数(x,y),是食物的坐标 6)public void drawMe(Graphics g){} 将数组rocks中值为1的元素填充为石头颜色。 2Snake类: 1)public static int x,y; 2)private int oldDirection,newDirection; 用于判断newDirection和oldDirection是否为相反方向,用于选取有效方向。 3)private Point oldTail; 用于判断蛇头是否和蛇身的某个节点的坐标重合,即蛇是否吃到自己。 4)public LinkedList body=new LinkedList(); 5)public void die(){} 设置变量life=FALSE;使控制进程的条件为假,进程结束。 6)public void move(){} 实现蛇身沿着蛇头的轨迹移动 7)public void changeDirection(int direction){} 根据方向键,改变蛇头的x、y的值,即改变方向 8)public void drawMe(Graphics g){}//把属于蛇的格子画出来 9)private class SnakeDriver implements Runnable{}//蛇不停走动 3Food类: 1)public void drawMe(Graphics g){} 根据产生的一组随机坐标,在其坐标处画出食物 4Controller类: 功能:处理按键事件及鼠标点击事件,处理逻辑。根据不同的情况向Snake,Food,Ground发出不同的命令。 实现接口snakeMoved,蛇每移动一步,就要判断一次,蛇是否吃到石头、是否吃到自己,是的话就snake.die()并停止计时;不是则不进行任何操作。如果吃到食物,就要加分、重画食物、蛇身加长。 实现(N)NewGame功能、(E)Exit功能、(R)Resume功能、(L)LowLevel功能、(H)HighLevel功能、(P)Pause功能。 5GamePanel类: 功能:画出Snake,Food,Ground,并实现重新显示

贪吃蛇游戏程序设计

测控技术与仪器专业课程设计题单 班级0982011 学生刘某某 课程名称计算机课程设计 课题贪吃蛇游戏程序设计 设计要求 1.学习游戏设计有关知识。 2.设计贪吃蛇游戏程序。 3.调试并修改程序。 4.完成课程设计论文。 课题发给日期 2011年6月25日 课程设计完成日期 2011年7月09日 指导教师余某某 评语:

贪吃蛇游戏 学生姓名:刘某某班级:0882011 指导老师:余某某 摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。 作为一个完整的程序,必须考虑人机交流与用户体验。游戏的界面不能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。 关键词:贪吃蛇流程图 c语言源程序

目录 1 前言 (1) 2 课设内容 (3) 2.1课设目的 (3) 2.2设计功能 (3) 2.3结构设计 (7) 3结论 (11) 参考文献 (15) 附录A (16)

1 前言 C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。 制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。 通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。 C语言课程应注重边学边练,但由于课堂教学和实验的深度和广度有限,练习的深度也受到一定限制。为了弥补这一点,学校开设了本课程设计。它比教学实验复杂一些,涉及的深度广些并更加接近实用。目的是通过课程设计的综合训练,培养我们实际分析问题、编程和动手能力,最终目标是想通过这种形式,帮助我们系统地掌握程序设计的主要内容,更好地完成学业。 这次课程设计的主要特点如下: 1.函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增

c语言程序贪吃蛇课程设计报告范文

高级语言程序设计 课程设计报告 Experiment Designing reporter 课程名称:高级语言程序设计 英文名称 : C Program Experiment Designing 专业:自动化 111 学号: XXX 姓名: XXX 指导教师: XXX 日期: 2012 年 6月 17日至 2011 年6 月 20 日 山东工商学院信电学院

山东工商学院信电学院自动111班第一组“贪吃蛇课程设计报告“一:课程设计内容 程序功能介绍 贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。 设计思路 我们小组称设计本次课题——贪吃蛇的思路为“贪快速上手贪吃蛇三步曲”: 第一步: 寻找到一个真正可以运行的已用C编好的贪吃蛇。 因为我们毕竟从未看到过用C编游戏的程序,让我们两手一抹黑的开始编写是有一定的困难的,如果我们自己找一个已经设计好的程序,以此为跳板实现我们想要达到的效果,那么肯定是高效的。所以我们组统一决定,去寻找一个可以运行的C编译的贪吃蛇。 第二步: 运行游戏并了解游戏程序。 我们认为,只有你运行并了解一个游戏,才能知道游戏里需要什么样的改进和创新,如果你自己本身就没玩过这个游戏,那么你就是再有技术,你也永远改进和改编不了一个游戏,因为你根本不知道你在干什么。 同样重要的是了解游戏程序。因为只有看懂了程序,才能实现对他的改编,才能游刃有余。 第三步: 寻找模块并分类,而后进行改编。 寻找到你想要改变的游戏内容的控制模块,比如,我想要增加一堵墙,那 第一页共十六页 自动化 111

C语言贪吃蛇实验报告

C语言程序设计报告 题目:贪吃蛇游戏的程序设计 院系:西语学院英语教育6班 : 学号:

1.1题目: 设计贪吃蛇小游戏 1.2题目的要求: 玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁游戏结束。 1.3设计的步骤: ●分析设计题目的要求,即需求分析。 ●总体设计,确定所需模块及模块间调用关系,定义系统中使用的数据类型。 ●详细设计,确定每个模块的功能,绘制主要函数的流程图。 ●编写程序代码,调试程序使其能正确运行。要求书写规范,注意采用缩进格式。函数 名、变量名要见文晓意,注释要简而不失、详而不缀。设计完成的软件要便于操作和使用。 ●程序测试,发现程序中存在的错误并改正。 ●完成报告。 2详细设计说明 2.1课程设计的要求: 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 ●收集资料,分析课题,分解问题,形成总体设计思路;

●对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具 体介绍; ●上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能 正常运行; ●完成课程设计报告。 2.2程序的功能: 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。 2.3课程设计的思想: 程序关键在于表示蛇的图形及蛇的移动。用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇运动方向相反的方向键,此游戏就会暂停,再按想前的方向键才能继续游戏,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画一个圆点和覆盖原来的圆点。为了便于理解,定义两个结构体:食物与蛇。

基于labview的贪吃蛇游戏程序设计

成绩评定表

课程设计任务书

目录 1 目的及基本要求 0 本程序是基于常看到的一款小游戏贪吃蛇而设计的,即有一条小 蛇不停地在屏幕上游走,吃各个方向上出现的苹果(姑且称它为 “苹果”),越吃越长,只要蛇头碰到屏幕四壁或者碰到自己的 身子,游戏就立刻结束。本程序基于传统贪吃蛇游戏的特点利用LabVIEW制作的一款完整的迷你贪吃蛇游戏。 0 4.1 运行结果 (8)

1 目的及基本要求 本程序是基于常看到的一款小游戏贪吃蛇而设计的,即有一条小蛇不停地在屏幕上游走,吃各个方向上出现的苹果(姑且称它为“苹果”),越吃越长,只要蛇头碰到屏幕四壁或者碰到自己的身子,游戏就立刻结束。本程序基于传统贪吃蛇游戏的特点利用LabVIEW制作的一款完整的迷你贪吃蛇游戏。 熟悉LabVIEW开发环境,掌握基于LabVIEW的虚拟仪器原理、设计方法和实现技巧,运用专业课程中的基本理论和实践知识,采用LabVIEW开发工具,实现贪吃蛇游戏的设计和仿真。要求通过本课程设计使学生熟悉LabVIEW开发环境,掌握基于LabVIEW的虚拟仪器设计原理、设计方法和实现技巧,使学生掌握通信系统设计和仿真工具,为毕业设计做准备,为将来的学习及今后从事科学研究、工程技术工作打下较坚实的基础。 2 贪吃蛇游戏设计原理 贪吃蛇游戏大体上可分为以下几个部分: 1) 控制部分就是通过输入输出来控制蛇的运动 2) 逻辑部分进行判断蛇吃了没有是否撞墙同时把蛇的长度增加一节还要实现分数的计算 3) 图象显示部分就是将游戏显示出来 本程序的主要实现如下功能:1.小蛇在屏幕上不停的游走;2.用键盘方向键可控制小蛇的移动方向;3.吃过一个苹果后小蛇长度增加并随机产生另一个蛋; 4.小蛇碰到四壁或者碰到自己的身体时游戏结束并给出得分和提示是否继续; 5.游戏可以有多种难度选择等 3 贪吃蛇游戏设计与仿真 3.1 前面板设计 采用LabVIEW中提供的“Express XY图”作为游戏界面,显示蛇和苹果,这样就可以通过方向键来移动小蛇到想要去的地方。对XY图的属性做如下修改:

贪吃蛇游戏课程设计实验报告

辽宁科技大学课程设计说明书 设计题目:基于C#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 2015年12月12日

目录 一、概述 (1) 1、用C#实现该设计的方法 (1) 2、贪吃蛇游戏说明 (1) 二、实验目的及设计要求 (1) 1、实验目的 (1) 2、实验要求 (2) 三、课程设计具体实现 (2) 1、概要设计 (2) 1.1、设计思想 (2) 1.2、主模块实现 (2) 1.3、主函数流程图 (4) 2、详细设计 (5) 2.1、设计思想 (5) 2.2、具体模块实现: (5) 四、调试过程及运行结果 (10) 1、调试过程 (10) 2、实验结果 (11) 五、实验心得 (12) 六、参考资料 (13) 七、附录:源代码 (13)

一、概述 1、用C#实现该设计的方法 首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图。流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。此外,流程图应容易转换成代码。 根据流程图编写好代码后在WindowsXP操作系统,https://www.doczj.com/doc/d612745383.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

相关主题
文本预览
相关文档 最新文档