【FPGA开源项目分享】街机弹球机的模拟

今天继续康奈尔大学FPGA 课程ECE 5760的典型案例分享——街机弹球机的模拟。

(更多其他案例请参考网站:

Final Projects ECE 5760icon-default.png?t=N7T8https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/

【FPGA开源项目分享】街机弹球机的模拟_第1张图片

1. 项目概述

项目网址

indexicon-default.png?t=N7T8https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2023/sec322_smc447_cc2698/sec322_smc447_cc2698/index.html

项目说明

该项目是实现经典的街机游戏——弹球机。使用DE1-SOC开发板上的滑动开关,玩家可以设置球的初始速度。然后,按下按钮将球释放到柜子中,球将根据其当前的速度和方向与周围的物体进行碰撞交互。玩家可以按下另外两个按钮来控制左右两个拨片,以尝试将移动的球保持在柜子中。分数根据球的比赛时长进行记录,当球离开柜子/显示器时游戏结束。此外,玩家还可以切换 DE1-SOC上的开关来启用/禁用艺术模式,艺术模式是让玩家可以根据球的路径在柜子上进行绘画。

【FPGA开源项目分享】街机弹球机的模拟_第2张图片

【FPGA开源项目分享】街机弹球机的模拟_第3张图片

2. 物理原理

将速度分解为 x 和 y 分量,负速度表示向显示屏上的 0,0 或屏幕的左上角移动,正速度表示向屏幕右下角移动。

【FPGA开源项目分享】街机弹球机的模拟_第4张图片

发射球时系统会根据滑动开关的设定来给球一个 y 方向的初速度,球的运动过程中要考虑重力对球的影响。比如在玩实际机器时,如果球没有足够的速度,由于箱体的角度,它会落回到弹簧上。

当球沿斜面向下移动,若不考虑摩擦、滚动、滑动等其他因素时,加速度方程只基于箱体的倾斜度。如下图所示,加速度的方向是朝向柜子的底部,大小等于重力乘以倾斜角的正弦值。这意味着需要在一定数量的循环后将 y 方向(即朝向显示屏底部)的速度增加 1。

【FPGA开源项目分享】街机弹球机的模拟_第5张图片

当球绕柜子移动与物体发生碰撞时,速度会在 x 和 y 方向上发生变化。当球从静止物体上弹起时,它会以与该物体撞击时相同的角度离开。

【FPGA开源项目分享】街机弹球机的模拟_第6张图片

为有效计算,只考虑当前速度矢量 [x 速度,y 速度] 和正在撞击的物体的单位法线矢量。然后将使用以下方程计算新的速度矢量:v' = 2*(n dot v)*n + v。

【FPGA开源项目分享】街机弹球机的模拟_第7张图片

3. 视频演示

原文里面有视频演示:

街机弹球机的模拟

4. 源码下载

  1. Appendix D - C Codeicon-default.png?t=N7T8https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2023/sec322_smc447_cc2698/sec322_smc447_cc2698/index.html#appendix_d

  2. Appendix E - Verilog Codeicon-default.png?t=N7T8https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2023/sec322_smc447_cc2698/sec322_smc447_cc2698/index.html#appendix_e

你可能感兴趣的:(【FPGA开源项目分享】,fpga开发)