本帖最后由 Robin_King 于 2012-11-14 19:13 编辑
112.gif (938.06 KB, 下载次数: 6)
下载附件
2012-11-14 12:39 上传
先上图,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源码:
TypingGameV1.0.zip
(3.39 MB, 下载次数: 302)
2012-11-14 14:43 上传
点击文件名下载附件
stm32源码
**************************************************************************************************************************
跨平台上具体移植方法及更新的软件,我会在本帖的后续更新中给出。
有不少BUG,还望大家多多批评指正!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
应该没难度,这是在裸机上的程序。我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
一周热门 更多>