基于Gamebuino设计的算盘小游戏

  • 目录
  • 一、引言
    • 1.1技术背景
    • 1.2实验意义
  • 二、实验内容
    • 2.1硬件搭建
      • 材料准备
      • 搭建步骤
    • 2.2软件设计
      • 2.2.1实现功能
      • 2.2.2功能设计
  • 三、实验结果和分析
  • 四、试验改进
  • 五、实验总结

目录

一、引言

1.1技术背景

Gamebuino 让玩家可以在一个小巧的设备上玩他们喜欢的像素化游戏,并学习编程来制作自己的游戏。Gamebuino 可以装在口袋里,里面有很多免费的独家游戏,电池可以持续使用一整天。一个可选的micro SD卡可以容纳更多的游戏,玩家可以在几秒钟内切换游戏。你可以在这个平台上DIY自己的项目。

1.2实验意义

通过参考手册、实例游戏代码的分析,到搭建自己的游戏机创新一个小游戏。在实验过程中锻炼了我们的自学能力和学行合一的实验精神。

二、实验内容

2.1硬件搭建

材料准备

  • 单片机:ATmega328P,ArduinoUNO
  • 显示屏:Nokia5110液晶屏,84*48
  • SD卡:2G存储容量一下
  • 按键:7个
  • 面包板:2个,8.5cm*5.5cm
  • 杜邦线若干
  • USBtinyISP下载线一根
  • SD卡模块 CH376S
    只准备了实现最基础功能的元器件,其他元器件可以参见官方说明Hardware.

搭建步骤

  • 将下载好的gamebuino_boot文件复制到C:\arduino\hardware\arduino\avr\bootloaders目录下
  • BootLoader烧写:在正常运行的情况下,通过USB虚拟COM端口对Gamebuino进行编程,选择设备为“Arduino UNO”。但是,如果希望使用外部硬件程序(例如,另一个Arduino)来编写它或上传引导加载程序,那么必须在Arduino包中编辑board .txt文件(C:\arduino\hardware\arduino\boards.txt)在后面加上。
gamebuino.name=Gamebuinogamebuino.upload.protocol=arduinogamebuino.upload.maximum_size=30592gamebuino.upload.speed=115200gamebuino.bootloader.low_fuses=0xffgamebuino.bootloader.high_fuses=0xdagamebuino.bootloader.extended_fuses=0x05gamebuino.bootloader.path=gamebuino_bootgamebuino.bootloader.file=gamebuino_boot.hexgamebuino.bootloader.unlock_bits=0x3Fgamebuino.bootloader.lock_bits=0x0Fgamebuino.build.mcu=atmega328pgamebuino.build.f_cpu=16000000Lgamebuino.build.core=arduinogamebuino.build.variant=standard
  • USBTinyISP插口插入板子上ICSP
  • 打开ardunio IDE ,工具->开发板->GameBuino,工具->编译器->USBtinyISP,烧入引导程序

    当时不知道为什么报错,但是最后还是运行成功了,至今不明白什么意思。
  • 按照官方原理图慢慢连线

  • 最后把官网下载的小游戏导入SD卡,硬件部分就算成功了

2.2软件设计

2.2.1实现功能

尽管你掌握了算盘的原理打算盘就会是一件很简单的事,但是现在很多人都不会打算盘。这个小游戏实现的功能即玩家输入数字,可以自动在屏幕上模拟出该数字在算盘上应该如何表示。

2.2.2功能设计

  • (1)整体屏幕
    左边部分是算盘界面,用drawmap()函数实现,右边部分是ResetDisplay()函数实现的数字显示界面。

  • (2)drawmap()函数由gb.display.drawFastVLine和gb.display.drawFastHLine画出的框架和drawmap()函数画出的算珠组成。前两个函数都是库中自带的画直线功能在此不再赘述。因为屏幕大小原因,所以算盘只设置了个十百千万五位数。算盘是一个43*43的正方形,由5条垂直直线和一条水平分割线组成(刨除了周围的四边),垂直线的x坐标起始为5步长为10这样一个设置,每一个算珠的大小是5*4,上下两个相邻算珠的y坐标差值是6(因为一列总共6颗珠子再加上2个空位即有8位,48/8=6)。所以可以算出珠子的(x,y)坐标表达式。

void Drawbead(){           //画算珠//ResetDisplay();for(int x=0;x<40;x++){if(gameState.boardabacus[x]==1){        //值有效时才画珠gb.display.drawBitmap(((x)%5)*10+3,ceil((x+1)/5.0)*6-5,zhuzi);    //(x,y,图形)}}
}

  • (3)ResetDisplay()函数参见上一篇Gamebuino小游戏2048代码loop部分分析博客。
  • (4)对用户输入的数字进行接收和拆解。Gamebuino中有gb.keyboard()函数可以让用户输入数字,但是它返回的值是一个char类型的数组。用atoi函数将输入数据转换成一个int型的变量,再写一个 split()函数将整形变量按个十百千万位拆分入数组。这里要补充说明一下,之前建立了一个gamestate的结构体有三个比较重要的元素。
extern const int SIZE=40;
typedef struct Gamestate{int boardabacus[SIZE];  //储存算盘上40个位置的状态,值为1表示这里有算珠,0则表示空char text[4];       //gb.keyboard()后得到的char数组int split[5];       //拆分成个十百千万存入该数组
}GameState;
  • (5)对数据进行更新和新排布,输入的新数值要先转换为 boardabacus[]数组数值的更新,再重新drawmap()实现画面更新。数据的更新用到了 arrange()和below()两个函数,分别对算盘分割线上下进行排序。
void arrange(){                  //重新排序算盘矩阵for(int i=0;i<5;i++){if(gameState.split[i]>=5){      //分别读取个十百千万位数字与5比大小gameState.boardabacus[14-i]=1;    //算盘的第三行对应列的珠子值为1gameState.boardabacus[9-i]=0;     //算盘的第二行对应列的珠子值为0below(gameState.split[i],i);      //算盘分割线下的珠子的排序}else{below(gameState.split[i],i);}}
}
void below(int x,int line){             //下部分算盘的排序,x是该位数数值,line是第几列int cup;int k=1;cup=x%5;           //计算分割线下方有几颗珠子需要移动for(int j=0;j<cup;j++){k=19+j*5;      //跳转到对应行gameState.boardabacus[k-line]=1;    //上面一行对应列值为1gameState.boardabacus[k+5-line]=0;   //原来所在的那一行的对应列值为0}
}

三、实验结果和分析

在官方的学习网站里找到一个网页版的模拟器,在里面运行.hex和在实物上运行效果一致。

四、试验改进

作为一款小游戏它实在没有可玩性,汇报完后根据老师的指导建议决定加上延时效果,这样显示就是每拨动一颗算珠一个效果,演示性更强。(后续改动再更新)

五、实验总结

这次实验从硬件开始,去慢慢了解每个模块的驱动和各个功能,再到将它们组合到一起并录入游戏进行测试。从分析2048小游戏的代码,到逐行构建自己的小游戏都是一个摸石头过河的状态,期间历尽无数失败,细化问题到每一个点再去检测错误,都是对自我能力的新考验和锻炼。也培养了自己动手的热情,结合理论的实操能力的提升。

基于Gamebuino设计的算盘小游戏相关推荐

  1. 基于STM32设计的拼图小游戏

    一.环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 LCD显示屏:  正点原子的TFT 3.5寸显示屏 完整工程代码下载地址: https://download.csdn. ...

  2. java 2048游戏_JAVA2048游戏 本课程设计是基于java语言的2048小游戏设计 联合开发网 - pudn.com...

    JAVA2048游戏 所属分类:游戏 开发工具:Java 文件大小:789KB 下载次数:4 上传日期:2020-11-23 10:57:11 上 传 者:滴滴滴大萌 说明:  本课程设计是基于jav ...

  3. 基于JavaSwing开发吃豆子小游戏 课程设计 大作业源码

    基于JavaSwing开发吃豆子小游戏:   (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse/Eclipse/idea+Jdk 运行效果图: 基于JavaSwing开发 ...

  4. 基于JavaSwing开发潜艇大战小游戏 课程设计 大作业源码

    基于JavaSwing开发潜艇大战小游戏:  (大作业) 开发环境: Windows操作系统 开发工具: Eclipse+Jdk 运行效果图: 基于JavaSwing开发潜艇大战小游戏:  (大作业) ...

  5. 基于STM32的贪吃蛇小游戏

    基于STM32的贪吃蛇小游戏 初学32一个月,学的并不多,便想着做一个贪吃蛇小游戏,因为有51单片机做贪吃蛇的经验,所以实现出来并不困难. 作品简介 游戏面版将在4.3寸480*800)液晶上显示,初 ...

  6. 基于Stm32f407 的贪吃蛇小游戏【正点原子-探索者开发板】

    基于单片机stm32f407的单机小游戏----贪吃蛇小游戏 1.介绍 这是我花一个星期完成的一个简单地单机贪吃蛇小游戏项目,芯片是stm32f407,项目是基于正点原子-探索者开发板完成的,有需要的 ...

  7. python经典小游戏-用Python设计一个经典小游戏:猜大小

    码农那点事儿 关注我们,一起学习进步 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下 ...

  8. 20行python代码的入门级小游戏-用Python设计一个经典小游戏

    本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...

  9. python经典小游戏-用Python设计一个经典小游戏

    本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...

  10. 基于Java+Swing实现雷电小游戏

    基于Java+Swing实现雷电小游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 基于java的雷电游戏基本功能包括:敌方飞机随机飞行.我方飞机手动控制飞行,射击比拼,游戏 ...

最新文章

  1. PHP中file_exists与is_file,is_dir的区别介绍
  2. java面试-死锁产生、定位、修复
  3. Github 上 36 个最实用的 Vue 开源库
  4. sqlserver 导出mysql,sqlserver数据(表)导出到mysql
  5. VB 阿拉伯数字转换为中文大写数值函数
  6. 数据结构排序系列详解之四 快速排序
  7. 10个高效的摸鱼神器,你错过几个?
  8. java i 原理_Java I/O模型及其底层原理
  9. 使用Gitee和Sourcetree进行Keil版本控制
  10. 最好的 6 款 React 后台管理系统模板和框架
  11. 黑苹果 10.14.6 安装记录
  12. 示波器wvf导入matlab,运动控制系统实验
  13. 纯C语言编程实现数独解法
  14. 投入产出表之直接消耗系数和完全消耗系数计算--基于Excel
  15. ST官方的IIC实例解析(第一部分)
  16. Android基础总结(精华完整版)
  17. 软件架构设计原则-DIP依赖倒置原则
  18. phpcms mysql设置,PhpCms数据库管理设置教程 如何设置PhpCms数据库
  19. 微信小程序中使用Vant Weapp组件--以card为例
  20. 一种黑科技:珂朵莉树

热门文章

  1. 2012百度招聘笔试题目
  2. leetcode454. 四数相加 II
  3. 淋雨量matlab,最小淋雨量问题
  4. 台式计算机键盘灯打开方式,台式电脑开机时键盘灯不亮,必须要按一下Numlock才会亮,但系统没什么问题。怎么办?...
  5. 终端测试是硬件测试还是软件测试,移动终端软件测试基础知识
  6. python重启路由器_利用python重启路由器
  7. 知识图谱:【图数据库Nebula(一)】——Nebula简介
  8. srs流媒体服务器简单应用与实现
  9. TFTP文件传输NFS挂载ARM开发板移植Linux系统步骤
  10. linux centos fedora 安装LBP2900打印机 LBP6230dn LBP6240dn