&&国之画&&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!贪吃蛇游戏&C语言程序设计
好多图挂了 看我csdn博客吧
《计算机程序设计》课程设计报告
课 题 名 称&&&&&贪吃蛇游戏&&&&&&&&&&
级&&&&&&&软件1班
& neolone & &
1 需求分析
【阐述课程设计应该完成的功能】
使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。
2 系统分析和设计
2.1 数据结构的设计和选择的理由
本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。
2.1.1&从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例:
struct Point {
&&& int x,
struct Point nodes[MAX_LENGTH];&
//蛇身数组,MAX_LENGTH为最大蛇长
贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:
1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用
运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。
3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用表示)
根据上面的情况,我们可以设计蛇的数据结构如下:
struct Snake {
&& struct Point
nodes[MAX_LENGTH];&
//蛇身数组,保存每节蛇身的坐标。MAX_LENGTH为最大蛇长
//当前蛇长
//蛇头运动方向
//蛇活的,还是已经死了?
2.1.2&关于食物,有两个属性:
1. 坐标位置
2. 状态:存在,或被吃。
故我们用以下结构表示:
struct Food {
&&& struct Point
& //食物的位置
&&&&&&&&&&&&
//存在?还是被吃?
2.2 系统模块划分和模块结构
void main() {
init();&&&&&&&&&&&&&&&&&&&&&&
l=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&
while(l)&&&&&&&&&&&&&&&&&&&&&&&&&
select();&&&&&&&&&&&&&&&&&&&&&&
gamePlay();&&&&&&&&&&&&&&&&&&&
close();&&&&&&&&&&&&&&&&&&&&&&&&&&
2.3 流程图
&
TITLE="贪吃蛇游戏&C语言程序设计" />
2.4 数据类型、全局变量和函数说明
2.4.1数据类型
struct Point
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
y;&&&&&&&&&
struct Snake
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
structPoint
nodes[MAX_LENGTH];&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
struct Food
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
structPoint
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2.4.2全局变量
Score&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
left,top,right,bottom&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\游戏区域范围
lastx,lasty&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\用来保存最后一节蛇的位置
keyCode&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\用来保存按下的键
2.4.3函数说明
init(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\初始化程序,给一些初始值赋值
gamePlay(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\游戏主循环
close(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\关闭游戏
drawWall(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
createFood(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\创造一个食物
drawFood(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\画出食物
drawSnake(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
drawScore(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\画出分数
touchWall(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\判断是否碰到墙
touchSelf(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\判断是否碰到自己
gameOver(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& \\游戏结束
moveSnake(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&\\移动蛇
int oppositeDirection(int
keyCode);&&&&&&&&&&&&&&&&&&&&
\\判断是否方向有误
foodEat(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& \\判断是否吃到食物
expandSnake(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\\把蛇增长一节
3 程序测试和运行结果
TITLE="贪吃蛇游戏&C语言程序设计" />
----------------------------------------------------------------------------选择速度开始或退出
TITLE="贪吃蛇游戏&C语言程序设计" />
----------------------------------------------------------------------------------------游戏运行中
TITLE="贪吃蛇游戏&C语言程序设计" />
--------------------------------------------------------------------------------------------------------游戏结束
4 课程报告小结
【遇到的问题及解决方法分析等】
4.1分数重叠显示
解决方法:每次都用一块黑的矩形覆盖
setfillstyle(1,16);
&bar(45,45,150,80);
4.2速度太快
解决方法:循环delay
for(d=0;d&4;d++)
&delay(GAME_SPEED);
4.3食物可能出现在蛇身上
解决方法:依次判断,若重叠则重新生成食物
void createFood() {
&&&food.position.x=left+10*((int)rand());
&&&food.position.y=top+10*((int)rand());
for(i=0;i&=snake.length-1;i++){
&if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)
&&&&&&&&&&&&&
附录A:程序源代码
这是资源地址,源代码
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。非玩不可的贪吃蛇游戏
登录7k7k发现更多乐趣
7K7K网页游戏
7K7K儿童游戏
法律顾问:北京市诺恒律师事务所
京公网安备37
游戏作品版权归原作者享有,如无意之中侵犯了您的版权,请您按照来信告知,本网站将应您的要求删除。
7k7k小游戏温馨提示:适度游戏娱乐,沉迷游戏伤身,合理安排时间,享受快乐生活……snake-game 贪吃蛇游戏,用FPGA实 已经过实验验证,可在 屏幕上运行 VHDL- -Verilog 238万源代码下载-
&文件名称: snake-game
& & & & &&]
&&所属分类:
&&开发工具: VHDL
&&文件大小: 2449 KB
&&上传时间:
&&下载次数: 121
&&提 供 者:
&详细说明:贪吃蛇游戏,用FPGA实现,已经过实验验证,可在液晶屏幕上运行-Snake game, with the FPGA realization, already experimental results show that can run on the LCD screen
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&贪食蛇游戏&&..........\top_greedy_snake&&..........\................\Game_Ctrl_Unit.v&&..........\................\Game_Ctrl_Unit.v.bak&&..........\................\Key.v&&..........\................\Seg_Display.v&&..........\................\Snake.v&&..........\................\Snake_Eatting_Apple.v&&..........\................\VGA_Control.v&&..........\................\db&&..........\................\..\logic_util_heursitic.dat&&..........\................\..\prev_cmp_top_greedy_snake.qmsg&&..........\................\..\top_greedy_snake.asm.qmsg&&..........\................\..\top_greedy_snake.asm_labs.ddb&&..........\................\..\top_greedy_snake.cbx.xml&&..........\................\..\top_greedy_snake.cmp.bpm&&..........\................\..\top_greedy_snake.cmp.cdb&&..........\................\..\top_greedy_snake.cmp.ecobp&&..........\................\..\top_greedy_snake.cmp.hdb&&..........\................\..\top_greedy_snake.cmp.logdb&&..........\................\..\top_greedy_snake.cmp.rdb&&..........\................\..\top_greedy_snake.cmp.tdb&&..........\................\..\top_greedy_snake.cmp0.ddb&&..........\................\..\top_greedy_snake.cmp2.ddb&&..........\................\..\top_greedy_snake.db_info&&..........\................\..\top_greedy_snake.eco.cdb&&..........\................\..\top_greedy_snake.fit.qmsg&&..........\................\..\top_greedy_snake.hier_info&&..........\................\..\top_greedy_snake.hif&&..........\................\..\top_greedy_snake.map.bpm&&..........\................\..\top_greedy_snake.map.cdb&&..........\................\..\top_greedy_snake.map.ecobp&&..........\................\..\top_greedy_snake.map.hdb&&..........\................\..\top_greedy_snake.map.logdb&&..........\................\..\top_greedy_snake.map.qmsg&&..........\................\..\top_greedy_snake.map_bb.cdb&&..........\................\..\top_greedy_snake.map_bb.hdb&&..........\................\..\top_greedy_snake.map_bb.hdbx&&..........\................\..\top_greedy_snake.map_bb.logdb&&..........\................\..\top_greedy_snake.pre_map.cdb&&..........\................\..\top_greedy_snake.pre_map.hdb&&..........\................\..\top_greedy_snake.psp&&..........\................\..\top_greedy_snake.root_partition.cmp.atm&&..........\................\..\top_greedy_snake.root_partition.cmp.dfp&&..........\................\..\top_greedy_snake.root_partition.cmp.hdbx&&..........\................\..\top_greedy_snake.root_partition.cmp.logdb&&..........\................\..\top_greedy_snake.root_partition.cmp.rcf&&..........\................\..\top_greedy_snake.root_partition.map.atm&&..........\................\..\top_greedy_snake.root_partition.map.hdbx&&..........\................\..\top_greedy_snake.root_&&..........\................\..\top_greedy_snake.root_partition.merge_hb.atm&&..........\................\..\top_greedy_snake.rtlv.hdb&&..........\................\..\top_greedy_snake.rtlv_sg.cdb&&..........\................\..\top_greedy_snake.rtlv_sg_swap.cdb&&..........\................\..\top_greedy_snake.sgdiff.cdb&&..........\................\..\top_greedy_snake.sgdiff.hdb&&..........\................\..\top_greedy_snake.signalprobe.cdb&&..........\................\..\top_greedy_snake.sld_design_entry.sci&&..........\................\..\top_greedy_snake.sld_design_entry_dsc.sci&&..........\................\..\top_greedy_snake.smp_dump.txt&&..........\................\..\top_greedy_snake.syn_hier_info&&..........\................\..\top_greedy_snake.tan.qmsg&&..........\................\..\top_greedy_snake.tis_db_list.ddb&&..........\................\..\top_greedy_snake.tmw_info&&..........\................\greybox_tmp&&..........\................\...........\cbx_args.txt&&..........\................\incremental_db&&..........\................\..............\README&&..........\................\..............\compiled_partitions&&..........\................\..............\...................\top_greedy_snake.db_info&&..........\................\..............\...................\top_greedy_snake.root_partition.cmp.cdb&&..........\................\..............\...................\top_greedy_snake.root_partition.cmp.dfp&&..........\................\..............\...................\top_greedy_snake.root_partition.cmp.hdb&&..........\................\..............\...................\top_greedy_snake.root_partition.cmp.kpt&&..........\................\..............\...................\top_greedy_snake.root_partition.cmp.logdb&&..........\................\..............\...................\top_greedy_snake.root_partition.cmp.rcfdb&&..........\................\..............\...................\top_greedy_snake.root_partition.map.cdb&&..........\................\..............\...................\top_greedy_snake.root_partition.map.dpi&&..........\................\..............\...................\top_greedy_snake.root_partition.map.hbdb.cdb&&..........\................\..............\...................\top_greedy_snake.root_partition.map.hbdb.hb_info&&..........\................\..............\...................\top_greedy_snake.root_partition.map.hbdb.hdb&&..........\................\..............\...................\top_greedy_snake.root_partition.map.hbdb.sig&&..........\................\..............\...................\top_greedy_snake.root_partition.map.hdb&&..........\................\..............\...................\top_greedy_snake.root_partition.map.kpt&&..........\................\key.v.bak&&..........\................\pll.ppf&&..........\................\pll.qip&&..........\................\pll.v&&..........\................\pll_bb.v&&..........\................\pll_inst.v&&..........\................\seg_display.v.bak&&..........\................\snake.v.bak&&..........\................\snake_eatting_apple.v.bak&&..........\................\top_greedy_snake.asm.rpt&&..........\................\top_greedy_snake.cdf&&..........\................\top_greedy_snake.done&&..........\................\top_greedy_snake.fit.rpt&&..........\................\top_greedy_snake.fit.smsg&&..........\................\top_greedy_snake.fit.summary&&..........\................\top_greedy_snake.flow.rpt
&[]:很好,推荐下载
&近期下载过的用户:
&&&&&&&&&&[]
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 采用verilg语言并结合VGA显示、PS2接口技术、键盘输入等实现基于FPGA开发板的可选择性迷宫游戏。可以利用电脑键盘和显示器来玩这个游戏
&[] - vhdl相关的知识,说明了在学习VHDL过程中长出现的一下问题,是很好的材料。
&[] - 数值计算里解偏微分方程组的常见函数,非常实用
&[] - C编程实现http
POST请求 客户端模型
用键盘控制FPGA,再由FPGA控制VGA显示器是好东西
&[] - 用vhdl语言写了PS2键盘的程序,经调试正常使用,是一个不错的模块
&[] - 在FPGA开发板上用vhdl语言实现了贪吃蛇游戏,开发软件为quartus 2.这是详细的实验报告,包括源码
&[] - 本实验以设计贪吃蛇游戏为课题。最终结果是以8*8点阵作为本游戏的显示界面,通过按键BTN1,BTN2,BTN3,BTN4分别控制蛇的运动方向,分别为“上下左右”。蛇的长度为六个点阵,另外以一点表示老鼠,当蛇头吃到老鼠时,老鼠则在点阵上改变位置,也就是说通过一个伪随机函数在点阵上产生老鼠的位置,每当蛇
&[] - 这是一个基于NIOSII的俄罗斯方块游戏设计,是基于FPGA的,利用流模式DMA传输实现游戏。
&[] - verilog编写的贪吃蛇小游戏,能够在vga上显示,可以通过sp3键盘控制蛇的运动,吃食物