写点什么

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

作者:智趣匠
  • 2024-05-13
    四川
  • 本文字数:1172 字

    阅读完需:约 4 分钟

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

一、设计要求

(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;	   }   }
复制代码


发布于: 刚刚阅读数: 4
用户头像

智趣匠

关注

凡事预则立,不预则废! 2022-06-01 加入

某公司芯片AE工程师,嵌入式开发工程师,InfoQ签约作者,阿里云专家博主,华为云·云享专家,51CTO专家博主,腾讯云社区优秀共创官。

评论

发布
暂无评论
51单片机实现俄罗斯方块游戏编程_编程_智趣匠_InfoQ写作社区