拉登是我罩的队_第三周_需求改进&原型设计
需求改进&原型设计
1. 需求&原型改进
1.1硬件部分
(1) 硬件部分分为主机和遥控器,分别由两个单片机进行控制。
(2) 单片机1:负责显示游戏的界面。使用数码管显示当前得分,使用不同颜色LED灯表示游戏过程中和游戏结束,使用液晶屏显示界面,这个液晶的界面包括显示游戏区域、下一个方块、得分、排行榜。另外还配有蜂鸣器,当方块可以消除一行或多行的时候,蜂鸣器鸣响一秒;当游戏结束的时候,蜂鸣器鸣响三秒。
(3) Ampire12864液晶:本程序所选择的LCD是AMPIRE128×64的汉字图形型液晶显示模块,可显示汉字及图形。
(4) 单片机2::负责控制遥控器操作。按键除去复位按键之外有六个:确定,左,右,加速,旋转,暂停。用户只需要操作遥控器则可进行游戏。用户根据按下“左,右”键来控制降落方块的位置和形状;通过按下“加速”键加速降落方块的移动;通过按下“旋转键”来控制降落方块的形状。
(5) 通信:主机与遥控器之间使用 I2C 通信,实现遥控器控制方块的移动及旋转。这个I2c通信使用at24c02芯片作为中介,主要通过I2C通信把信息发给e2prom暂时保存起来,然后e2prom也使用i2c通信方式把信息发送给另外一个单片机。I2C通信是硬件部分的亮点。
(6) AT24C02芯片:排行榜和通信都有用到AT24C02芯片,记录所有在该程序进行游戏的得分数据,即使是断电,得分数据依然保存在e2prom存储器中。
AT24C02芯片简介:AT24C02为I2C总线串行EEPROM储存器,它的存储容量为4k位(4096位),存储器的内部结构为512×8位,芯片具有写保护,可靠性高,擦写次数可达100万次,数据断电保存100年不变。
1.2. 软件部分
(1) 降落的方块真正的随机化,可以实现随机降落不同形状的方块。并且可以在屏幕上显示下一个。
(2) 降落的方块不可以越过障碍方块。当已落下的方块高度超过屏幕高度的时候游戏结束。
(3) 当已落下的方块之间填满一行或多行的时候,则可以得到相应的得分,当消去1行的时候得1分;消去2行得2分;当同时消去3行的时候,得到6分;同时消去4行的时候,得到8分。
(4) 实现多种关卡,不同的起始情况,第二关加快了游戏速度和增加了障碍方块。在达到指定分数后显示胜利标题,并切换进入下一关卡。
(5) 降落的方块在越过一定位置的时候有几率切换方块的形状,以此来增加游戏难度和丰富游戏内容,增加可玩性。
(6) 实现了排行榜,得分数据通过i2c通信方式写进e2prom存储器中。
2. 系统设计
2.1. 总流程
(1) 程序初始化部分
a) 程序一开始就启动定时器,但是没有开中断,为了通过定时器获取随机数种子,而且只有在游戏进入按键循环的时候才需要靠中断来控制方块下降和刷新游戏区域。
b) LCD液晶也初始化,开屏幕显示、开光标、设置显示起始行、设置页地址、列地址。
c) I2c的数据线和时钟线拉高,随时准备通信。
d) 控制数码管显示分数零。
(2) 游戏主体
a) 按键循环,获取按键信息控制方块的移动旋转快速下降和游戏暂停。
b) 当程序检测游戏结束或者得分超过指定分数的时候,分别设置游戏结束标志位和过关标志位,while循环检测到这两个标志位就退出按键循环。
c) 如果是游戏结束标志位,则新一轮游戏速度不变、没有障碍方块,如果是过关标志位,则加快游戏速度、设置障碍方块。
2.2. I2C通信
两个单片机之间使用i2c通信。一般单片机之间不适用i2c通信,因为单片机本身不具备i2c总线接口,所以只能根据I2c协议模拟时序进行通信。初步设想单片机2负责把按键数据使用i2c通信方式发送到e2prom的固定地址,然后e2prom也使用i2c通信把信息传给单片机1,然后单片机1把一个无关数据放回该地址通知单片机2已经收到了数据。
2.3数据存储
1. 使用I2c通信和e2prom AT24C02芯片存储数据。
2. 单片机2的按键数据通过i2c通信写进e2prom的特定地址,单片机1每次需要按键数据的时候就通过这个地址取得数据。
3. 游戏初始化的时候,使用i2c通信方式读取e2prom中的分数排名信息,然后将排行榜显示在液晶上面。
4. 游戏结束的时候,使用i2c通信方式读取e2prom中保存的得分排名数据,判断得分是否能进排行榜,如果能则把数据i2c通信写进e2prom。
2.4 编码
使用编码的思想。将方块数据编码为unsigned int两个字节16位类型,16位代表4*4,刚好可以代表一个方块,并且每一位(也就是方块的每一个方格点)代表液晶的4*4的像素点。游戏区域编码为一个unsigned int数组,数组元素为16个,也就是16行,每一位也代表液晶的4*4像素点。16个整型数组就代表的整个游戏区域,能代表液晶游戏部分40*64的像素点。所有的游戏操作移动旋转、判断覆盖、消行、游戏结束等等全部进行编码成整形数据,直接对这个数组操作,而不是直接对液晶操作。
2.5解码
每隔一定时间将游戏区域数据进行解码,反应在液晶上面。由于液晶每次写数据都是在某一页的某一列写一个字节,也就是竖的八行,写数据是字节倒序的,方块方格点代表液晶的4*4像素点,所以每次读取编码的竖着的两位(方格点),若是11,则在液晶部分依次写1111 1111, 1111 1111, 1111 1111, 1111 1111。若是10,则在液晶部分依次写0000 0000,0000 0000,1111 1111, 1111 1111。若是01,则在液晶部分依次写1111 1111, 1111 1111,0000 0000,0000 0000。若是00,则在液晶部分依次写0000 0000,0000 0000,0000 0000,0000 0000。依此类推,直到游戏区域全部刷新。
2.6软件模拟I2C通信协议
51单片机本身不具备I2C总线,不支持I2C通信,要使用I2C通信就要对单片机根据I2C协议的时序进行模拟。一般单片机与单片机之间的通信方式是串口通信。那种通信能实现即时通信,不需要使用中介,不需要延时。
排行榜的得分信息也是用I2c通信方式保存在rom存储器中,所以即使是断电,信息仍然能保留不丢失。
2.7 编码用最少的数字保存全部信息
用最少的数字保存全部信息,只需要18个整型变量就可以表达整个游戏的所有内容和数据。在需要的时候进行解码。将方块和游戏区存储在整型数组中,每一位代表液晶的4*4像素点,移动、旋转、下降都是对这个数组进行操作,而不是直接对液晶进行操作。定时器每隔一定时间对这些数据的每一位进行解码,检测每一位,若该位为1则在液晶上写4*4的黑点,若该位为0则在液晶上写4*4的白点,把每一位数据都反应在液晶上。这样处理起来很容易,而且可以成为一个通用的方法,以后处理液晶我都可以使用这种思想,把区域编码,用数组存储,然后再在液晶外面、数组里面进行任何我需要的操作,需要显示的时候,再把信息解码显示到液晶上面。
2.8其他优化操作
使用定时器中断每隔一定时间刷新游戏区域,而不是对整个液晶进行重绘。
只有在定时器中断刷新游戏区的时候才需要操作液晶,其他任何游戏操作都不需要处理液晶的实现,只是对数组这个简单的地方进行操作。
3. Alpha任务分配计划
通信:软件模拟I2C通信协议:郑鉴
硬件搭建:郑鉴
中断、定时器控制、操作系统:郑鉴
音频模块:软件解码MP3文件需考虑解码速率与CPU主频、文件系统、DMA控制数据传输:郑鉴
算法:旋转算法、消行算法、游戏结束算法:余伟淇
界面:余伟淇
测试:余伟淇
文档:余伟淇
4. 测试计划
开发前:对所有函数进行先测试后编写进行单元测试,DE所有警告
开发后:由于是游戏,所以直接试玩
拉登是我罩的队_第三周_需求改进&原型设计的更多相关文章
- C++轮子队-第三周(需求改进&原型设计)
需求改进&原型设计 一.需求完善 (一)系统功能(补充) 图形界面(图片如下图所示:) 根据需求与组内讨论结果,现归纳图形界面方面需要的设计与相应功能: 数据-图形界面中间类: 数字方块类 N ...
- 团队博客-第三周:需求改进&系统设计(科利尔拉弗队)
针对课堂讨论环节老师和其他组的问题及建议,对修改选题及需求进行修改 需求规格说明书: 1.打开网页,弹出询问时候创建账号.是:分配数字组成账号,用户填写密码,确定登录进入首页:否,用已有账号登录(传参 ...
- 莪的拽、像省田各号①样没尽頭队——需求改进&原型设计
需求改进&原型设计 1. 需求&原型改进 经过老师的指导以及组内成员的讨论后,我们认为之前的需求分析已经比较准确完备. 根据电子宠物的形象结构特点,以及模拟屏幕的空间限制,我们设计出了 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 ...
- Python笔记_第三篇_面向对象_9.Python中的"get"和"set"方法(@property和@.setter)
1. 限制访问的问题: 如果学过C# 语言的我们可以知道C# 语言有get和set方法.我们之前想要获取父类中的私有变量,只能通过写一个set和get的函数进行访问或者通过类生成的新关键字来访问私有属 ...
- Python笔记_第三篇_面向对象_4.单下划线和双下划线
说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...
- Python笔记_第三篇_面向对象_2.第一个Python类
1. 设计一个类: 设计一个类主要从三个方面进行考虑: 第一:类名:类名要见名知意.首字母大写. 第二:属性. 第三:方法. 备注:在Python中有些东西并不是绝对化的事情,有些根据Python社区 ...
- 网易云课堂_程序设计入门-C语言_第三周:循环_2数字特征值
2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...
- 网易云课堂_程序设计入门-C语言_第三周:循环_1奇偶个数
1 奇偶个数(5分) 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数. 输入格式: 一系列正整数,整数的范围是(0,1 ...
随机推荐
- Voting and Shuffling to Optimize Atomic Operations
2iSome years ago I started work on my first CUDA implementation of the Multiparticle Collision Dynam ...
- Python基础-变量作用域
1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...
- FIR数字信号滤波器
数字滤波器 在信号处理领域中,对于信号处理的实时性.快速性的要求越来越高.而在许多信息处理过程中,如对信号的过滤.检测.预测等,都要广泛地用到滤波器. 其中数字滤波器具有稳定性高.精度高.设计灵活.实 ...
- Linux下的Memcache安装,启动
一.linux安装memcache 1. 如果通过下载源码进行安装,则需要下载最新版本http://memcached.googlecode.com/files/memcached-1.4.13.ta ...
- elasticsearch pinyin 拼音分词器
安装pinyin分词 地址:https://github.com/medcl/elasticsearch-analysis-pinyin PUT py_test { "index" ...
- linux命令echo和cat比较
当前主要比较echo 和 cat的重定向功能 1.echo 1 > /proc/xxx 解析: echo 进行重定向的时候,仅仅是将字符"1" 输出到 /proc/xxx文件 ...
- python中对 函数 闭包 的理解
最近学到 函数 闭包的时候,似懂非懂.迷迷糊糊的样子,很是头疼,今天就特意查了下关于闭包的知识,现将我自己的理解分享如下! 一.python 闭包定义 首先,关于闭包,百度百科是这样解释的: 闭包是指 ...
- maven项目如何启动运行---发布到tomcat中
前面两篇文章: 新建maven框架的web项目 以及 将原有项目改成maven框架 之后,我们已经有了maven的项目 那么 maven项目到底怎么启动呢 如果我们直接在myeclipse中按以前的启 ...
- tomcat注册成windows系统服务
一.下载Tomcat Tomcat可以从http://tomcat.apache.org/网站下载,选择任意版本,在 Binary Distributions 下的zip包既是. 二.配置Tomcat ...
- openstack 租户ip 手动配置 openstack静态租户ip
作者:[吴业亮]云计算开发工程师 博客:http://blog.csdn.net/wylfengyujiancheng 1.综述: 在日常开发和生产环境中经常需要将OpenStack虚拟机配置一个静态 ...