搜索
bottom↓
回复: 41

用STM32实现的一个打字游戏(通过串口在超级终端上显示)

  [复制链接]

出0入0汤圆

发表于 2012-11-14 14:24:21 | 显示全部楼层 |阅读模式
本帖最后由 Robin_King 于 2012-11-14 19:13 编辑


先上图,GIF格式

做了一个打字游戏,只用到了串口这一外围资源(led可选),移植性好,移植到了STM32上,晒出来让大家指点一下,以便一块学习交流。

如果觉得上面图片不清楚,就看这个视频:http://v.youku.com/v_show/id_XNDc0MzM0NjYw.html

****************************************************************************************************************

游戏特点:


1.本游戏在STM32F103上实现,使用的软件平台是IAR 6.4。

    利用串口,在超级终端上显示,通过PC键盘获取输入。

    串口参数设置:57600 , 8 ,NONE , 1 。

2.以守阵地的地对空作战模式展现游戏形式,趣味性强。


3.游戏难度等级有7级,可以自行设定当前游戏等级。


4.游戏分有生存模式和正常模式,可以自由设定。


5.代码的可移植性高。可移植到许多平台上,已经在AVR32UC3A0512和STM32上实现移植。


6.游戏源代码开放,我会在后面根据大家要求放上下载源代码的链接,以方便一起学习交流!


**************************************************************************************************************


下面简单描述一下游戏设计思路:


这个游戏以防空作战的模式来增加游戏的趣味性。用从屏幕最上方出现的单个字符来表示伞兵,

以一个字符串来表示横向飞过的轰炸机,轰炸机在飞过的过程中投下用单个字符表示的炸弹。玩

家可通过键盘输入代表伞兵或炸弹的字符来击中目标,如果击中,就会从阵地上发射出用特殊

符号(如*)表示的炮弹来消灭目标。玩家也可通过连续输入轰炸机上的字符串来消灭轰炸机。

如果伞兵或飞机炸弹落在阵地上,那块阵地会被攻克而消失,如果所有阵地被攻克,则游戏结束。

每消灭一个敌方目标,会增加相应的分值,消灭轰炸机时,会得到较高的分值奖励。



**************************************************源代码下载链接*******************************************



不好意思,先前忘记clean工程了,所以有点大,现在把STM32的工程clean了一下,可以上传成附件了:

STM32源码:


**************************************************************************************************************************


跨平台上具体移植方法及更新的软件,我会在本帖的后续更新中给出。

有不少BUG,还望大家多多批评指正!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入296汤圆

发表于 2012-11-14 14:31:53 | 显示全部楼层
这是我布置全状态机培训的学生作业,作为全状态机开发的大型实例,有兴趣学习全状机开发的人,可以下载代码来参考下。

出0入0汤圆

发表于 2012-11-14 14:33:16 | 显示全部楼层
留爪印,帮顶。

出0入0汤圆

发表于 2012-11-14 14:37:05 | 显示全部楼层
记号,帮顶~~~

出20入70汤圆

发表于 2012-11-14 14:41:04 | 显示全部楼层
记号,帮顶~~~

出0入0汤圆

发表于 2012-11-14 14:48:39 | 显示全部楼层
mark!!!!!!!

出100入18汤圆

发表于 2012-11-14 15:01:17 | 显示全部楼层
做的挺好玩的嘛

出0入0汤圆

发表于 2012-11-14 15:06:41 | 显示全部楼层
搞个显示屏接上键盘还不错,用超级终端就不需要这东西了~

出0入0汤圆

 楼主| 发表于 2012-11-14 15:09:35 | 显示全部楼层
nongxiaoming 发表于 2012-11-14 15:06
搞个显示屏接上键盘还不错,用超级终端就不需要这东西了~

老师出这题目的主要目的不在于做游戏,而在于对一多任务程序设计及缓冲等设计方法进行训练。要是真做游戏,有比这更好的现成的东西。呵呵。

出0入0汤圆

发表于 2012-11-14 16:19:02 | 显示全部楼层
好厉害的说

出0入0汤圆

发表于 2012-11-14 16:28:49 | 显示全部楼层
呵呵,做作业哦

出0入0汤圆

发表于 2012-11-14 16:35:17 | 显示全部楼层
楼主头像好看,技术牛

出0入0汤圆

发表于 2012-11-14 17:11:26 | 显示全部楼层
给力。小时候玩过。

出0入0汤圆

 楼主| 发表于 2012-11-19 16:51:52 | 显示全部楼层
本帖最后由 Robin_King 于 2012-11-19 17:23 编辑

现在发布一下帖子的更新

更新的内容包括:

1.最新、最全的源代码
2.代码的详细移植方法

*****************************源代码更新内容及下载链接*********************************************
最新代码下载链接,解决了上一版本的几个错误。并将我使用的三个平台(ATmega32、AVR32UC3A0512和
STM32F103)的代码全放在了一起,以供大家学习交流。



文件中包括了移植本游戏所需要的全部文件,但底层的接口需要移植者根据自己的平台添加。

文件夹内容介绍:

在application中,包含了实现这个游戏的一些基本模块,但不包括底层的接口。
app_cfg.h中包含了整个项目中通用的一个配置。
main.c中,包含了游戏的主要控制函数,通过控制台进入游戏(输入game后回车)。
Examples中包含了笔者在学习中用到的三个平台的底层接口的例子及相应平台完整的工程包,相应的软硬件
信息都在里面有说明。

*******************************详细移植步骤****************************************************

移植方法:
1.在application中,自建led模块(建立方法以你所采用的编译器工程要求为准),模块中的led.h向外提供
LED1_ON(),LED1_OFF(),LED2_ON(),LED2_OFF()个接口。
2.在application中,自建serial模块,serial.h向外提供serial_in(char)和serial_out(char*)和uart_init()三个接口
,uart_init()完成系统波特率的设定等。
3.在顶层的app_cfg.h中,配置相应的文件,本示例的app_cfg.h中,提供了__MCU_AVR_32__,
__MCU_AVR_UC_3A__,__MCU_STM32_F103__三个用户定义标识,分别对应mega32、AVR32UC3A0512和
STM32F103三款芯片的配置。移植时根据自己的软硬件环境,修改或增加所需要的宏或头文件。
4.在项目中添加好这些文件,在编译器的工程配置中,加入经第3步配置后的合适自定义标识,之后编译、
调试、下载验证。

注意:硬件平台要保证有2K(含2K)以上的SRAM,20K以上的flash.



**************************************The end****************************************************************

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-11-19 17:16:57 | 显示全部楼层
游戏的操作方法:

1.通过串口连接好硬件后,用超级终端打开相应的端口。

注意:最好用超级终端,像SecureCRT、串口调试助手可能不支持本游戏的彩色显示。

2.在波特率什么的都设置正确,也连接正确的情况下,复位或让程序运行后,

会看到这样的标识:—>

就是模拟了一个控制台的样子,呵呵。

支持help 、clean 、test 、game四条命令,输完后回车执行命令。
控制台还支持F1和F3及向上向下的快捷功能。

3.执行game命令后,进入游戏

在游戏进行时,按ESC到游戏暂停界面,可通过向上、向下键进行选择,回车确认。

这些选项包括:继续、选择难度等级、运行新难度等级、选择游戏模式、退出游戏。

在游戏失败或游戏全部通关后,弹出的菜单提供两个选项:再来一次和退出游戏。





出0入0汤圆

发表于 2012-11-20 13:43:30 | 显示全部楼层
能否传一个MDK的工程呀,楼主

出0入0汤圆

发表于 2012-11-30 15:45:30 | 显示全部楼层
Robin_King 发表于 2012-11-19 17:16
游戏的操作方法:

1.通过串口连接好硬件后,用超级终端打开相应的端口。

楼主,想做一个MDK工程,不知道是否有难度,要怎么样移植 呢?

出0入0汤圆

发表于 2012-11-30 16:07:14 | 显示全部楼层
这个有意思

出0入0汤圆

 楼主| 发表于 2012-11-30 17:01:01 | 显示全部楼层
qzxy0927 发表于 2012-11-30 15:45
楼主,想做一个MDK工程,不知道是否有难度,要怎么样移植 呢?

应该没难度,这是在裸机上的程序。我MDK以前用过一次,不太熟悉。但这没关系,只要你熟悉就行。

你打开代码包,在把main.c中的内容做为你的主程序。之后把application中的所有模块都添加上,还有
别忘了各级的APP_CFG.H这个文件也都包含上。但在application中,没有led模块和serial模块,这两个算
作时这个游戏的驱动吧,对这两个模块要提供的接口是要根据你的平台自己写的。LED在这个游戏中其
实只是在MAIN.C中一个呼吸灯上用到,这是为了检查我的程序有没有堵塞(我的程序没用中断),
SERIAL就是提供基本的串口发送或接收字节的及初始化接口,但系统时钟和波特率的设定也在这个
模块中完成。你可以参看下我在Examples中给得三个平台的驱动例子。

之后就是你看下最顶层的APP_CFG.H,就是和MAIN.C在同一个文件夹下的那个,这个配置头文件中
的后面部分是条件编译,依据你平台的特殊性,增加或修改相应的内容,之后在你的项目属性设置
中的编译选项中添加上相应的宏。

如我以下代码:
#if defined (__MCU_AVR_32__)
#include<avr/io.h>
#include<avr/pgmspace.h>
#define MOVE_TIME_LONG            0x3FFF
#define MOVE_TIME_DEC             0x8EF
#define CONFIG_INIT()    do{ }while(0)

#define FLASH   PROGMEM

#elif defined (__MCU_AVR_UC_3A__)
#include <asf.h>
#include<avr32/io.h>
////***********************************************************
//// user define
////***********************************************************
#define MOVE_TIME_LONG            0x3FFF
#define MOVE_TIME_DEC             0x8EF

#define FLASH   const

#define prog_uint8_t      const uint8_t

#define memcpy_P(__p_chDes,__p_chSorc,__size_t)  memcpy((__p_chDes),(__p_chSorc),(__size_t))
#define CONFIG_INIT()    do{board_init();\
                            led_init();\
                            pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);}while(0)


如我在MEGA32平台上运行时,考虑到我用的编译器是AVR studio4,为了将一些字符串放到falsh里,
我要用到pgmspace.h中的一些函数,我便在__MCU_AVR_32__宏控制的条件编译下加入相应的一些
不同的配置,而共用的配置就在条件编译之外。

类似地设计其他编译条件。这样,我把程序移植到MEGA32上是,只要在项目属性的预编译设置中加
入__MCU_AVR_32__便可。

仿照上面的例子,你可以增加你自己平台的预编译宏,来添加你平台上所需要的信息。

我在另一个帖子中对这些内容也做了更新,如果有不相同的,可以参看以下帖子中的代码,或者回复一下,共同探讨。
另一个帖子:http://www.amobbs.com/thread-5509217-1-1.html

出0入0汤圆

发表于 2013-5-26 13:17:55 | 显示全部楼层
重新顶起

出0入0汤圆

发表于 2013-5-28 09:45:11 | 显示全部楼层
好贴,顶下

出0入0汤圆

发表于 2013-5-28 15:33:27 | 显示全部楼层
好贴.很有趣哦.感谢楼主分享

出0入0汤圆

发表于 2013-5-30 22:44:29 | 显示全部楼层
?还是没看懂,不过很厉害的样子

出0入0汤圆

发表于 2013-5-31 10:49:29 | 显示全部楼层
挺不错的

出0入0汤圆

发表于 2013-6-4 18:47:35 | 显示全部楼层
这种STM32的库哪里可以找到相关的资料?

出0入0汤圆

发表于 2013-6-4 20:31:20 | 显示全部楼层
好牛啊!!膜拜!!

出0入0汤圆

发表于 2013-8-9 07:34:24 | 显示全部楼层
1楼的"串口参数设置:57600 , 8 ,NONE , 1 。。"
NONE是指指什么?

出0入0汤圆

发表于 2013-8-9 08:48:03 | 显示全部楼层
好帖啊,怎么没人围观

出0入0汤圆

发表于 2013-8-9 11:13:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-8-11 17:32:53 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-8-19 10:18:09 | 显示全部楼层
高手!顶

出0入0汤圆

 楼主| 发表于 2014-1-4 23:13:03 | 显示全部楼层
chengpiaopiao 发表于 2013-6-4 18:47
这种STM32的库哪里可以找到相关的资料?

STM32库好找,不好找的是超级终端的传输协议,今天我找来了:

发布windows超级终端(HtperTermianl)的设置帮助及参考代码
http://www.amobbs.com/thread-5565516-1-1.html
(出处: amoBBS 阿莫电子论坛)

出0入0汤圆

发表于 2014-1-5 15:20:45 来自手机 | 显示全部楼层
Robin_King 发表于 2012-11-19 16:51  现在发布一下帖子的更新   更新的内容包括:

谢谢分享

出0入17汤圆

发表于 2014-1-5 15:51:18 | 显示全部楼层

记号,帮顶~~~

出0入0汤圆

发表于 2014-1-5 17:54:09 | 显示全部楼层
给力呀,记号

出0入0汤圆

发表于 2014-1-5 19:53:45 | 显示全部楼层
下来看看,哄哄

出0入0汤圆

发表于 2014-1-5 22:51:39 | 显示全部楼层
很好很强大
学习了

出0入0汤圆

发表于 2014-1-5 23:00:35 | 显示全部楼层
很强大 学些了

出0入0汤圆

发表于 2014-1-6 16:47:59 | 显示全部楼层
码扣,用STM32实现的一个打字游戏(通过串口在超级终端上显示)

出0入0汤圆

发表于 2014-1-7 11:51:48 | 显示全部楼层
人才啊。。这都能想到。。。

出0入0汤圆

发表于 2014-1-7 12:05:01 | 显示全部楼层
mark 多任务程序设计及缓冲等设计方法

出0入0汤圆

发表于 2016-7-22 14:39:02 | 显示全部楼层
MARK,很有意思,原来超级终端还可以这样用
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 02:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表