基于Java Swing的乌龟推箱子

本项目由本人独立开发,可供大家参考,欢迎提出意见!!!

1.需求分析

游戏需求:

玩家是通过对乌龟的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。
1、能够显示主菜单和功能
游戏需要提供主菜单让玩家进行游戏设置,同时能能够把地图文件中的信息转换成为图像显示到主游戏界面上。
2、能够实现键盘操作功能
能够接收到键盘输入的方向键信息,并根据不同的方向键把游戏任务移动到相应的位置,例如,当玩家单击方向键“上”时,如果向上的位置是可移动的,那么就当把游戏乌龟向上移动一个方格。
3、能够把放置到位置上的箱子进行变色显示
当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色。这样就能明确地显示出该箱子是否已经放置到指定位置上。
4、游戏胜负判断功能
在游戏中,当玩家把全部的箱子都推到箱子放置点时,玩家胜利通过当前游戏关口,进行下一关口的游戏,如果玩家无法将指定的箱子全部推到放置点时,玩家失败。玩家可以选择重新进行当前关口的游戏,还是退出游戏。
5、支持关口选择功能
玩家在游戏中可自行选择需要挑战的关口。
6、游戏提供支持背景音乐功能
通过主菜单,在游戏开始后,可以选择播放或者禁止播放背景音乐。
7、游戏支持玩家排行榜功能
通过查看排行榜,可以查看自己当前的金币排行。

玩家需求

1、能够进行登录以及注册玩家可以通过注册登录拥有自己的账号,进入游戏。
2、查看自己的实时排行玩家在游戏内可以查看排行榜,查看自己的实时排行。

功能模块图:
在这里插入图片描述

2.成果展示

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.代码实现

3.1目录结构

在这里插入图片描述

3.2关键部分代码展示

以下是往上走的代码以及悔上

  //上移
void moveup() {
   if (this.map[this.y - 1][this.x] != 2 && this.map[this.y - 1][this.x] != 4) {
      if (this.map[this.y - 1][this.x] == 3) {
         if (this.map[this.y - 2][this.x] == 4) {
            if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
               this.map[this.y][this.x] = 2;
            } else {
               this.map[this.y][this.x] = 4;
            }

            this.map[this.y - 1][this.x] = 8;
            this.map[this.y - 2][this.x] = 9;
            this.repaint();
            --this.y;
            this.mystack.push(11);
         } else if (this.map[this.y - 2][this.x] == 2) {
            if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
               this.map[this.y][this.x] = 2;
            } else {
               this.map[this.y][this.x] = 4;
            }

            this.map[this.y - 1][this.x] = 8;
            this.map[this.y - 2][this.x] = 3;
            this.repaint();
            --this.y;
            this.mystack.push(11);
         } else {
            this.map[this.y][this.x] = 8;
            this.repaint();
         }
      } else if (this.map[this.y - 1][this.x] == 9) {
         if (this.map[this.y - 2][this.x] == 4) {
            if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
               this.map[this.y][this.x] = 2;
            } else {
               this.map[this.y][this.x] = 4;
            }

            this.map[this.y - 1][this.x] = 8;
            this.map[this.y - 2][this.x] = 9;
            this.repaint();
            --this.y;
            this.mystack.push(11);
         } else if (this.map[this.y - 2][this.x] == 2) {
            if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
               this.map[this.y][this.x] = 2;
            } else {
               this.map[this.y][this.x] = 4;
            }

            this.map[this.y - 1][this.x] = 8;
            this.map[this.y - 2][this.x] = 3;
            this.repaint();
            --this.y;
            this.mystack.push(11);
         } else {
            this.map[this.y][this.x] = 8;
            this.repaint();
         }
      }
   } else {
      if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
         this.map[this.y][this.x] = 2;
      } else {
         this.map[this.y][this.x] = 4;
      }

      this.map[this.y - 1][this.x] = 8;
      this.repaint();
      --this.y;
      this.mystack.push(10);
   }

   if (this.map[this.y - 1][this.x] == 1) {
      this.map[this.y][this.x] = 8;
      this.repaint();
   }

}
   //悔上
void backup(int t) {
   if (t == 10) {
      if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
         this.map[this.y][this.x] = 2;
      } else {
         this.map[this.y][this.x] = 4;
      }
   } else if (t == 11) {
      if (this.maptmp[this.y][this.x] != 4 && this.maptmp[this.y][this.x] != 9) {
         this.map[this.y][this.x] = 3;
      } else {
         this.map[this.y][this.x] = 9;
      }

      if (this.maptmp[this.y - 1][this.x] != 4 && this.maptmp[this.y - 1][this.x] != 9) {
         this.map[this.y - 1][this.x] = 2;
      } else {
         this.map[this.y - 1][this.x] = 4;
      }
   }

   this.map[this.y + 1][this.x] = 8;
   this.repaint();
   ++this.y;
}

还有很多细节都没有展示出来,大家可以去这里面提供下载源码及文档看一看,里面包括答辩文档,项目代码,以及很多准备的东西。

发布了13 篇原创文章 · 获赞 23 · 访问量 2147

猜你喜欢

转载自blog.csdn.net/qq_43688587/article/details/104106984