基于FPGA的汉诺塔游戏
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
汉诺塔游戏规则简单,对外部要求不高,不仅能增强思维能力,而且能提高智力,在休闲中使自己得到真正的长进。
使用Verilog HDL 以及VHDL语言,运用FPGA中的VGA显示原理以及键盘控制原理,开发汉诺塔简易游戏,力争使程序短小精悍,简洁明了,游戏界面美观,容易操作,功能丰富,趣味性强。
首先,需要为这个游戏建立一个“地图”,确定底座、塔、圆盘以及确认点的位置,这个地图实际就是一个坐标系,为了方便,我们使用了固定(640*480)的地图。分析计算后,通过像素点的坐标确认好每个元素的位置以及所有可能出现的情况。比如,一个指定区域本来显示一个圆盘,然而当人为控制其向上、向下、向左或向右移动后,就要转换成空地,各个状态之间的转移关系并不复杂,在这里不再一一赘述。
1模块控制
其次,需要记录每一个圆盘的当前坐标和键盘的信息,因为地图上每块区域的改变都是由键盘控制圆盘的移动引起的,故而需要记录其位置。除此之外,还需要一个控制点用来指定当前需要移动圆盘所在塔的位置。
2VGA显示控制
最后,我们考虑了整个界面如何被显示出来。实际上这个问题非常简单,只要显示模块将指定的坐标数据读出来,将不同的颜色分配到指定的区域,转换成VGA信号,并在显示器的相应位置显示出来就可以了。
经过以上分析,整个游戏的逻辑结构已经基本上清晰了,下面我们将根据这个来进行系统的设计。
1.详细设计程序
输入输出信号:
2.功能描述
接收滤波键盘产生的数据,提取扫描码,对接收来的数据区分是通码还是断码,并向信号转换模块传送。
3.模块封装
信号转换模块
1.详细设计程序
输入输出信号:
2.功能描述
接受信号输入模块传送来的键盘通码或断码,对其判断当前操作是向左?向?向上?还是向下?将操作信号转换为信号kb(“1”表示键盘向上,“2”表示键盘向下,“3”表示键盘向左,“4”表示键盘向右),并将信号kb传送给核心控制模块。
3.模块封装
3.2.3核心控制模块
1.详细设计程序
输入输出信号:
2.功能描述
接收的信号kb判断键盘的操作(上下左右),根据当前操作改变指定圆盘的位置,并将位置信号传递给VGA显示模块。
3.模块封装
VGA显示模块
1.详细设计程序
输入输出信号:
圆盘显示程序:
begin
if ((xpos>=pointx1)&&(xpos<=pointx2)&&(ypos>=pointy1)&&(ypos<=pointy2)) begin//圆点
r=pointr;
g=pointg;
b=pointb;
end
else if ((xpos>=towerax1)&&(xpos<=towerax2)&&(ypos>=toweray1)&&(ypos<=toweray2)) begin//塔a
r=towerar;
g=towerag;
b=towerab;
end
else if ((xpos>=towerbx1)&&(xpos<=towerbx2)&&(ypos>=towerby1)&&(ypos<=towerby2)) begin//塔b
r=towerbr;
g=towerbg;
b=towerbb;
end
else if ((xpos>=towercx1)&&(xpos<=towercx2)&&(ypos>=towercy1)&&(ypos<=towercy2)) begin//塔c
r=towercr;
g=towercg;
b=towercb;
end
else if ((xpos>=28)&&(xpos<=612)&&(ypos>=420)&&(ypos<=480)) begin//底座
r=fundr;
g=fundg;
b=fundb;
end
else if ((xpos>=145)&&(xpos<=161)&&(ypos>=80)&&(ypos<=420)) begin//l柱子
r=fundr;
g=fundg;
b=fundb;
end
else if ((xpos>=310)&&(xpos<=326)&&(ypos>=80)&&(ypos<=420)) begin//m柱子
r=fundr;
g=fundg;
b=fundb;
end
else if ((xpos>=478)&&(xpos<=494)&&(ypos>=80)&&(ypos<=420)) begin//r柱子
r=fundr;
g=fundg;
b=fundb;
end
else begin//背景全黑
r=8'b00000000;
g=8'b00000000;
b=8'b00000000;
end
end
2.功能描述
从核心控制模块接收圆盘的位置信号,利用VGA显示图像原理转为RGB三色的信号以及像素点坐标,连接显示器显示当前状态。
3.模块封装
基于FPGA的汉诺塔游戏相关推荐
- python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
汉诺塔游戏:看谁能在短时间内将排好顺序的圈,按同样的顺放在另一根柱子上,每次只能动一个. 今天用python搭建汉诺塔小游戏(简约版) 代码亲测有效!源代码如下: #左中右塔用一个列表存储 left ...
- 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现
递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...
- Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏
Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...
- 汉诺塔游戏的python实现——递归函数
汉诺塔游戏python实现 def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b ...
- Python案例:汉诺塔游戏
Python案例:汉诺塔游戏 游戏规则: (1)一次只能移动一个环 (2)小环必须在大环之上
- CCF NOI1070 汉诺塔游戏
问题链接:CCF NOI1070 汉诺塔游戏. 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 汉诺塔由编号为1到n大小不同的圆盘和三根柱子a,b,c组成,编号越小盘子越小.开 ...
- 要理解递归,得先理解递归--用Java语言由浅入深讲解汉诺塔游戏
2019独角兽企业重金招聘Python工程师标准>>> 一.递归是什么? 定义:程序调用自身的编程技巧称为递归.它分为调用阶段和回退阶段,递归的回退顺序是它调用顺序的逆序. 递归使用 ...
- python玩汉诺塔游戏攻略
def hanio(n,x,y,z):'汉诺塔游戏攻略'if n == 1:print('%s-->%s'%(x,z))else:#将n-1个从x放到y上 借助zhanio(n-1,x,z,y) ...
- 【python】 turtle实现汉诺塔游戏动画过程
[python] turtle实现汉诺塔游戏动画过程 import turtle class Stack: #面向对象,定义一个类def __init__(self):self.items = []d ...
最新文章
- 升级Jekyll 3.0
- Java学习总结:36(日期处理类)
- 如何查看python解释器位置_Python:查看解释器的位置
- 历时数十载,20 位顶级大咖带你践行大数据与 AI(具体议程出炉)
- rust 睡袋怎么用_买过50+件睡袋的妈妈推荐这几款!
- struts2之单个文件上传(特别推荐)
- 深度学习(2)回归问题
- LeetCode 198, 213 House Robber
- 《重大技术需求征集系统》项目目标文档
- linux动态库编译gcc,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(3)...
- 为什么Zappos花钱让新员工走人?
- python的参数传递机制
- 拓端tecdat|R语言ARIMA集成模型预测时间序列分析
- HPC+AI融合发展的挑战和应对方法探讨
- hsql导入mysql_在测试过程中使用HSQL数据库
- HTML文档繁转简,excel简繁转换 切换到“审阅”,点击“繁转简”:
- Microsoft OneNote for MacOS 输入中英文字体自动改变
- 做一个微信消息的日期展示
- 【原】移动web资源整理
- 敏捷领导力系列介绍--全景领导力LCP的学习心得