折腾来折腾去

pikipity的blog

打砖块 (8051)

简介

用 AT89C52 做的一个打砖块游戏机,使用 Proteus 进行的仿真,部分电路如果要实体化还需改进。

使用 AMPIRE12864 作为显示器,三个按键分别控制平台的“左右移动”和“开始游戏”。为了保证游戏中音乐与画面的流畅,使用另外一块 AT89C52 来控制 sounder 进行声音的播放。

项目主页:http://pikipity.github.io/Breakout_clone

游戏规则

玩家控制屏幕底端的平台左右移动来保证小球在屏幕中碰撞。当小球碰撞到上屏的砖块时,被碰撞的砖块会消失,当所有砖块被消掉后,此关胜利,总共 3 关,3 关全部胜利以后,游戏重置;当小球碰触到屏幕下边缘时,失去一条命,总共 5 条命,当 5 条命全部失去以后,游戏结束,整个游戏重置。

游戏过程中,有四种道具,随机出现在下屏的随机位置。每个道具的图案是一个字母,当小球碰触道具图案时,道具生效。以下是道具介绍:

  1. 变长道具(道具图案是 “L” 字样):道具生效后,平台变为铺满整个屏幕的底边,一段时间后失效,复原为原来长度。

    变长道具

  2. 清除道具(道具图案是 “C” 字样):生效后,随机清除一部分的砖块。

    清除道具

  3. 胜利道具(道具图案是 “W” 字样):生效后,此关胜利。

    胜利道具

  4. 死亡道具(道具图案是 “D” 字样):生效后,直接失去一条命。

    死亡道具

每一关,上半屏砖块组成的图案都不同(下面是三关的砖块图案),下方平台的移动速度也不同,速度会随着关卡数增大而变快,而且平台的长度也会变短,所以难度也会随之增大。小球的纵向移动速度不变,横向移动速度和平台一致,每次碰撞平台的时候,平台的移动方向和速度就会传递给小球。

第一关砖块图案

第二关砖块图案

第三关砖块图案

文件说明

  • circuit 文件夹:Proteus 仿真电路
  • material 文件夹:部分使用到的素材
  • program 文件夹:C 8051 的程序

    • sounder_main.c:控制 sounder 的单片机使用的程序
    • main.c:主单片机(控制显示器和按键的单片机)的程序
    • lcd12864.h 和 lcd12864.c:为了实现对 AMPIRE12864 的控制编写的函数,包括:

      1. lcd_write_command ( command ):向 AMPIRE12864 中写入一个命令 command。
      2. lcd_write_data ( data ):向 AMPIRE12864 中写入一个8位的数据 data。
      3. lcd_read_data ( ):从 AMPIRE12864 中读取一个8位的数据。
      4. lcd_init ( ):初始化 AMPIRE12864。
      5. first_page ( ):清空整个屏幕。
      6. choose_screen ( n ):选择屏幕。(同时选择两个屏幕:n=0;左屏幕:n=1;右屏幕:n=2)
      7. set_dot ( x,y ):点亮坐标为 (x,y) 的像素点。(左上角的像素点为 (0,0),x 坐标向右延伸,y 坐标向下延伸)
      8. clear_dot ( x,y ):清除坐标为 (x,y) 的像素点。(坐标系同上)
      9. read_dot ( x,y ):读取坐标为 (x,y) 的像素点的状态。
    • game.h 和 game.c:用于刷新屏幕和计算游戏状态的函数。

电路图

电路图

运行画面

开始画面

游戏进行中的画面

死亡后显示剩余生命的画面

5 条命全部耗费完毕之后的画面

一关获胜之后的画面

Demo 视频

由于录制的时候忘记开声音了,所以音乐没有录进去。



Comments