当前位置:文档之家› Atmega16单片机贪吃蛇小游戏

Atmega16单片机贪吃蛇小游戏

Atmega16单片机贪吃蛇小游戏
Atmega16单片机贪吃蛇小游戏

Atmega16单片机贪吃蛇小游戏

程序原创,好用!

缺少财富值的可以私信我,我发给你。代码中有qq

代码基于Atmega16 芯片,晶振采用8M,LCD12864采用并行通信,四个独立按键,以下是相关的原理图。

控制贪吃蛇前进的核心思路是:点亮头部,熄灭尾部。

关于蛇身子的点可以采用一个数组来存储。把数组变成一个循环队列,前进头部数据入队,尾部数据出队,这种方法控制起来简单一些,但是比较消耗内存(嗯,有点奢侈)单片机RAM仅1k,蛇的最大长度500左右。

另外我们可以只存下蛇身子的拐点,记录下拐点的方向,就可以得出蛇身子位置信息。(本代码采用此种记录方式)。

现在举例说明一下数据的值,如图所示表示一条蛇,2表示蛇头,1表示蛇尾

structsnake_type //定义一个砖块的结构体每次只写八位数据

{

unsigned char x_head; //头x坐标0~63

unsigned char y_head; //头y坐标0~63(为偶数)

unsigned char direc_head; //头前进的方向

unsigned char x_end; //尾x坐标0~63

unsigned char y_end; //尾y坐标0~63

unsigned char direc_end; //尾前进的方向

} snake;

则数据值如下:

snake.x_head = 1; snake.y_head = 4 ;snake.direc_head = 2;

Snake.x_end = 2; snake.y_end = 0;snake.direc_end = 1;

三大重要函数,这三个函数与硬件打交道,为上层游戏编写提供了便利。

snake_data_add()点亮两个像素点

snake_data_dele()熄灭两个像素点

snake_read_data()读取像素点是否已经点亮

简单演示一下效果

VID_20180304_123454.mp4

行了,不多说了,上干货吧!

******************************************************************************* ***********************************************************

Main.c

******************************************************************************* ***********************************************************

#include

#include

#define uint unsigned int

#define uchar unsigned char

#include"12864_bing_xing.h"

#include"game.h"

#include"key.h"

voiddelay_nms(uintnms)

{

uinti,j;

for(i=0;i

for(j=0;j<1141;j++);

}

voidscan_deal(void)

{

//返回值:0 不可移动

// 1 可以移动

// 2 吃到苹果

switch(move_forward())

{

case 0:

show_picture(game_over); //死亡,游戏结束

break;

case 2:

//可以在此嵌入计分数据代码并减小times的值可以提高难度的功能

appel_add(suiji_data); //产生苹果,游戏继续

break;

default:

break;

}

}

void main(void)

{

uchari=0,b=8;

lcd_init();

lcd_delay_nms(10);

display(); //画空图

snake_init();

snake_data_add(0,0);

snake_data_dele(0,0);

while(1)

{

snake_move_scan(100); //多次扫描按键,

scan_deal();

}

}

******************************************************************************* ***********************************************************

12864_bing_xing.h

******************************************************************************* ***********************************************************

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

/* Name: LCD12864(St7920/St7921) */ /*

*/

/* Designed by : Date:2016/5/9 */

/* 开发环境:ICCAVR */ /* QQ:1460467003 飘*/

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

#define set_bit(register1,bits) (register1|=(1<<(bits)))

#define clr_bit(register1,bits) (register1&=~(1<<(bits)))

#define get_bit(register1,bits) (register1&=(1<<(bits)))

#define lcd_clr 0x01

#define lcd_rs_hset_bit(PORTA,0)

#define lcd_rs_lclr_bit(PORTA,0)

#define lcd_rw_hset_bit(PORTA,1)

#define lcd_rw_lclr_bit(PORTA,1)

#define lcd_en_hset_bit(PORTA,2)

#define lcd_en_lclr_bit(PORTA,2)

#define lcd_data_i PINB

#define lcd_data_o PORTB

#include"picture_library.h"

voidlcd_delay_nms(uintnms)

{

uinti,j;

for(i=0;i

for(j=0;j<113;j++); //更改数值,增加稳定性

}

//读状态

voidlcd_check_busy(void)

{

DDRB=0X00;

lcd_data_o=0xFF;

//lcd_delay_nms(1);

lcd_rs_l;

lcd_rw_h;

lcd_en_l;

lcd_en_h;

while (lcd_data_i&0X80); //检测忙信号

lcd_en_l;

DDRB=0XFF;

lcd_data_o=0xff;

// lcd_delay_nms(1);

}

// 1表示数据0表示命令

void lcd_write_data(ucharon_data,uchar data) //发送指令或数据{

lcd_check_busy();

if(on_data)

lcd_rs_h;

else

lcd_rs_l;

lcd_rw_l;

lcd_data_o=data;

lcd_delay_nms(2);//等待当前工作完成

lcd_en_h;

lcd_delay_nms(2);//等待当前工作完成

lcd_en_l;

}

//读数据

ucharlcd_read_data(void)

{

uchar data;

lcd_check_busy();

lcd_data_o=0xFF;

DDRB=0X00;

lcd_rs_h;

lcd_rw_h;

lcd_en_h;

lcd_delay_nms(1);

data=lcd_data_i;

lcd_en_l;

return(data);

}

/*

以屏幕的左上角为原点,X 左——右增大0——7 两个字节为单位

Y 上——下增大0——63 位为单位

*/

voidlcd_set_xy(ucharx,uchar y)

{

if(y>31)

{

lcd_write_data(0,0x80+y-32); //y 轴

lcd_write_data(0,0x88+x); //x 轴

}

else

{

lcd_write_data(0,0x80+y); //y 轴

lcd_write_data(0,0x80+x); //x 轴

}

}

void lcd_init(void) //LCM初始化

{

DDRA|=0X7; PORTA|=0X07;

DDRB=0XFF; PORTB=0XFF;

set_bit(DDRC,0); set_bit(PORTC,0); //并行模式

lcd_write_data(0,0x30); //八位数据端口,进入基本指令集

lcd_write_data(0,0x01); //显示清屏

lcd_write_data(0,0x06); //光标自增,画面不动

lcd_write_data(0,0x0c); //整体显示,游标关,不反白

}

//写内存,为空

void display(void) //图形方式12864显示字模逐行式顺向

{

unsigned char i,j;

lcd_write_data(0,0x34); //图形方式

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

{

lcd_write_data(0,0x80+i); //Y

lcd_write_data(0,0x80); //X

for(j=0;j<16;j++)

{

lcd_write_data(1,0x00);

}

}

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

{

lcd_write_data(0,0x80+i);//Y

lcd_write_data(0,0x88); //X for(j=0;j<16;j++)

{

lcd_write_data(1,0x00);

}

}

//lcd_write_data(0,0x80+22);

//lcd_write_data(0,0x88);

//for(j=0;j<16;j++)

// lcd_write_data(1,0xff);

lcd_write_data(0,0x36);

}

//显示图片,逐行式顺向

voidshow_picture(const unsigned char tu[]) {

unsigned char i,j; uint k=0;

lcd_write_data(0,0x34); //图形方式

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

{

lcd_write_data(0,0x80+i); //Y

lcd_write_data(0,0x80); //X for(j=0;j<16;j++)

{

lcd_write_data(1,tu[k]);

k++;

}

}

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

{

lcd_write_data(0,0x80+i);//Y

lcd_write_data(0,0x88); //X for(j=0;j<16;j++)

{

lcd_write_data(1,tu[k]);

k++;

}

}

lcd_write_data(0,0x36);

}

/*

void LCDClear(void) //清屏

{

lcd_write_data(0,0x01); //显示清屏

}

void LCDFlash(void) //闪烁效果

{

lcd_write_data(0,0x08); //显示清屏

lcd_delay_nms(4);

lcd_write_data(0,0x0c); // 显示开及光标设置

lcd_delay_nms(4);

lcd_write_data(0,0x08); //显示清屏

lcd_delay_nms(4);

lcd_write_data(0,0x0c); // 显示开及光标设置

lcd_delay_nms(4);

lcd_write_data(0,0x08); //显示清屏

lcd_delay_nms(4);

}

voidlcd_draw_jpg(void)

{

lcd_write_data(0,0x34); //绘图模式设置

lcd_set_xy(0,34); //设置坐标x y

lcd_write_data(1,0xff); //高八位

lcd_write_data(1,0xf1); //低八位

lcd_write_data(0,0x36);

}

*/

/*

并行通信开始信号代码发送数据:0XFA

发送命令:0XF8

接收数据:0XFE

指令代码进入基本指令集0x30

清屏0x01

光标右移0x06

显示打开游标关游标位置关0x0c

进入扩充指令集设定状态、关闭显示0X34

开启绘图显示0x36

配置lcd必须先进入相关的指令集

设置地址先垂直后水平读写都会改变AC的值

显示图片之前必须对对所有的GDRAM赋值,否则乱码

据网友说,读取数据只支持并行通信,试了多次,感觉网友说的没有错

读取数据之前必须空读一次

*/

******************************************************************************* ***********************************************************

game.h

******************************************************************************* ***********************************************************

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

// Name: 游戏主函数*/ */ /* Designed by : Date:2016/5/25 */ /* 开发环境:ICCAVR */ /* QQ:1460467003 飘*/

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

//坐标点设定方块的左上方点

//方向参考屏幕正放

structsnake_type //定义一个砖块的结构体每次只写八位数据

{

unsigned char x_head; //头x坐标0~63

unsigned char y_head; //头y坐标0~63

unsigned char direc_head; //头前进的方向

unsigned char x_end; //尾x坐标0~63

unsigned char y_end; //尾y坐标0~63

unsigned char direc_end; //尾前进的方向

} snake;

//随机数据的缓存指针

unsignedintsuiji_num=0;

#define DOT_NUMBER_MAX 40

//x 0~63 两位为单位y(偶数)0~63

//点亮坐标对应的像素点

voidsnake_data_add(ucharx,uchar y)

{

uchardata_h,data_l;

switch(x & 0x07)

{

case 0:

lcd_set_xy(x >> 3, y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h|0xc0);

//lcd_write_data(1,data_l|(data<<6)); break;

}

case 1:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h|0x30);

//lcd_write_data(1,data_l|(data<<6)); break;

}

case 2:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h|0x0c);

//lcd_write_data(1,data_l|(data<<6)); break;

}

case 3:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h|0x03);

//lcd_write_data(1,data_l|(data<<6)); break;

}

case 4:

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l|0xc0); break;

}

case 5:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l|0x30); break;

}

case 6:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l|0x0c); break;

}

case 7:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l|0x03); break;

}

default :

}

}

//x 0~63 两位为单位y(偶数)0~63

//熄灭坐标对应的像素点

voidsnake_data_dele(ucharx,uchar y)

{

uchardata_h,data_l;

switch(x & 0x07)

{

case 0:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h&0x3f);

//lcd_write_data(1,data_l&(~(data<<6))); break;

}

case 1:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h&0xcf);

//lcd_write_data(1,data_l&(~(data<<6))); break;

}

case 2:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h&0xf3);

//lcd_write_data(1,data_l&(~(data<<6))); break;

}

case 3:

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

//data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h&0xfc);

//lcd_write_data(1,data_l&(~(data<<6))); break;

}

case 4:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l&0x3f);

break;

}

case 5:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l&0xcf);

break;

}

case 6:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

data_l=lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l&0xf3);

break;

}

case 7:

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h = lcd_read_data();

data_l = lcd_read_data();

lcd_set_xy(x >> 3,y);

lcd_write_data(1,data_h);

lcd_write_data(1,data_l&0xfc);

break;

}

default :

break;

}

}

//x 0~63 两位为单位y(偶数)0~63 //读取坐标对应的像素点的值数据长度2 ucharsnake_read_data(ucharx,uchar y) {

uchardata_h,data_l;

switch(x & 0x07)

{

case 0:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

return (data_h>>6);

break;

}

case 1:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

return ((data_h>>4)&0x03);

break;

}

case 2:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data();

return ((data_h>>2)&0x03);

break;

case 3:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data(); return (data_h&0x03); break;

}

case 4:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data(); data_l=lcd_read_data(); return (data_l>>6); break;

}

case 5:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data(); data_l=lcd_read_data(); return ((data_l>>4)&0x03); break;

}

case 6:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data(); data_l=lcd_read_data(); return ((data_l>>2)&0x03); break;

}

case 7:

{

lcd_set_xy(x >> 3,y);

lcd_read_data();

data_h=lcd_read_data(); data_l=lcd_read_data(); return (data_l&0x03); break;

default :

return 0;

break;

}

}

//判断是否为障碍物返回值:0无数据// 1 苹果// 2 障碍物ucharcheck_down(ucharx,uchar y)

{

if(snake_read_data(x,y+2)==0)

return 0;

else

{

if(x>1&&snake_read_data(x-1,y+2)==3) return 2;

if(x<63&&snake_read_data(x+1,y+2)==3) return 2;

if(y<60&&snake_read_data(x,y+4)==3) return 2;

return 1;

}

}

//判断是否为障碍物返回值:0无数据// 1 苹果// 2 障碍物ucharcheck_up(ucharx,uchar y)

{

if(snake_read_data(x,y-2)==0)

return 0;

else

{

if(x>1&&snake_read_data(x-1,y-2)==3) return 2;

if(x<63&&snake_read_data(x+1,y-2)==3) return 2;

if(y>3&&snake_read_data(x,y-4)==3) return 2;

return 1;

}

}

//判断是否为障碍物返回值:0无数据

// 1 苹果

// 2 障碍物

ucharcheck_right(ucharx,uchar y)

{

if(snake_read_data(x+1,y)==0)

return 0;

else

{

if(y>1&&snake_read_data(x+1,y-2)==3)

return 2;

if(y<62&&snake_read_data(x+1,y+2)==3)

return 2;

if(x<62&&snake_read_data(x+2,y)==3)

return 2;

return 1;

}

}

//判断是否为障碍物返回值:0无数据

// 1 苹果

// 2 障碍物

ucharcheck_left(ucharx,uchar y)

{

if(snake_read_data(x-1,y)==0)

return 0;

else

{

if(y<62 &&snake_read_data(x-1,y+2)==3)

return 2;

if(y>1&&snake_read_data(x-1,y-2)==3)

return 2;

if(x>1&&snake_read_data(x-2,y)==3)

return 2;

return 1;

}

}

//记录转折点的位置及转折方向

//方向值0,1,2,3 表示的方向为上左下右

struct

{

unsigned char xy[DOT_NUMBER_MAX][4];//反指向正指向x坐标y坐标

signed char num_start; //指向蛇尾要更新的位置num_start与num_end一致时说明没有没有了转折点

signed char num_end; //指向下次新的转折点存储的位置

unsigned char dir; //值0:反指向,数据递减更新1:正指向,数据递增更

} p;

//蛇初始化

voidsnake_init(void)

{

uchari;

p.num_start = 0;

p.num_end = 0;

p.dir = 1; //正向存储

for(i=0; i<3; i++) //画蛇

{

snake_data_add(i,62);

snake_data_add(i,63);

}

snake.x_head=2;

snake.y_head=62; //x轴0~63 //y轴snake.direc_head=3;

snake.x_end=0;

snake.y_end=62;

snake.direc_end=3;

snake_data_add(10,62);//增加苹果snake_data_add(10,63);

}

//求两个数的差的绝对值

uchardiat(uchara,uchar b)

{

if(a < b)

return b - a;

else

return a - b;

}

//交换数据

voidswap_data(uchar *p1, uchar *p2) {

uchar data;

data = *p1;

*p1 = *p2;

*p2 = data;

}

//指针自加运算,越界处理

voiddata_add(signed char *p)

{

++*p;

if(*p > DOT_NUMBER_MAX - 1)

*p = 0;

}

//指针自减运算,越界处理

voiddata_dec(signed char *p)

{

--*p;

if(*p < 0)

*p = DOT_NUMBER_MAX - 1;

}

//头尾互换

void head_end_swap(void)//头尾互换

{

swap_data(&snake.x_head, &snake.x_end); //互换头尾的x

swap_data(&snake.y_head, &snake.y_end); //互换头尾的y

swap_data(&snake.direc_head, &snake.direc_end); //互换头尾的方向

snake.direc_head=(snake.direc_head + 2) & 0x03; //头方向取反snake.direc_end=(snake.direc_end + 2) & 0x03; //尾方向取反

}

//添加一个转折点

voidp_add(uchardir)

{

if(p.dir) //正向移动

{

//加载数据

p.xy[p.num_end][0] = (snake.direc_head + 2) & 0x03; //反指向

p.xy[p.num_end][1] = dir; //正指向

p.xy[p.num_end][2] = snake.x_head; //加载x坐标

p.xy[p.num_end][3] = snake.y_head; //加载y坐标

//更新缓存指针

data_add(&p.num_end);

}

else //反向移动

{

//加载数据

p.xy[p.num_start][0] = dir; //反方向

p.xy[p.num_start][1] = (snake.direc_head + 2) & 0x03; //正方向

p.xy[p.num_start][2] = snake.x_head; //加载x坐标

p.xy[p.num_start][3] = snake.y_head; //加载y坐标

//更新缓存指针

data_dec(&p.num_start);

}

}

//转折点顺序取反

voidp_inverse(void)

{

//更新缓存指针

if(p.dir) //之前正向移动

{

data_dec(&p.num_start);

data_dec(&p.num_end);

}

else

{

data_add(&p.num_start);

data_add(&p.num_end);

}

p.dir ^= 0x01; //取反

}

//输入:按键值 3 4 5 6

//表示的方向为上左下右

//改变方向,不改变坐标

ucharsnake_head_change(uchar key)

{

uchar temp;

temp = diat(key, snake.direc_head); //获得方向差0 同向 1 左右拐 2 反向switch(temp)

{

//同向

case 0:

return 1;

//左转或右转

case 1:

p_add(key);//把当前数据加载到拐点缓存区

snake.direc_head = key; //更新蛇头方向

return 0;

//反方向

贪吃蛇小游戏需求分析

“贪吃蛇”游戏需求分析 一、需求分析: 贪吃蛇游戏是一个小型益智游戏,它可以锻炼人们的反应能力,尤其是在开发人的智力方面,很受人们的欢迎。本组该次小游戏程序设计包含二维数组、鼠标操作及图形化函数等方面知识。 具体需求概要如下: 1.初始化游戏界面为600*600大小,并于坐标为(250,250) 处显示游戏名称“贪吃蛇”,等待鼠标响应以开始游戏; 2.在程序中用格子初始蛇长及蛇的位置,用W、S、A、D控制方 向为上下左右进行游戏。游戏过程中,每吃到一次食物用For 循环使蛇移动的speed增加,分数加10,蛇长加一格; 3.蛇头咬到蛇尾or蛇头接触活动区域外围则Game over,显示 累计分数,游戏结束。 二、运行环境: 该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:操作系统:windows xp 软件环境:安装VC++6。

三、设计概要: 1.初始化模块:屏幕初始化,屏幕初始化用于显示游戏信息“贪吃蛇”; 2.游戏界面模块:设计绿色的边框,边框内用黑色无框格子填充作为游戏活动区域; 3.游戏运行模块:运用函数控制蛇长及食物的关系,并使用键盘控制方向; 4.判断模块:头咬到尾或头接触活动区域外围,则游戏结束,显示累计分数。 四、详细设计及实现: 1.流程图(函数调用关系图)

2.预处理 #include<> #include<> #include<> #include<> #include<> #include<> 3.数据结构 IMAGE wal; MOUSEMSG m; typedef struct { int x[40]; int y[40]; int derection; int food; int foodx; int foody; int size; } snake;

贪吃蛇游戏开发设计

广州商学院 课程论文题目:贪吃蛇游戏开发设计 课程名称面对对象程序设计 考查学期2016/2017学年第 1学期姓名陈思明李权康 学号201506110047 201506110044 专业计算机科学与技术 指导教师包汉宗

移植性和平台无关性等优点,得到了广泛地应用,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的 接受和认可。 “贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,四个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Java技术和熟悉 软件开发流程的目的。 关键词:贪吃蛇,Java,游戏

一、可行性分析 1.1经济可行性 游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件的水平的提高。游戏开发新技术层出不穷,经典游戏比比皆是,游戏这个名称一直存在于每个人的日常生活中。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色.而从技术方面来看,现在的java技术也融入了手机中。这些都为开发的这款贪吃蛇游戏提供了条件。 1.2技术可行性 本次设计我将主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。 由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。

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#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 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/8b11919228.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

贪吃蛇小游戏实验报告[

软件设计报告 设计题目:贪吃蛇 学院:华北电力大学科技学院 专业班级:软件10K1 学生姓名:张飞 学生学号:101909020122 指导教师:乔玲玲 提交时间: 成绩: - 0 -

目录 一.需求分析 二.概要设计 三.详细设计 四.心得体会 一.需求分析 1.1关于题目 1.1.1题目要求 利用Microsoft Visual C++制作一个贪吃蛇的小游戏,要求: (1)应用MFC单文档制作 (2)能够记录游戏成绩 (3)可根据玩家要求设置游戏速度(级别):初级,中级,高级 (4)可以根据个人喜好更换背景图片,食物图片,障碍物图片,结束图片等 1.1.2选题背景 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。 1.2关于编译软件 本程序采用Microsoft Visual C++6.0的英文版本进行编译。VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。 - 1 -

- 2 - 1.3关于兼容性 本程序经过调试,可以在XP 系统下编译运行,也可以在Vista 下运行,界面稍有不同,但不影响运行结果。 二. 概要设计 2.1软件主要功能设计 2.1.1程序结构 根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,设置游戏级别(速度),设置图片等。具体的程序结构如下面的图1-1所示。 图2-1 贪吃蛇结构图 2.1.2程序流程 根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物。 贪吃蛇 游 戏开始 游戏设置 游戏结束 开始 初级 中级 高级 结束

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 公司开发的两线式

《贪吃蛇游戏课程设计》报告资料整理

贪吃蛇游戏程序设计 一、课程设计任务 贪吃蛇小游戏程序设计 二、设计要求 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 (1).收集资料,分析课题,分解问题,形成总体设计思路; (2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍; (3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行; (4).完成课程设计报告,并进行答辩 三、需求分析 3.1、程序功能 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

3.2、设计思想 程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。

3.3、流程图

四、设计的具体实现 (1)函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用 #define N 200 #define M 200 #include"graphics.h" #include #include #include #include #include #include #include #define LEFT 97//A #define RIGHT 100//D #define DOWN 115//S #define UP 119//W #define Esc 0x011b int i,key; int score=0; int gamespeed=250;//游戏速度可根据实际情况自行调整 struct Food { int x;//食物的横坐标 int y;//食物的纵坐标 int yes;//判断是否要出现食物的变量 }food;//食物的结构体 struct Snake { int x[M]; int y[M]; int node;//蛇的节数 int direction;//蛇的移动方向 int life;//蛇的生命,0表示活着,1表示死亡 }snake; void Init();//图形驱动

汇编语言编写贪吃蛇游戏

DA TA SEGMENT dw 0,0 snk db 1 blk db 32 food db 3 tal1 db 4 tal2 db 2 adrs db 5 len db ? pst db ? addrs dw ? frow db ? fcol db ? hwrt db ? gmov db 'game over press r to restart press q to quit $' score1 db 'score :$' score2 db ? score0 db 1 zero db 48 writer db 'Developer: Geniusdot $' email db 'e-mail: pang@https://www.doczj.com/doc/8b11919228.html,$' msg1 db 'The way to play the game:$' way db ' press w to up ,press s to down,press a to left,press d to right$' msg db 'Press any key(except a,s,d,w) to start$' DA TA ENDS STACK SEGMENT stack db 200 dup(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK start: mov ax,data mov ds,ax mov ax,0 mov es,ax mov frow,10 mov fcol,6 mov dh,10 mov dl,26 mov ah,2

int 10h mov ah,9 lea dx,msg1 int 21h mov dh,11 mov dl,7 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,way int 21h mov dh,12 mov dl,20 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,msg int 21h mov ah,0 int 16h mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10h mov dh,0 mov dl,0 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,score1 int 21h mov dl,15 mov ah,2 mov bh,0 int 10h

贪吃蛇游戏

贪吃蛇游戏 1.实验目的……………………………………………………………… 2.实验任务与要求……………………………………………………… 2.1实验内容……………………………………………………………… 2.2实验要求……………………………………………………………… 2.3实验环境……………………………………………………………… 3.设计方案………………………………………………………………… 3.1程序功能……………………………………………………………… 3.2设计思想……………………………………………………………… 3.3设计总体流程图……………………………………………………… 3.4设计的具体实现……………………………………………………… 4.程序测试………………………………………………………………… 4.1测试内容与结果……………………………………………………… 5.实验总结……………………………………………………………… 1.实验目的: ●复习、巩固VC6.0的基础知识,进一步加深对VC6.0技术的理解和 掌握; ●课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课 本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际 问题的能力。 ●培养学生在项目开发中团队合作精神、创新意识及能力 2.实验任务与要求 2.1 实验内容 贪吃蛇游戏开发,首先它可以为大家提供一种当前比较流行的休闲小游戏。贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着很多人,它的制作方法对于很多同学而言都是很神秘的。所以我们希望通过这学期所学知识把它剖析开来,真真正正的了解它的本质和精髓。在这次学习中我们将从实践和实际的项目

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

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

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 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

贪吃蛇小游戏源代码

#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;

贪吃蛇游戏报告书

青岛大学软件技术学院交互式游戏设计实践实训题目名称贪吃蛇 姓名 专业数字媒体艺术 班级 10级3班 指导教师解新峰 2014 年 1 月 14 日 1

目录 第一章引言 (3) 1.1选题背景 (3) 1.2项目意义 (3) 1.3开发技术 (3) 1.3.1 Java语言简介 (3) 1.3.3 Eclipse开发环境 (3) 第二章贪吃蛇游戏概述 (5) 2.1游戏分析 (5) 2.1.1 游戏规则 (5) 2.1.2 游戏玩法 (5) 2.2算法分析 (5) 2.3架构分析 (5) 第三章贪吃蛇游戏的详细设计 (7) 3.1游戏总体结构设计 (7) 3.2 游戏运行图 (10) 小结 (13) 参考文献 (13)

第一章引言 1.1选题背景 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。我希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。 1.2项目意义 游戏在设计方面应该本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,应始终坚持清晰明了,在性能方面应能够实现效率高,不易出错等优点。游戏主界面应该力求美观,赏心悦目。游戏控制模块应做到易懂、易操作,而且准确率高,不易出错。 1.3开发技术 1.3.1 Java语言简介 Java是一种简单易用的编程语言,它采用了一种虚拟机作为中间层来屏蔽平台差异,能够实现跨平台运行。Java支持面向对象编程,有封装、继承、多态的特性,它还支持多线程,实现多个程序流程同时执行,完成不同任务。 1.3.2 Java语言的开发工具包JDK JDK(Java Development Kit)是Java语言的开发工具包,工具包里除了包含Java语言编译器、调试器以及演示程序以外,一般还会包含Java运行环境(Java Runtime Environment,JRE)。JRE是某一平台运行Java程序的软件环境,包括虚拟机(JVM)和核心类库等。 1.3.3 Eclipse开发环境 Eclipse是一个开放源代码的、基于Java的可扩展开发平台,是目前非常流行的跨平台的自由集成开发环境(IDE)。最初主要用于Java语言开发,但是目前也有人通过插件使其作为其他编程语言(如C++、PHP)的开发工具。Eclipse本身也只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 Eclipse本身核心非常小,其设计思想是“一切皆为插件”。其他功能都是基于插件的形式与Eclipse无缝结合,协同工作,如Eclipse的图形API、多国语言包等。在Eclipse

贪吃蛇游戏程序设计

测控技术与仪器专业课程设计题单班级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.函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增

游戏活动 《贪吃蛇》

游戏活动《贪吃蛇》 一.活动目标 1.通过观看视频和教师的引导理解游戏规则。 2.能合理控制速度,协调团队队形,寻找获胜诀窍 3.注意保护队员安全,感受集体游戏的快乐。 二.活动准备 热身操音乐;《贪吃蛇大作战》背景音乐;“蛇尾巴”若干;幼儿已经认识并初步了解《贪吃蛇大作战》游戏 三.活动过程 1.教师整队带操,进行热身运动。 (头部、肩部、腰部、腿部、踝关节) 2.明确和回顾游戏规则。 (1)选择两个幼儿当“蛇头”,并让“蛇头”自主选两个人当“身体” 和“尾巴”。 (2)教师引导幼儿回顾规则,提问:贪吃蛇游戏里都有些什么呢?分 别要怎么做?是乱七八糟断开的小蛇还是完整的连接在一起的小蛇呢?是移动的食物还是固定的食物呢? 3.分好站位后游戏开始,幼儿在游戏中感受进一步理解规则。

(1)教师:小朋友请注意,当老师吹口哨的时候,你们就要马上停止 所有的活动,听明白了吗? (2)整理好队形、站位,第一轮游戏。(开始后教师巡回指导) (比一比谁更长后)小结:小朋友们,贪吃蛇游戏好不好玩呢?现在有些问题是需要我们所有的小朋友都一起来想办法帮忙解决的,如果“蛇头”在吃食物的时候没有用额头碰“食物”的额头,那么他这次吃食物的行为成功了没有?另外一个问题,刚才在游戏中,出现了小蛇断开情况的请举手,为什么有的小蛇会断开呢?最后,让我们定一个新的规则,断开的小蛇马上全部散开,重新来当“食物”。 4.第二轮游戏,熟悉游戏规则。 (1)教师:在刚才的第一轮游戏中,我相信大部分小朋友们已经懂得 我们的游戏规则了,现在,我要出几个问题考考你们,你们只要在听到“Yes or No?”的时候回答“Yes”或者“No”就可以了,准备好了吗? (2)入场站位:首先有请我们的食物选择自己喜欢的位置站好,再请 我们的小贪吃蛇在起点等待口令。 (3)进行第二轮游戏。(开始后教师巡回指导) (比一比谁更长后)小结:在刚才的游戏中你们觉得有什么问题吗?(若幼儿没有发现问题而教师发现了问题,则指出来并引导幼儿想解决的办法)

C语言贪吃蛇实验报告

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

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

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

贪吃蛇游戏程序设计

测控技术与仪器专业课程设计题单 班级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.函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增

java版贪吃蛇小游戏

辅助类 Coordinate.java 复制代码 package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other.x && y == other.y) { return true; }

return false; } @Override public String toString() { return "Coordinate: [" + x + "," + y + "]"; } } 复制代码 接口Direction 复制代码 package com.nn.entity; public interface Direction { public class Dir{ public static final int UP = 1; public static final int DOWN = 2; public static final int LEFT = 3;

public static final int RIGHT = 4; } } 复制代码 实体类Snake.java 复制代码 package com.nn.entity; import java.util.ArrayList; import com.nn.entity.Direction.Dir; import com.nn.util.Coordinate; public class Snake{ //小方块x坐标 private int x; //小方块y坐标

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