51单片机实现俄罗斯方块游戏编程

本文涉及的产品
可观测链路 OpenTelemetry 版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 设计了一款基于AT89C51单片机的俄罗斯方块游戏机,使用LCD12864液晶显示,按键控制方块移动与变形。游戏中,7种不同形状的方块随机下落,填满一行得分,满屏则游戏结束。包含电源、单片机最小系统、LCD和按键模块的硬件电路通过Proteus进行了仿真,展示了游戏运行、得分和计时等。代码部分展示了检查碰撞和更新地图的函数。

一、设计要求

(1)利用51单片机,设计一款俄罗斯方块游戏,完成硬件电路的开发和程序的编写调试;

(2)采用LCD12864液晶作为游戏运行界面;

(3)利用按键输入灵活控制方块的移动与变形;

(4)能够提示玩家下个方块的形状,显示游戏得分、游戏计时等内容;

二、系统概述

本文设计了一款基于AT89C51单片机的俄罗斯方块游戏机,整个系统分为硬件和软件两部分。

硬件部分由电源模块、单片机最小系统、LCD12864显示模块和独立按键模块组成。软件部分则基于C语言进行开发,来完成游戏的逻辑设计与算法设计,系统框图如下所示。

本设计实现的基本功能是,单片机在显示屏上端随机输出7种不同类型的方块图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字形),并使方块匀速下落填充到给定区域。设计获取,蒋宇智QQ(2327603104)。

在下落过程中,玩家通过键盘(上、下、左、右键)对方块进行变换、下移、左移和右移操作。当方块填满一行或多行时便消行得分,一直到方块堆积到显示屏上端且无法消行时,游戏才结束。

Proteus仿真电路

原理图

仿真结果分析

打开俄罗斯方块仿真(文件为:俄罗斯方块仿真.DSN),双击单片机加载Game.hex文件(位于C程序文件夹内),运行仿真,结果如下图所示。

LCD12864左屏顶端随机生成方块图形并下落;LCD右屏则显示:提示下一方块的形状、游戏得分(SCORE)、游戏计时等内容。设计获取,关注公众号:交院小智。

玩家可以通过四个按键,对方块进行变换、左移、右移和下移。当方块填满一行或多行时,消行得分。下图显示,游戏已运行1分47秒,玩家得分为2分。

当方块堆积到界面顶端且无法消行时,游戏结束。此时,游戏界面显示Game Over,短暂等待后,又开始新一轮游戏。

综上所述,俄罗斯方块Proteus仿真能够正常运行,满足设计功能及要求,达到了本次设计的预期效果。

部分C代码

unsigned char checkClask(void)
{
  unsigned char row,column,temp;
  unsigned char hang,lie;
  for(row=0;row<4;row++)
   {
     temp=1;
     for(column=0;column<4;column++)
    {
      if(this.box[row] & temp)
        {
        hang=this.row+row;
      lie=this.column+column;
        if(cubeMap[hang][lie/8] & bittable[lie%8])
        return 1;
      }
    temp<<=1;
    }
   }
  return 0;
}
//-------------------------------------------------------------------
void checkMap(void)
{
  unsigned char i,j,delete;
  bit full;
  full=0;
  delete=0;
  for(i=MAXHANG-1;i>0;i--)
   {
     if(cubeMap[i][0]==0 && cubeMap[i][1]==0)
     break;
   if(cubeMap[i][0]==0xff && cubeMap[i][1]==0xff)
     {
       delete++;
     full=1;
     for(j=i;j>0;j--)
      {
        cubeMap[j][0]=cubeMap[j-1][0];
        cubeMap[j][1]=cubeMap[j-1][1];
      }
     i++;
     cubeMap[0][0]=0;
     cubeMap[0][1]=0;
     }
   }
相关文章
|
6月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
83 1
|
6月前
|
传感器 人工智能 物联网
单片机:编程实践与应用探索
单片机:编程实践与应用探索
65 4
|
6月前
|
存储 传感器 数据处理
单片机编程入门与实践
单片机编程入门与实践
69 2
|
传感器 Windows
关于单片机编程里面调用sprintf死机的解决方法及原因分析
关于单片机编程里面调用sprintf死机的解决方法及原因分析
488 0
|
传感器 编解码 监控
单片机温湿度测量程序编程
单片机温湿度测量程序编程
97 0
|
存储 C语言 内存技术
单片机原理与应用以及C51编程技术——data,idata,xdata,pdata,code
单片机原理与应用以及C51编程技术——data,idata,xdata,pdata,code
351 0
|
编译器 C语言
单片机原理与应用以及C51编程技术——C51扩展数据类型(bit、sbit、sfr、sfr16)
单片机原理与应用以及C51编程技术——C51扩展数据类型(bit、sbit、sfr、sfr16)
676 0
单片机原理与应用以及C51编程技术——C51扩展数据类型(bit、sbit、sfr、sfr16)
|
存储 芯片
单片机原理与应用以及C51编程技术——硬件体系结构梳理(下)
单片机原理与应用以及C51编程技术——硬件体系结构梳理(下)
506 0
单片机原理与应用以及C51编程技术——硬件体系结构梳理(下)
|
存储 算法 内存技术
单片机原理与应用以及C51编程技术——硬件体系结构梳理(上)
单片机原理与应用以及C51编程技术——硬件体系结构梳理(上)
859 0
单片机原理与应用以及C51编程技术——硬件体系结构梳理(上)
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
239 0
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)