基于C51和OLED12864实现Goole小恐龙

在数字娱乐领域,Google小恐龙(T-Rex Runner)以其简单而上瘾的游戏机制赢得了广泛的关注和喜爱。这款内置于Chrome浏览器的离线小游戏,不仅为用户带来了乐趣,也激发了开发者们对其进行各种创新和扩展的灵感。本文将介绍一种基于C51单片机和OLED12864显示屏实现的Google小恐龙游戏。尽管受限于12864显示屏的显示特性,我们的实现依然能够展示出小恐龙的基本动作——行走和跳跃,尽管界面的流畅度和清晰度有所限制。

Proteus仿真的界面如下:

部分代码如下:

#include <reg52.h>
#include <intrins.h>
#include "oledxs.h"
#include "oledxkl.h"//图片字模存放在位置	
#define uchar unsigned char//用uchar表示unsigned char类型
#define uint unsigned int//用uint表示unsigned int类型
#define LEFT 2//方向定义:左
#define RIGHT 3//方向定义:右

extern uchar code BMPclr[];//图片清屏用
extern uchar code BMP1[];//图片外部变量什么,小恐龙1
extern uchar code BMP2[];//图片外部变量什么,小恐龙2
extern uchar code BMP3[];//图片外部变量什么,云
extern uchar code BMP4[];//图片外部变量什么,树
uchar bx,by,bmx,bmy;//图片坐标,图片移动坐标
uchar upflag,downflag;//跳跃状态标志,上升状态,下落状态
uint v;

sbit LEFTkey = P2^2;//按键左
sbit RIGHTkey = P2^1;//按键右
sbit UPkey = P2^0;//按键上
sbit DOWNkey = P2^3;//按键下
uint key_up=1;
void keyscan();
void BMPmove(uchar BMPx1,uchar BMPy1,uchar BMPx2,uchar BMPy2,uchar *BMPn,uchar BMPfx);//图片循环移动
//6个形参分别为:图片起始列坐标,起始页坐标,结束列坐标,结束页坐标,图片名,移动方向
void main(void)
{
  bx=0;
	by=4;
	bmx=0;
	upflag=0;
	downflag=0;
	OLED_Init();	
	OLED_Clear();		
	while(1) 
	{
	  OLED_ShowString(60,0,"score:",8);
	  BMPmove(-64,2,-48,3,BMP3,LEFT);
		delay_ms(10);
		BMPmove(-8,4,8,8,BMP4,LEFT);
		delay_ms(10);
		v+=1;
		OLED_ShowNum(100,0,v,3,8);
	  Xianshi_Tupian(bx,by,bx+32,by+4,BMP1);	//生成图像
		delay_ms(10);
    Xianshi_Tupian(bx,by,bx+32,by+4,BMP2);	//生成图像
		delay_ms(10);
		if(upflag == 0 && downflag == 0) keyscan();
		if(upflag == 1)//上升状态
		{
		 if(by == 0)
		 {
		  upflag=0;
			downflag=1;
		 }
		 if(by>=1)
		 {
		  Xianshi_Tupian(bx,by+3,bx+32,by+4,BMPclr);
			by--;
		 }
		}
		if(downflag == 1)//下降状态
		{
		 if(by == 4)
		 {
			downflag=0;
		 }
		 if(by <=3)
		 {
		  Xianshi_Tupian(bx,by,bx+32,by+1,BMPclr);
			by++;
		 }
		}
  }
 }
 
void keyscan()
{
 if(UPkey == 0 && key_up==1)
 {delay_ms(10);
  key_up=0;
	if(UPkey == 0)
	{ upflag=1;
	 }
  }
	else if(UPkey==1) key_up=1;
	if(LEFTkey == 0 && key_up==1)
 {delay_ms(10);
    key_up=0;
	if(LEFTkey == 0)
	{ 
	 Xianshi_Tupian(bx+32-8,by,bx+32,by+8,BMPclr);
	 bx-=8;
	 if(bx<=0) bx=128;
	 }
  }
	else if(LEFTkey==1) key_up=1;
	if(RIGHTkey == 0 && key_up==1)
	{delay_ms(10);
	 key_up=0;
	if(RIGHTkey == 0)
	{ 
	 Xianshi_Tupian(bx,by,bx+8,by+8,BMPclr);
	 bx+=8;
	 if(bx>=128) bx=0;
	 }
	 }
	 else if(RIGHTkey==1) key_up=1;
}
 

void BMPmove(uchar BMPx1,uchar BMPy1,uchar BMPx2,uchar BMPy2,uchar *BMPn,uchar BMPfx)
{
  if(BMPfx==LEFT)
	{
  if(bmx<=0) bmx=128;
	if(bmx>=8)
	{
	 Xianshi_Tupian(bmx+BMPx1,BMPy1,bmx+BMPx2,BMPy2,BMPn);
	 Xianshi_Tupian(bmx+BMPx2,BMPy1,bmx+BMPx2+BMPx2-BMPx1,BMPy2,BMPclr);
	 bmx-=8;
	}
	}
	  if(BMPfx==RIGHT)
	{
  if(bmx>=128) bmx=0;
	if(bmx<=128)
	{
	 Xianshi_Tupian(bmx+BMPx1,BMPy1,bmx+BMPx2,BMPy2,BMPn);
	 Xianshi_Tupian(bmx+BMPx1,BMPy1,bmx+BMPx2+BMPx2-BMPx1,BMPy2,BMPclr);
	 bmx+=8;
	}
	}
}
  PS:感兴趣的同学可以到我的资源下载全部程序。

尽管在OLED12864显示屏上实现Google小恐龙游戏面临一些挑战,如显示延迟和界面清晰度,但我们的项目依然成功地展示了小恐龙的基本动作。这种尝试不仅证明了C51单片机在简单游戏开发中的潜力,也为未来在更高性能显示屏上的进一步开发奠定了基础。

在未来,随着显示技术的不断进步,我们有理由相信,类似的游戏将能够在更小、更高效的设备上实现更加流畅和清晰的显示效果。同时,这也为开发者们提供了一个探索和创新的平台,激发他们在有限的硬件资源下实现更复杂功能的动力。

最终,Google小恐龙游戏的这一实现不仅是对经典游戏的一种致敬,也是对技术限制的一种挑战。我们期待在未来看到更多类似的项目,不仅在技术上有所突破,更在用户体验上带来新的惊喜。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的豆包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值