基于单片机实现的俄罗斯方块游戏开题报告1
- 格式:doc
- 大小:49.50 KB
- 文档页数:5
本科课程设计题目:基于单片机的8*8LED 俄罗斯方块设计姓名孙俊学号2008130346院(系)物理与信息科学学院电子系专业、年级电子信息科学与技术2008级指导教师刘美容二○一一年十月基于单片机的8x8 俄罗斯方块设计一、设计任务《俄罗斯方块》是一款世人皆知,看似简单实则变化无穷的小游戏。
本次设计以51单片机为基础,设计一款功能简单的8*8点阵俄罗斯方块游戏,我们将以汇编语言编程实现以下操作:图形的显示合成,通过按键控制图形的移动和旋转,满格消行,手动复位等。
本次设计俄罗斯方块功能简单,用单片机的最小系统就能得以实现。
而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。
对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。
其中,硬件设计包括初始的设计原理和原理图介绍,到最终的电路图实际焊接以及布局,软件设计我们会给出具体的设计方案,比如图形的显示合成,通过按键控制图形的移动和旋转,满格消行等的设计流程图,以及具体的汇编程序。
二、设计方案本次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编语言,后期是进行实物焊接。
本次我们采用单片机STC89C52控制模块提供电源,以点阵式LED 显示,采用独立按键,直接在I/O口线上接上按键开关。
因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是旋转键,下键,左键,右键。
这种方案实现可行,既满足系统功能要求,又减少了系统实现的复杂度。
而由于STC89C52是一种带8K 字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,该器件采用ATMEL 搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
89C52内置8位中央处理单元、256字节内部数据存储器RAM 、8k 片内程序存储器(ROM )32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
毕业设计开题报告附页:开题报告一、设计的目的与意义俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,作为最经典的游戏之一,它曾造成的轰动与经济价值可以说是游戏史上的一件大事。
这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾。
相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
虽然用单片机来设计一个简单的俄罗斯方块游戏程序似乎有点大材小用了,但这仅仅是一个单片机在嵌入式游戏方面的简单应用,正因为他的前景无可预计,所以才有这个设计,此次设计仅仅是为了举一个单片机在游戏上应用的一个简单例子,他可以很好的说明单片机功能的强大,更高的可控性和集成度高的好处,因此他可以在电子游戏方面成为一个不可计量的明日之星。
二、工作思路1.实现的功能:俄罗斯方块游戏规则的实现2.特点:采用单片机实现具有便携性与易用性三、计划进度四、参考文献[1] 张齐.杜群贵.单片机应用系统设计技术——基于C语言编程[M].北京:电子工业出版社,2004.[2] Apress. Introduction to Visual Basic Programming [M].Professional Computing and Web Design, 2006.[3] 杨元强。
酷比杯获奖作品选登《LEGO 俄罗斯》[J]。
“酷比杯”游戏策划大赛,2007.[4] 周润景著.Proteus在MCS-51&ARM7系统中的应用百例[M].北京:电子工业出版社,2006.[5] 游安弼, 李玉岐. 基于JavaBean组件模型的俄罗斯方块[R]. 北京:全国第四届Java 技术及应用学术会议,2001.[6] Jason Lam.J2ME&Gaming[M]. Addison Wesley,2004.[7] 高凌琴,陈青华. 俄罗斯方块游戏关键技术探讨[J]. 信息技术与信息化.2008.[8] 荣钦科技编著,《Java 2 游戏设计》[M].北京:清华大学出版社,2004.[9] 陈立伟,张克非,黎秀红著. 精通JAVA手机游戏与应用程序设计[M].北京:中国青年出版社, 2005-5.[10]谭浩强. C程序设计.[M] 北京:清华大学出版社,2003.。
俄罗斯方块开题报告俄罗斯方块开题报告引言:俄罗斯方块是一款经典的电子游戏,自从1984年由俄罗斯设计师阿列克谢·帕基特诺夫发明以来,就在全球范围内广受欢迎。
这款游戏以其简单却耐玩的特点,吸引了无数玩家。
本报告将深入探讨俄罗斯方块的起源、玩法、心理学原理以及对玩家的影响。
一、起源:俄罗斯方块最早是由阿列克谢·帕基特诺夫在苏联设计的。
当时,帕基特诺夫是一名计算机工程师,他的灵感来源于儿童玩具“儿童积木”。
他将积木的概念与计算机游戏相结合,创造出了俄罗斯方块这个经典游戏。
在1984年的时候,该游戏被引入到了苏联的电子游戏机中,并很快风靡全国。
二、玩法:俄罗斯方块的玩法非常简单,玩家需要操作一个掉落的方块,使其在下方的平台上堆叠。
方块由四个小方块组成,可以旋转和移动。
当一行方块被填满时,该行将被消除,并为玩家腾出空间。
游戏的目标是尽可能地清除更多的行,以获得更高的分数。
三、心理学原理:俄罗斯方块之所以如此受欢迎,与其背后的心理学原理密不可分。
首先,该游戏具有简单明了的规则,容易上手,让玩家迅速获得成就感。
其次,游戏的速度逐渐加快,让玩家处于一种紧张刺激的状态,增加了游戏的挑战性。
此外,游戏还具有一定的策略性,玩家需要灵活运用方块,找到最佳的堆叠方式。
这种思维训练对玩家的空间想象力和问题解决能力有着积极的影响。
四、对玩家的影响:俄罗斯方块不仅仅是一款娱乐游戏,它还对玩家的身心健康有着积极的影响。
首先,游戏可以帮助玩家放松心情,缓解压力。
当玩家专注于游戏时,他们可以暂时忘记生活中的烦恼,享受游戏带来的乐趣。
其次,游戏对于提高注意力和反应能力也有帮助。
玩家需要迅速做出决策,适应游戏速度的变化,这对于锻炼大脑的灵活性非常有益。
此外,俄罗斯方块还可以锻炼玩家的耐心和毅力,因为游戏中的失败和挑战是不可避免的,玩家需要不断尝试并坚持下去。
结论:俄罗斯方块作为一款经典的电子游戏,不仅在娱乐方面给玩家带来了乐趣,还对玩家的身心健康产生了积极的影响。
俄罗斯方块游戏开题报告表二本科毕业论文(设计)开题报告表2010 年 11 月 28 日信息科学与技姓名学号系术系计算机科学嵌入式软件专业专业方向班级与技术俄罗斯方块游戏题目指导教师一、与本课题有关的国内外研究情况、课题研究的主要内容、目的和意义:在当今社会中,竞争越来越激烈,工作也变得繁琐而乏味,人们没有太多的休息时间。
此时的人们正需要一种既简单又节省时间的快速休闲方式,俄罗斯方块游戏以其花样的方块,无尽的挑战吸引了众多爱好者,而且老少皆宜。
无可争议,俄罗斯方块是有史以来最伟大的游戏之一。
它是永恒的娱乐经典,但它实际不又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。
程序代码简单,界面易于实现,成为编写电子工具,如手机,MP4,电子词典,商务通等的首选游戏。
俄罗斯方块虽然是一款非常流行的小游戏,但它创意独特,其规则简单明了,自始至终不过是几个方块纷纷落下。
最重要的是它特别好玩,一出现就风靡全世界。
虽说世界上事物丰富多彩,充满了各种各样的形状和色彩,但方块这种最简单的几何图形对人类却有着不可思议的强大吸引力。
课题研究的主要内容及需要解决的问题:游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。
Visual Basic是一个强大的Windows平台上的开发工具,从开发个人或小组使用的小工具,到大型企业应用系统,甚至通过Internet的遍及全球分布式应用程序,都可在Visual Basic提供的工具中各取所需。
Visual Basic是一种面向对象的程序设计语言,采用控件为主体的事件驱动模型程序设计方法,大大减轻了程序员工发Windows应用程序的效率,使程序员把精力投入到系统应用中,而不是陷入Windows烦琐的处理机制和函数名称中。
俄罗斯游戏设计本质上就是定时器产生重绘事件和用户输入改变游戏状态。
在2KB内存的单片机上实现的的俄罗斯方块一. 综述相对于五子棋,俄罗斯方块算法更是满天飞。
我的代码还是相对好移植的,看起来也更清晰,方便学弟学妹们做编程小学期时移植。
不过要做就要做的有特色:它运行在软硬件由我们独立开发的平台上。
以下是截图:有如下特点:∙跑在独立开发的平台上,平台为MSP430F149,内存2KB,频率8MHz∙支持体感:可以通过左右倾斜来左右移动方块,还可以上下抖动改变方块形状∙代码精简,方便移植∙内存占用率极低∙支持横屏和竖屏操作∙支持等级:用户在达到一定分数后,等级会上升,从而方块下落速度变得更快二. 系统设计我们将问题细化为以下几个方面:1. 方块的形状如何存储俄罗斯方块总共有19种形状,每种形状都由四个小方块组成。
如何高效存储这些方块的形状是个值得思考的问题。
上图介绍了存储方法:我们用以下数组保存形状:const unsigned char BoxShape[19][9]={{ 1,0,0,1,1,1,2,1,1 },{ 1,0,1,1,2,1,1,2,2 },{ 0,0,1,0,2,0,1,1,3 },{ 1,0,0,1,1,1,1,2,0 },{ 1,0,2,0,1,1,1,2,5 },{ 0,0,1,0,2,0,2,1,6 },{ 2,0,2,1,2,2,1,2,7 },{ 0,0,0,1,1,1,2,1,4 },{ 1,0,2,0,2,1,2,2,9 },{ 2,0,0,1,1,1,2,1,10 },{ 1,0,1,1,1,2,2,2,11 },{ 0,0,1,0,2,0,0,1,8 },{ 0,0,0,1,1,1,1,2,13 },{ 1,0,2,0,0,1,1,1,12 },{ 2,0,1,1,2,1,1,2,15 },{ 0,0,1,0,1,1,2,1,14 },{ 1,0,1,1,1,2,1,3,17 },{ 0,1,1,1,2,1,3,1,16 },{ 1,0,2,0,1,1,2,1,18 }};2. 如何解决各个方块的互相转换的顺序:以上的数组已经解决了这一问题,多维数组的最后一位即该形状发生改变后的下一个形状。
基于51单片机的俄罗斯方块游戏毕业设计论文目录摘要 ...................................................... 错误!未定义书签。
ABSTRACT ...................................................... 错误!未定义书签。
1 绪论 (3)1.1 课题背景 (3)1.2 课题的主要研究容 (3)1.3 课题的研究现状及意义 (4)2 系统硬件平台设计 (5)2.1 STC12C5A60S2单片机概述 (5)2.2 STC12C5A60S2最小系统 (5)2.3 电源系统 (6)2.4 振荡电路 (6)2.5 复位系统 (6)2.6 程序下载系统 (7)2.7 音乐播放系统 (8)2.8 LCD液晶显示接口电路 (8)2.9 操作控制接口 (9)3 系统软件平台构建 (10)3.1 μVision简介 (10)3.2 LCD12864液晶屏显示原理 (10)3.2.1 LCD模块总线选择及时序 (10)3.2.2 LCD显示RAM区映射概况 (11)3.2.3 LCD的驱动方法 (12)3.2.4 LCD驱动程序架构 (12)3.3 俄罗斯方块游戏设计 (13)3.3.1 俄罗斯方块游戏功能简介 (13)3.3.2 系统界面的设计 (14)3.3.3 游戏系统“枚举算法”概述 (16)3.3.4 俄罗斯方块造型设计的方法 (17)3.3.5 随机产生俄罗斯方块的方法 (17)3.3.6 俄罗斯方块平移的实现方法 (19)3.3.7 俄罗斯方块旋转的实现方法 (20)3.3.8 俄罗斯方块下移的实现方法 (22)3.3.9 满行检测及消行功能的实现方法 (23)3.3.10 游戏积分的计算方法 (24)3.4 双人俄罗斯方块游戏设计 (26)3.4.1 RTX51 Tiny简介 (26)3.4.2 RTX51 Tiny的核分析 (26)3.4.3 游戏开发环境的配置 (29)3.4.4 双人单机对战模式的实现流程 (30)3.5 系统背景音乐的设计 (30)3.5.1音乐的设计原理 (30)3.5.2 音乐播放的实现方法 (32)3.5.3 音效程序流程 (32)3.6 系统主程序流程图 (33)4 产品功能说明与系统性能测试 (34)4.1 产品功能说明 (34)4.2 系统性能测试 (35)5 结束语 (35)参考文献 (37)致谢1 绪论1.1 课题背景如今,计算机系统的发展已明显地朝三个方向发展,这三个方向就是:巨型化,单片化,网络化。
题目:[单片机俄罗斯方块设计]摘要随着社会的不断的发展和进步,人们对娱乐产品的关注在不断的增加,特别是电子游戏产品在我们的生活中占据了很重要的地位。
俄罗斯方块游戏是一款风靡全球的经典游戏。
这款游戏之所以叫做俄罗斯方块,是因为发明这款游戏的人是俄罗斯人。
本次为了回顾经典设计了一款基于单片机的俄罗斯方块游戏机。
本次设计了一款基于单片机的俄罗斯方块游戏机,该游戏机可以丰富我们的业余生活。
在硬件设计上该游戏机以STC89C52单片机为基础、使用LCD12864图形液晶可以显示游戏的界面、通过按键实现游戏机的按钮的功能、并具有蜂鸣器可以实现声音提示的功能。
在软件设计上,使用C语言进行了俄罗斯方块游戏的控制程序的编写,并在keil软件上进行了调试。
最后在Proteus仿真软件上对俄罗斯方块游戏的功能进行了仿真,并焊接了实物电路板。
关键词:STC89C52单片机;俄罗斯方块;游戏机;LCD12864液晶AbstractWith the continuous development and progress of society, people pay more and more attention to entertainment products, especially video game products play a very important role in our life. The Tetris game is a classic game that is popular all over the world. The game is called the Tetris, because the people who invented the game were Russian. This time in order to review the classic design of a single chip based Tetris block game machine.The design of a single chip computer based Tetris game machine, which can enrich our amateur life. On the hardware design, the game machine is based on STC89C52 microcontroller, and it can display the interface of the game by using LCD12864 graphic LCD, realize the button function of the game machine by button, and has the function of voice prompt by buzzer. In the software design, the control program of Tetris game is written in C language and debugged on the keil software. Finally, the function of the Tetris game is simulated on the Proteus simulation software, and the physical circuit board is welded.Keywords:STC89C52 singlechip;Tetris block;game machine;LCD12864 liquid crystal目录摘要 (I)Abstract........................................................... I I 第1章绪论.. (1)1.1课题研究背景和意义 (1)1.2俄罗斯方块的发展状况及趋势 (1)1.3课题研究的主要内容 (1)1.4课题研究的主要内容 (2)第2章系统整体方案设计 (4)2.1系统的功能要求 (4)2.2系统总体方案框图设计 (4)2.3单片机模块的选择 (5)2.4液晶显示模块的选择 (6)2.5按键电路的选择 (7)第3章系统整体硬件设计 (9)3.1单片机电路设计 (9)3.1.1STC89C52单片机介绍 (9)3.1.2晶振电路设计 (10)3.1.3复位电路设计 (10)3.1.4单片机最小系统电路设计 (11)3.2 LCD12864液晶显示电路 (11)3.2.1点阵LCD的显示原理 (11)3.2.2LCD12864液晶的硬件连接 (12)3.3按键控制电路 (12)3.4声音提示电路设计 (13)3.5电源电路 (13)第4章系统软件设计 (15)4.1程语言的选择 (15)4.2软件介绍和工程建立 (15)4.3俄罗斯方块流程图设计 (16)4.3.1主程序流程图 (16)4.3.2游戏外观显示流程图 (18)4.3.3俄罗斯方块向左/右移动工作流程图 (19)4.3.4俄罗斯方块中按下键的流程图 (20)第5章系统的调试与制作 (21)5.1 KEIL软件介绍 (21)5.2程序调试 (21)5.3 proteus仿真步骤 (22)5.4实物综合调试 (23)结论 (26)参考文献 (27)附录 (28)致谢.............................................. 错误!未定义书签。
基于51单片机俄罗斯方块游戏设计作者:左厚臣前言闲得无事,想用单片机和LCD12864写一个俄罗斯方块游戏,培养培养兴趣,丰富一下业余生活,同时也熟练熟练单片机应用。
然后整理一下过程,本文没有什么专业的流程图,系统框图,随手画的。
希望各位大神勿喷,本菜鸟就献丑了。
关键字:51单片机LCD12864 俄罗斯方块游戏设计一、实物写真1、先展示一下实物效果呗,看能不能吸引到各位大神的眼球!!!!2、单片机选型IO口占用:7个程序存储器占用:6459Byte内部RAM:117.0Byte内部扩展RAM:1016ByteFosc = 24Mhz(也可选择12Mhz)中断使用状况:16位定时器溢出中断1个手头有一块STC12C5A60S2 51系列单片机,本实验也采用的此款单片机,或许有大神能用很节省资源的方法写出这款游戏,本菜鸟甘拜下风。
二、游戏算法整个游戏的算法也就是这样子的吧!下面就对每个步骤进说明吧!三、算法说明算法就捡重点的说吧,省得各位大神都闲啰嗦。
1、当前随机方块获取和下一回合游戏方块生成并显示此步骤拆解成如下流程图所示:(1)随机数生成51单片机需要调用库函数来产生随机数,如下:#include <stdlib.h>//调用库函数的头文件函数rand ()会生成一个int型的随机数,int型变量范围为-32768~32767占用2 字节。
我们使用时其实是可以把它当做一个unsigned int型变量的,取值范围0-65535 这个应该是很好理解的。
但是如果我们需要一个0-7的随机数怎么处理呢,没关系有办法,程序如下:u8 Random(u8 max){u16 temp;u8 a;max = max +1;temp=rand();//获取随机种子a = temp%max;return a;}其实也就是把得到随机数与想要得到数范围的最大数求余运算就可以了,即:a = temp%max;我们的游戏方块可以描述成2个要素:A、形状比如说形状有:■■■■■■■■■等,可用0-n来表示B、姿态比如说形状■■■姿态有4种如下:■■■■■■■■■■■■它们从左往右看可以看出规律分别旋转了0°,90°,180°,270°,也分别相对旋转了90°,可以用0-3来表示。
基于单片机实现的俄罗斯方块游戏俄罗斯方块游戏是一款经典的益智游戏,其简单的操作和不断增加的难度吸引了许多玩家。
在本文中,我们将介绍如何使用单片机实现一个简单的俄罗斯方块游戏。
为了实现这个项目,我们需要以下材料:1. 单片机:例如STM32F103C8T6或Arduino UNO;2.LCD显示屏:用于显示游戏界面;3.按键:用于控制方块的移动和旋转;4.蜂鸣器:用于播放游戏音效。
首先,我们需要连接LCD显示屏和单片机。
根据LCD显示屏和单片机的引脚定义,将它们正确地连接起来。
接下来,我们需要编写单片机的程序。
首先,我们需要初始化LCD显示屏和按键等外设。
接下来,我们需要实现方块的绘制和移动功能。
为了实现这些功能,我们需要使用几个基本的数据结构,例如数组和变量来表示方块的位置和状态。
我们可以使用一个二维数组来表示游戏区域。
每个单元格可以是一个数字,表示该位置有方块或者空白。
使用一个变量来表示当前方块的位置和状态,包括方块的类型、位置和旋转角度。
游戏的逻辑如下:首先,我们需要生成一个新的方块,并将其放置在游戏区域的顶部。
接下来,玩家可以使用按键来控制方块的移动和旋转。
当方块到达底部或者无法继续移动时,它将固定在游戏区域中,并生成一个新的方块。
玩家可以通过移动和旋转方块来填满游戏区域的行,当一行填满时,它将被清除,并且玩家将得分。
游戏的目标是尽可能地填满更多的行,得到更高的分数。
在我们的程序中,我们需要实现方块的绘制和移动功能。
我们可以使用LCD显示屏来绘制方块,使用按键来控制方块的移动和旋转。
在每次移动方块之后,我们需要检查游戏区域是否存在被填满的行,并进行相应的清除和得分操作。
另外,我们可以在游戏中加入一些音效,例如当方块固定在游戏区域中或者当一行被清除时,播放相应的音效。
我们可以使用蜂鸣器来实现这些音效。
在编写完程序后,我们可以将程序烧录到单片机中,并将LCD显示屏和按键等外设连接好。
最后,我们可以开始游戏了!。
基于单片机的俄罗斯方块游戏系统的设计概述:俄罗斯方块是一款经典的益智游戏,玩家需要通过控制不同形状的方块,使其在游戏区域内堆叠成完整的水平行,一旦一行被填满,就会被消除,并获得分数。
本文将介绍一种基于单片机的俄罗斯方块游戏系统的设计方案。
硬件设计:1.单片机选择:选择合适的单片机作为游戏系统的核心控制器。
可以选用8051、STM32等单片机进行设计,并根据具体需求选择相应的型号。
2.显示屏幕:使用LCD显示屏或OLED屏幕作为游戏界面的显示设备。
屏幕大小可以根据实际需求确定,一般选择2.3英寸至3.5英寸之间的屏幕尺寸。
3.控制按钮:设计合适的按键布局,包括方向控制键(上、下、左、右)、旋转键和暂停键等。
4.音频装置:可以选择蜂鸣器或扬声器作为游戏中的音效设备,用于播放游戏中的音效和音乐。
软件设计:1.初始化设置:系统上电后,进行相关的初始化设置,包括显示屏的初始化、按键的设置、计分初始化等。
2.游戏界面设计:设计游戏界面,包括显示下一个方块、显示当前游戏区域、显示计分、显示游戏状态等。
3.方块的生成和掉落:设计方块的生成算法,并通过时间控制方块的自动下落。
4.方块的移动和旋转:根据玩家的控制信号,移动或旋转当前方块的位置。
设计合适的算法,判断玩家的操作是否合法。
5.碰撞检测:使用适当的算法,实现方块与游戏区域、已落下的方块之间的碰撞检测,判断方块是否可以继续下落或进行旋转。
6.行消除:判断游戏区域的每一行是否被填满,如果是,则将该行消除,并计分。
7.游戏结束判定:当方块堆叠到游戏区域的顶部时,游戏结束。
停止方块的下落,并显示游戏结束信息。
8.游戏暂停和继续:设计游戏暂停和继续的功能,玩家可以通过按下暂停键暂停游戏,并通过再次按下继续键继续游戏。
9.音效和音乐播放:设计合适的算法,实现游戏中的音效和音乐的播放功能。
总结:以上介绍了基于单片机的俄罗斯方块游戏系统的设计方案,包括硬件设计和软件设计两个方面。
内蒙古财经大学计算机信息管理学院本科生毕业论文(设计)开题报告作者李慧敏院(系)计算机信息管理学院专业计算机科学与技术年级10计科学号102103130指导教师乌英格导师职称副教授毕业设计开题报告(含课题的来源及现状、设计要求、工作内容、设计方案、技术路线、预期目标、时间安排及参考文献等内容,字数为500~1000字。
)一、课题来源及研究的现状俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。
这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。
相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
国内许多论文对俄罗斯方块游戏的教学意义做了深入讨论,主要集中于游戏中方块变换的算法研究,其中利用枚举算法和利用矩阵转置的算法最为多见。
另外,还有许多文章探讨了游戏在嵌入式平台中的开发以及应用。
二、设计要求●游戏开启询问玩家是否开启声音;●玩家可以选择游戏的难度级别,即方块下落的快慢;●玩家进入游戏主界面后,开始移动方块选择方块下落的位置;●根据玩家的积分,进入相应的难度级别;●当方块累积置顶,提示玩家游戏结束;三、工作内容Visual Basic提供了可视化设计工具,把Windows界面设计的复杂性“封装”起来,开发人员不必为界面设计而编写大量程序代码。
支持面向对象的程序设计,把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西,把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西●编程时注意几个重要的数组和变量;●设计界面;●系统功能模块设计;●在功能模块设计时,类的设计;●系统实现:满足游戏玩家的需求;●系统测试;三.系统统设计进度安排1. 系统运行需求:PII以上处理器,128MB内存,硬盘20G以上.2. 将会用到的软件:Visual Basic 6.0 , Access 20003. 制作时间安排第一阶段:通过调查分析开发所具备的能力及实现的方法。
基于MSP430F5529俄罗斯方块游戏程序/*基于MSP430F5529俄罗斯方块游戏程序*///作者:詹磊//功能:基于MSP430F5529俄罗斯方块游戏程序//说明:运行环境:TI官方MSP-EXP5529开发板(外接4个带上拉电阻独立按键)// 非原创,思路是从51单片机上移植过来的// 底层液晶驱动是TI官方提供的LCD API// 游戏算法部分的底层程序多处已经修改,与原版会有较大的差别//版本:测试版V1.0(基本能流畅运行,但需要进一步的美化和优化)#include "MSP430F5529.h"#include "LCD_102x64.h"#include "main.h"#include "Key.h"#define MAXHANG 20 //游戏显示行数#define MAXLIE 16 //游戏显示列数#define MapWide 48 //地图宽#define MapHigh 60 //地图高#define ON 0#define OFF 1#define BIT(n) (1<<(n))volatile uint cubeMap[MAXHANG]; //地图显示存存typedef struct{uchar const * box; //方块图形字模数据指针uchar cube : 4; //方块形态(占用4个位域)uchar state : 4; //方块状态(占用4个位域)char row; //方块所在行char column; //方块所在列} block;block this;uchar liang=11;uchar Speed=1,Score=0;uint timeA=0;uchar downflag=0;uchar randomNumber=0;const uchar cube[]={/* ■■■■*/0,4,0xe,0, 0,2,6,2, 0,7,2,0, 4,6,4,0,/*■■■■*/0,8,0xe,0, 0,4,4,0xc, 0,0,0xe,2, 0,6,4,4, /*■■■■*/0,0xe,8,0, 0,4,4,6, 0,1,7,0, 6,2,2,0,/*■■■■*/0,0xc,6,0, 0,2,6,4, 0,6,3,0, 2,6,4,0,/* ■■■■*/0,6,0xc,0, 0,4,6,2, 0,3,6,0, 4,6,2,0,/*■■■■0,0xf,0,0, 4,4,4,4, 0,0,0xf,0, 2,2,2,2,/*■■■■*/0,6,6,0, 0,6,6,0, 0,6,6,0, 0,6,6,0};void delay_ms(uint z)//毫秒级延时函数{uint i,m;for(i=z;i>0;i--)for(m=4500;m>0;m--){_NOP();}}//-------------------------------------------////函数名:八位LED灯控制函数//入口:Number:Number哪位为一则哪位LED点亮//出口:Void//功能://-------------------------------------------//void DigitalLedControl(uchar Number){if(Number&BIT7)P1OUT|=BIT0;elseP1OUT&=~BIT0;if(Number&BIT6)P8OUT|=BIT1;P8OUT&=~BIT1;if(Number&BIT5)P8OUT|=BIT2;elseP8OUT&=~BIT2;if(Number&BIT4)P1OUT|=BIT1;elseP1OUT&=~BIT1;if(Number&BIT3)P1OUT|=BIT2;elseP1OUT&=~BIT2;if(Number&BIT2)P1OUT|=BIT3;elseP1OUT&=~BIT3;if(Number&BIT1)P1OUT|=BIT4;elseP1OUT&=~BIT4;if(Number&BIT0)P1OUT|=BIT5;elseP1OUT&=~BIT5;}//-------------------------------------------// //函数名:显存清空函数//入口:Void//出口:Void//功能:清空显存//-------------------------------------------// void DisplayRamClear(){uchar i;for(i=0;i<20;i++){cubeMap[i]=0x0;}}//-------------------------------------------// //函数名:两位十进制数字显示函数//入口:Row:显示的行数// Column:显示的列数// Number:需要显示的数字<100 && >=0//出口:Void//功能://-------------------------------------------//void Number2BitDisplay(uchar Row,uchar Column,uchar Number) {uchar tempShi,tempGe;tempShi=Number/10;tempGe=Number%10;Dogs102x6_charDraw(Row, Column,tempShi+'0',ON);Dogs102x6_charDraw(Row, Column+6,tempGe+'0',ON); }//-------------------------------------------////函数名:游戏背景函数//入口:Void//出口:Void//功能:绘制游戏背景地图//-------------------------------------------// void GameBackground(){uchar i;for(i=0;i<maphigh+1;i++)< p="">{Dogs102x6_pixelDraw(0, i, ON);Dogs102x6_pixelDraw(MapWide+1, i, ON); }for(i=0;i<mapwide+2;i++)< p="">{Dogs102x6_pixelDraw(i, 0, ON);Dogs102x6_pixelDraw(i, MapHigh+1, ON);}DisplayRamClear();Dogs102x6_stringDraw(3, 10, "START",ON); Dogs102x6_stringDraw(1, 51, "NEXT:",ON); Dogs102x6_stringDraw(3, 51, "SPEED:--",ON); Dogs102x6_stringDraw(5, 51, "SCORE:--",ON); Number2BitDisplay(3,87,Speed);Number2BitDisplay(5,87,Score);}//-------------------------------------------////函数名:游戏Map清空//入口:Void//出口:Void//功能:清空游戏背景地图(不清空显存)//-------------------------------------------// void GameMapClear(){uchar i,j;for(i=0;i<maphigh;i++)< p="">{for(j=0;j<mapwide;j++)< p="">{Dogs102x6_pixelDraw(j+1, i+1, OFF);}}}//-------------------------------------------////函数名:系统初始化//入口:Void//出口:Void//功能://-------------------------------------------//void SystemInit(){WDTCTL = WDTPW + WDTHOLD;P8DIR|=BIT1+BIT2;P8OUT|=BIT1+BIT2;P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;P1OUT|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;InitKey();UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation UCSCTL2 = FLLD_1 + 609; // Set DCO Multiplier for25MHz(这里设置为20MHz适应液晶的SPI通信)// (N + 1) * FLLRef = Fdco// (762 + 1) * 32768 = 25MHz// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLL control loopTA1CCTL0 = CCIE; // CCR0 interrupt enabledTA1CCR0 = 328-1;TA1CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, upmode, clear TAR_BIS_SR(GIE);Dogs102x6_init();Dogs102x6_clearScreen();Dogs102x6_backlightInit();Dogs102x6_setContrast(11);Dogs102x6_setBacklight(liang);}//-------------------------------------------////函数名:3x3点显示函数//入口:x:x轴坐标// y:y轴坐标// mode:ON 打点;OFF 消点//出口:Void//功能://-------------------------------------------//void Display3x3Pixels(uchar x,uchar y,uchar mode){x=3*x+1;y=3*y+1;Dogs102x6_pixelDraw(x, y, mode);Dogs102x6_pixelDraw(x+1, y, mode);Dogs102x6_pixelDraw(x+2, y, mode);Dogs102x6_pixelDraw(x, y+1, mode);Dogs102x6_pixelDraw(x+1, y+1, mode);Dogs102x6_pixelDraw(x+2, y+1, mode);Dogs102x6_pixelDraw(x, y+2, mode);Dogs102x6_pixelDraw(x+1, y+2, mode);Dogs102x6_pixelDraw(x+2, y+2, mode);}//-------------------------------------------////函数名:显示像素点更改函数//入口:Row:行数// Column:列数// mode:ON 打点;OFF 消点//出口:Void//功能://-------------------------------------------//void ChangeRamBit(uchar Row,uchar Column,uchar mode) { uint tempData;tempData=(0x8000>>(Column%16));if(mode==ON)cubeMap[Row]|=tempData;elsecubeMap[Row]&=~tempData;//-------------------------------------------////函数名:读取某个显示像素点位值函数//入口:Row:行数// Column:列数//出口:uchar 1:所选点位1,0:所选的点位0//功能://-------------------------------------------//uchar ReadDisplayRamBit(uchar Row,uchar Column) {uint tempData;tempData=(0x8000>>(Column%16));if(cubeMap[Row]&tempData)return 1;elsereturn 0;}//-------------------------------------------////函数名:下一个方块显示函数//入口:x:x轴坐标// y:y轴坐标// *p:图形字模数据指针//出口:Void//功能://-------------------------------------------//void showNextCube(uchar const * p,uchar x,uchar y) #define NexPoinX 27 //下一个图形显示的X坐标#define NexPoinY 2 //下一个图形显示的Y坐标{uchar i,j,temp;for(i=0;i<4;i++){temp=0x08;for(j=0;j<4;j++){if(p[i] & temp)Display3x3Pixels(x+j,y+i,ON);elseDisplay3x3Pixels(x+j,y+i,OFF);temp>>=1;}}//-------------------------------------------////函数名:显示函数//入口:Void//出口:Void//功能:将显存的内容写入显示器显示//-------------------------------------------// void showCubeMap(void){uchar hang,lie;for(hang=0;hang<maxhang;hang++)< p=""> {if(cubeMap[hang]!=0) //跳过某行全为零的地方for(lie=0;lie<maxlie;lie++)< p="">{if(cubeMap[hang]&(0x8000>>(lie%16))) Display3x3Pixels(lie,hang,ON);}}}//-------------------------------------------////函数名:产生新方块函数//入口:Void//出口:Void//功能://-------------------------------------------// void createCube(void){static uchar next=0;this.cube=next;next=randomNumber%7; //产生随机数this.row=0; //初始行为0 this.column=6; //初始列为6this.state=0; //初始状态为0this.box=cube+16*this.cube; //设定方块指针起始地址showNextCube(cube+16*next,NexPoinX,NexPoinY); //提示区显示下一个方块timeA=0;downflag=0;}//-------------------------------------------////函数名:写显存函数//入口:mode:ON 打点;OFF 消点//出口:Void//功能:将数据写入显存,同时写入显示器显示//-------------------------------------------//void writeCubeT oMap(uchar mode){uchar tempData,tempRow,tempColumn,i,j,k=0;for(i=0;i<4;i++){tempData=this.box[i];if(tempData==0)continue;for(j=0;j<4;j++){if(tempData&0x08){tempRow=this.row+k;tempColumn=this.column+j; ChangeRamBit(tempRow,tempColumn,mode); Display3x3Pixels(tempColumn,tempRow,mode); }tempData<<=1;}k++;}}//-------------------------------------------////函数名:方块边沿检测函数//入口:Void//出口:uchar 0:可以继续移动1:到底,停止移动//功能://-------------------------------------------// uchar checkClask(void){uchar tempData,tempRow,tempColumn,i,j,k=0; for(i=0;i<4;i++){tempData=this.box[i];if(tempData==0)//跳过全为零的行continue;for(j=0;j<4;j++){if(tempData&0x08){tempRow=this.row+k;tempColumn=this.column+j;if (ReadDisplayRamBit(tempRow,tempColumn) //与边上的方块接触||(tempRow>=MAXHANG)//到了最底部||(tempColumn>=MAXLIE)//到了最右边||(tempColumn==255)//到了最左边)return1; //返回1,停止移动}tempData<<=1;}k++;}return0; //返回0,可以继续移动}//-------------------------------------------////函数名:地图检测函数//入口:Void//出口:Void//功能:检测地图中是否有满行,有的话就消行,加分,一定分后加速,同时刷一次屏//-------------------------------------------// void CheckMap(){uchar fullFlag=0;static uchar tempScore=0,tempSpeed=0; char i,j;for(i=MAXHANG-1;i>0;i--){if(cubeMap[i]==0xffff){fullFlag++;for(j=i;j>0;j--){if(j>0)cubeMap[j]=cubeMap[j-1];elsecubeMap[j]=0;}i++;}}tempScore=Score;tempSpeed=Speed;switch(fullFlag){case 1:Score++;break;case 2:Score+=2;break;case 3:Score+=4;break;case 4:Score+=6;break;default:break;}if(Score>99){Speed++;if(Speed>9)Speed=1;Score=0;}if(tempScore!=Score)Number2BitDisplay(5,87,Score);if(tempSpeed!=Speed)Number2BitDisplay(3,87,Speed);if(fullFlag){GameMapClear();showCubeMap();}}//-------------------------------------------// //函数名:方块左移函数//入口:Void//出口:Void//功能://-------------------------------------------// void moveLeft(void){writeCubeT oMap(OFF);this.column--;if(checkClask())this.column++;writeCubeT oMap(ON);}//-------------------------------------------// //函数名:方块右移函数//入口:Void//出口:Void//功能://-------------------------------------------// void moveRigh(void){writeCubeT oMap(OFF);this.column++;if(checkClask())this.column--;writeCubeT oMap(ON);}//-------------------------------------------// //函数名:方块下移函数//入口:Void//出口:uchar 到底返回1,否则返回0;//功能://-------------------------------------------// uchar moveDown(void){writeCubeT oMap(OFF);this.row++;if(checkClask()) //到底{this.row--;writeCubeT oMap(ON);CheckMap(); //是否消行return 1;}else{writeCubeT oMap(ON);return 0;}}//-------------------------------------------// //函数名:方块翻转函数//入口:Void//出口:Void//功能://-------------------------------------------// void cubeRotation(void){uchar temp;temp=this.state;writeCubeT oMap(OFF);this.state=++this.state%4;this.box=cube+16*this.cube+4*this.state; if(checkClask()){this.state=temp;this.box=cube+16*this.cube+4*this.state; }writeCubeT oMap(ON);}//-------------------------------------------// //函数名:俄罗斯方块结束界面函数//入口:Void//出口:Void//功能://-------------------------------------------// void TetrisGameOver(){DisplayRamClear();GameMapClear();Score=0;Speed=1;Number2BitDisplay(5,87,Score);Number2BitDisplay(3,87,Speed);Dogs102x6_stringDraw(3, 13, "GAME",ON); Dogs102x6_stringDraw(4, 13, "OVER",ON); }//-------------------------------------------// //函数名:俄罗斯方块游戏运行函数//入口:Void//出口:Void//功能:不阻塞CPU//-------------------------------------------// void TetrisGame(){uchar temp=0;static uchar Flag=0;if(Flag==0){createCube();if(checkClask()){TetrisGameOver();delay_ms(1000);GameMapClear();}elsewriteCubeT oMap(ON);Flag=1;}if(downflag&&Flag){downflag=0;if(moveDown()){Flag=0;}}temp=GetKey();switch(temp){case KeyUP:cubeRotation();DigitalLedControl(0);break;caseKeyDOWN:while(moveDown()==0);Flag=0;DigitalLedControl(1);break;case KeyLEFT:moveLeft();DigitalLedControl(2);break;case KeyRIGHT:moveRigh();DigitalLedControl(3);break;caseKeyBACK:DigitalLedControl(4);liang=--liang%12;Dogs102x6_setBacklight(liang);break;case KeyMEU:DigitalLedControl(5);break;case 0:break;default:break;}}void main(void){SystemInit();GameBackground(); DisplayRamClear();GameMapClear();showCubeMap();while(1){TetrisGame();}}#pragma vector=TIMER1_A0_VECTOR__interrupt void TIMER1_A0_ISR(void) {randomNumber=++randomNumber%100; if(downflag==0)timeA++;if(timeA==(10-Speed)*10){timeA=0;downflag=1;}}</maxlie;lie++)<></maxhang;hang++)<> </mapwide;j++)<></maphigh;i++)<></mapwide+2;i++)<> </maphigh+1;i++)<>。
毕业设计开题报告基于单片机实现的俄罗斯方块游戏系别:班级:学生姓名:指导教师:2009年 12月 18日开题报告填写要求1.开题报告作为毕业设计答辩委员会对学生答辩资格审查的依据材料之一,应在指导教师指导下,由学生在毕业设计工作前期完成,经指导教师签署意见、专家组及系主任审查后生效;2.开题报告必须用黑墨水笔工整书写或按教务处统一设计的电子文档标准格式(可从教务处网页上下载)打印,禁止打印在其它纸上后剪贴;3.毕业设计的开题报告应包括以下内容:(1)主要技术指标;(2)工作思路;(3)课题的准备情况及进度计划;(4)参考文献。
4.开题报告的撰写应符合科技文献规范,且不少于2000字;参考文献应不少于15篇,包括中外文科技期刊、教科书、专著等。
5.开题报告正文字体采用宋体小四号,1.5倍行距。
附页为A4纸型,左边距3cm,右边距2cm,上下边距为2.5cm,字体采用宋体小四号,1.5倍行距。
6.“课题性质”一栏:理工类:A.理论研究B.应用研究C工程设计D.软件开发E.其它经管文教类:A.理论研究 B.应用研究 C.实证研究 D.艺术创作 E.其它“课题来源”一栏:A.科研立项B.社会生产实践C.教师自拟D.学生自选“成果形式”一栏:A.论文B.设计说明书C.实物D.软件E.作品毕业设计开题报告课题题目基于单片机实现的俄罗斯方块游戏课题性质 A B C D E□■□□□课题来源 A B C D□□□■成果形式 A B C D E■□■□□同组同学开题报告内容(可另附页)见附页指导教师意见(课题难度是否适中、工作量是否饱满、进度安排是否合理、工作条件是否具备等)指导教师签名:月日专家组及系里意见(选题是否适宜、各项内容是否达到毕业设计(论文)大纲要求、整改意见等)专家组成员签字:教学主任(签章):月日附页:开题报告一、设计的目的与意义俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,作为最经典的游戏之一,它曾造成的轰动与经济价值可以说是游戏史上的一件大事。
毕业设计开题报告基于单片机实现的俄罗斯方块游戏
系别:
班级:
学生姓名:
指导教师:
2009年 12月 18日
开题报告填写要求
1.开题报告作为毕业设计答辩委员会对学生答辩资格审查的依据材料之一,应在指导教师指导下,由学生在毕业设计工作前期完成,经指导教师签署意见、专家组及系主任审查后生效;
2.开题报告必须用黑墨水笔工整书写或按教务处统一设计的电子文档标准格式(可从教务处网页上下载)打印,禁止打印在其它纸上后剪贴;
3.毕业设计的开题报告应包括以下内容:
(1)主要技术指标;
(2)工作思路;
(3)课题的准备情况及进度计划;
(4)参考文献。
4.开题报告的撰写应符合科技文献规范,且不少于2000字;参考文献应不少于15篇,包括中外文科技期刊、教科书、专著等。
5.开题报告正文字体采用宋体小四号,1.5倍行距。
附页为A4纸型,左边距3cm,右边距2cm,上下边距为2.5cm,字体采用宋体小四号,1.5倍行距。
6.“课题性质”一栏:
理工类:A.理论研究B.应用研究C工程设计D.软件开发E.其它
经管文教类:A.理论研究 B.应用研究 C.实证研究 D.艺术创作 E.其它
“课题来源”一栏:
A.科研立项
B.社会生产实践
C.教师自拟
D.学生自选
“成果形式”一栏:
A.论文
B.设计说明书
C.实物
D.软件
E.作品
毕业设计开题报告
附页:
开题报告
一、设计的目的与意义
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,作为最经典的游戏之一,它曾造成的轰动与经济价值可以说是游戏史上的一件大事。
这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾。
相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
虽然用单片机来设计一个简单的俄罗斯方块游戏程序似乎有点大材小用了,但这仅仅是一个单片机在嵌入式游戏方面的简单应用,正因为他的前景无可预计,所以才有这个设计,此次设计仅仅是为了举一个单片机在游戏上应用的一个简单例子,他可以很好的说明单片机功能的强大,更高的可控性和集成度高的好处,因此他可以在电子游戏方面成为一个不可计量的明日之星。
二、工作思路
1.实现的功能:
俄罗斯方块游戏规则的实现
2.特点:
采用单片机实现
具有便携性与易用性
三、计划进度
四、参考文献
[1] 张齐.杜群贵.单片机应用系统设计技术——基于C语言编程[M].北京:电子工业出版社,2004.
[2] Apress. Introduction to Visual Basic Programming [M].Professional Computing and Web Design, 2006.
[3] 杨元强。
酷比杯获奖作品选登《LEGO 俄罗斯》[J]。
“酷比杯”游戏策划大赛,2007.
[4] 周润景著.Proteus在MCS-51&ARM7系统中的应用百例[M].北京:电子工业出版社,2006.
[5] 游安弼, 李玉岐. 基于JavaBean组件模型的俄罗斯方块[R]. 北京:全国第四届Java 技术及应用学术会议,2001.
[6] Jason Lam.J2ME&Gaming[M]. Addison Wesley,2004.
[7] 高凌琴,陈青华. 俄罗斯方块游戏关键技术探讨[J]. 信息技术与信息化.2008.
[8] 荣钦科技编著,《Java 2 游戏设计》[M].北京:清华大学出版社,2004.
[9] 陈立伟,张克非,黎秀红著. 精通JAVA手机游戏与应用程序设计[M].北京:中国青年出版社, 2005-5.
[10]谭浩强. C程序设计.[M] 北京:清华大学出版社,2003.。