先说下我这个东西最主要的几块。

1.单片机用的是stc的,51内核,你首先要会这个···

2.用状态机实现按键。这个里面有别人写的技术帖子··

3.液晶是12864,2种控制器都做过,一个控制器是ST7920带字库的,一个控制器是KS0108不带字库的。2个的英文资料我都放在里面了。首先得弄懂液晶要怎么样和单片机连接。
要在液晶上面做游戏,推荐先看英文资料,一定要看英文,研究液晶读写时序和初始化方法,然后找别人的程序,实现液晶的基本操作,画点,写汉字什么的,读液晶···然后自己写程序实现液晶的所有基本操作。这样才能对液晶有充分的认识,才能开始在上面做游戏。有了这个基础,以后学别的液晶也会快的多。

4.菜单,游戏少不了要用到菜单,比如选择难度,选择地图什么的。我里面放了一个别人的论文,看了之后应该就会自己写了。(注意论文里面讲的是用函数指针实现菜单,但是KEIL这个环境下用51函数指针会很困难,推荐像我那样直接传菜单号)

5.贪吃蛇游戏,推荐先不要看别人的程序,自己在电脑上面下个贪吃蛇游戏,玩的时候就观察贪吃蛇游戏的特征···比如蛇在怎么动,蛇要怎么描述,是每个点都描述还是只要蛇头蛇尾···蛇转弯的时候怎么写?  对于上面的问题,可以参考别人的程序,然后就开始动手画图什么的表示出来这些过程,一个功能一个功能逐一实现。(推荐看带字库的那个程序,那个程序代码是最终优化版本。思路很清晰···)

6.液晶的动画,动画实际上就是图片一张一张的显示,我在里面放了一个把彩色照片黑白二值化的工具,可以找到自己喜欢的GIF动画,用提取工具把照片一张一张提取出来,然后黑白二值化,然后取模工具取模,然后实现···虽然过程蛮枯燥,但是效果还不过,也可以学到不少东西。

单片机源程序如下:

#include <12864.h>

#include

#define num 15


//用来描述蛇在液晶上面一个点的结构体

struct she

{

        unsigned char x,y,value;

        unsigned char direction;       

};


struct loop_queue  //利用循环数组实现循环队列,拐点不会超过15个。所以大小选15足以。

{   

        unsigned int front;

        unsigned int rear;

        unsigned int count;

        struct she dat[num];

};

//不熟悉数组实现循环队列的可以在纸上画一下操作过程


struct she tou,wei,food; //蛇的头尾节点  和食物点

struct loop_queue queue;//循环队列  蛇转弯则形成拐点 将拐点入队列  尾巴到达拐点则拐点出队列


unsigned char flag_exit_game; //返回标志  为1时  从贪吃蛇游戏返回菜单

unsigned char flag_game_over; //结束标志  为1时  显示游戏结束画面 同时使返回标志为1

unsigned char tcs_stop;//暂停标志

unsigned char tcs_nd; //难度标志

unsigned char tcs_dt; //地图标志

unsigned char tcs_key_flag;  //贪吃蛇在一次移动中   只允许捕获一次按键  也就是只能产生一个拐点

unsigned char tcs_key_state; //用于按键状态机的实现


unsigned int  tcs_df;//得分

unsigned int  tcs_highest_df;//最高得分···没有使用这个  因为不知道要怎么在运行时写单片机的ROM


          

void tcs_game();

void tcs_bianjie(unsigned int );  //贪吃蛇边界  

void tcs_game_initial();         //游戏初始化


void timer0_initial();          //定时器0初始化

void timer1_initial();          

void food_produce();          //产生食物


unsigned char test_point_exist(unsigned char x, unsigned char y, unsigned char value);


void queue_initial(struct loop_queue *q);  

void queue_in(struct loop_queue *q,struct she h)  ;

struct she queue_out(struct loop_queue *q)  ;


void wei_you();

void wei_xia();

void wei_zuo();

void wei_shang();

void tcs_game()

{

        struct she check;  //用与暂存蛇即将移动的点  从而进行判断

        unsigned char he;

        unsigned char hui,i;


        flag_exit_game=0;

        flag_game_over=0;

        tcs_key_state=0;

        tcs_df=0;

        tcs_stop=1;


        draw_lcd_picture(&tcs_picture[0]); //贪吃蛇游戏画面

        delay_ms(2000);

        clear_lcd();//清屏12864

        tcs_bianjie(tcs_dt); //贪吃蛇游戏边界

        tcs_game_initial();//贪吃蛇初始化  主要是设定蛇头蛇尾  并显示蛇

        timer0_initial(); //定时器0工作在方式2  8位自动装初值  只计数不中断 用来产生随机数

        timer1_initial(); //定时器1工作在方式1        16位     10ms中断一次扫描键盘


        do

        {

                food_produce();//产生一个随机数 即随即产生x y value3个值确定一个点为食物

                he=test_point_exist(food.x,food.y,food.value);//检测产生的点的地方是否已经有点存在

        }

        while(he==food.value);//如果随机数产生在蛇的身体以及边界上 则重新再产生一个  

        draw_lcd_point(food.x,food.y,food.value);//显示食物 先读取这个点所在8位的情况 以免破坏现场

       

        queue_initial(&queue);//初始化循环队列  使队列空  front rear 即头尾指针为0

        check.x=0;

        check.y=0;

        check.value=0;

        check.direction=0;

        for(i=0;i                queue.dat[i]=check;


        while(1)

        {

                if(flag_exit_game==1)//如果游戏过程中按下返回键  则立即结束游戏  返回菜单

                        break;

                if(flag_game_over==1)

                        break;

               

                ET1=1;   //允许扫描按键          贪吃蛇游戏难度决定蛇2次移动之间的间隔时间  也就是检测按键的时间

                tcs_key_flag=0; //允许捕获按键  在检测按键时间内  只允许生产一个拐点  即捕获到一个有效的

                                                //按键以后  就置一这个变量 不允许再增加拐点

                while(tcs_stop==0);

                switch(tcs_nd)

                {

                        case 0:  {delay_ms(10); break;}

                        case 1:  {delay_ms(50); break;}

                        case 2:  {delay_ms(100); break;}

                }

                ET1=0;


                switch(tou.direction)//这个switch用来根据蛇头的x y value值以及当前蛇头移动的方向

                                                         //取出蛇头要到达的下一个点  存入check中  来判断是否撞墙 吃到食物 什么的···

                {       

                        case 0: {        

                                                check.x=tou.x;

                                                if(tou.y==63)  

                                                        check.y=0;

                                                else

                                                        check.y=tou.y+1;

                                                check.value=tou.value;

                                                 break ;

                                        }//->向右y+1 其他不变


                        case 1: {                                          //↓ 向下y不变

                                                check.y=tou.y;

                                                 if(tou.value==0x80)// value==0x80 则 x+1 value=0x01

                                                {

                                                        if(tou.x==7)

                                                                check.x=0;

                                                        else

                                                                check.x=tou.x+1;

                                                        check.value=0x01;

                                                }

[1] [2] [3] [4] [5]
关键字:51单片机  12864液晶屏  贪吃蛇 引用地址:51单片机+12864液晶屏贪吃蛇

上一篇:两路电机驱动 H桥L9110
下一篇:单片机非接触式智能测温系统程序

推荐阅读

芯片是半导体元件产品的统称。2017年我国进口集成电路额度达2601亿美元,逆差达1362亿美元,对外依存度高,CPU(中央处理器)、储存、高端通信、视频芯片每年进口集成电路额度较大,产业规模和企业规模与发达国家差距较大。由于信息系统泛技术最后落脚点都在芯片技术上,因此芯片技术的提升关乎许多高技术产业的发展,尤其是在我国大力建设5G网络的形势下...
据外媒报道,总部位于迪拜的科技和工程公司Almas Robotics推出了一款全新的“安全巴士”智能设备,可利用人工智能技术,跟踪校车上的乘客,以提高安全性。(图片来源:zawya.com)该设备与安装在车门上的多个传感器相连,而此类传感器可以监控乘客的移动,并记录进出车辆的乘客数量。一旦巴士的引擎打开,该“安全巴士”设备会自动激活,并且在一秒内开始...
据数据调查,目前中国的眼科医生只仅有 4 万人,要服务 14 亿人群的眼部健康是远远不够的。其资源缺乏加上分布区域不均,造成基层眼科医生严重匮乏,一医难求。 眼科诊断黑科技——“AI 智能眼科医生”来了随着 AI 人工智能技术的迭代,智慧医疗行业的持续优化,新型人工智能医疗工具可以部分替代医生进行疾病诊断。AI 智能眼疾检测仪作为新型 AI 智...
根据SellCell的最新调查,目前的苹果用户在很大程度上对iPhone 13系列和Apple Watch Series 7感到失望。该调查于9月23日至30日期间机型,调查目标是美国5000名18岁或以上的iPhone用户,询问他们对最近发布的iPhone 13系列和Apple Watch Series 7的看法。64%的用户表示‌iPhone 13系列“不是很”或“根本不”令人兴奋,而21.5%的用户认为‌iPhone...

史海拾趣

问答坊 | AI 解惑

仿真器在单片机多路开发中的应用

一般地,单片机开发采用“宿主机/目标机”方式(如图1所示)。首先,利用宿主机上丰富的资源及良好的开发环境开发和仿真调试目标机上的软件。然后,通过串行口将编译生成的目标代码传输下载到目标板上,并用交叉调试器在调试软件支持下进行实时分析 ...…

查看全部问答∨

lpc1114的原理图在不在开发板资料中?

如果谁有,能上传一份共享给我看看吗? 这两天想看看m0的东西了。 俺预订的一块板子,聚会那天有人会送给我。 想提前看看。…

查看全部问答∨

hf44b0板子的ADC测试代码部分以及LCD的理解,望高手指点迷津,小生不胜感激!

一、硬件简介 板子:恒丰s3c44b0x;lcd:HF160160-34D57(非触摸屏);ADC:8通道10位,芯片s3c44b0x内置 二、问题1 LCD手册中出现了4个我认为很奇怪的引脚,如下: 引脚13 :TP-L 触摸屏左端子 ;引脚14: TP-U 触摸屏上端子 ;引脚15: TP-R ...…

查看全部问答∨

windows目录问题

在WINCE下如何获取windows目录,也就是有没有GetWindowsDirectory的替代函数?…

查看全部问答∨

软件开发与软件工程联盟群成员列表

软件开发与软件工程联盟群成员列表 本帖被 supersoft 从 软件开发与软件工程社区管理版块 移动到本区(2007-03-08) 联盟群宗旨:建设合谐型软件开发与工程的社区-程序员的社区 社区主页:http://supersoft.ttsite.com 计算机专业书讯交流(计算机 ...…

查看全部问答∨

如何设置quartusII license实现远程桌面编译

小弟经常用笔记本连接台式机,现在想用远程桌面连接台式机上的quartusII 72sp3软件,发现license不允许,上网搜索后,发现有人说可以通过修改license,添加TS_OK一项,可没有给出具体参数,求教各位大侠解决方法。ps:网上说8.1版本有那种允许远程 ...…

查看全部问答∨

数字电话线接到模拟电话机,有这样的转换器吗?

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 我们的数字电话线需要转模拟信号接到模拟电话机上 ,请问大家:有没有这样的转换器? …

查看全部问答∨

出FPGA核心板和USB BLASTER 以及一些杂件

本帖最后由 ddllxxrr 于 2016-1-7 17:10 编辑 出FPGA 核心板1 块 主芯片:EP2C8Q208C8N,64MBit FLSAH ,64Mbit SDRAM ,EPCS4 配置芯片, 150元 USB Blasterr 一个 50元, 扩展板一块 50元, 5V/2A电源适配器一个 10元, 《 ...…

查看全部问答∨

请教!Flash程序段少数字节被随机篡改?

Flash程序段少数字节被随机篡改? 使用的是2232,程序烧写后开始可以正常运行,一段时间后发现程序已不能正常运行,读取Flash才发现程序段某几个字节被随机篡改了,好几片2232如此,由于电源段不稳,可能存在反复上电的情况,程序刚开始的时候也会 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved