摘要

推箱子是来自于日本的一个古老游戏,目的是在于训练逻辑思维能力,在一个狭小的空间里,要把木箱推到指定的位置,稍不小心箱子就会无法移动或者被通道堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。为了锻炼大家的智力和思维能力,设计了如下一款推箱子小游戏。本次课程设计是配合JAVA程序设计课程,深入掌握 JAVA语言,熟练运用JAVA工具对系统的编写,通过课程设计各个项目的综合训练,培养学生实际分析问题,编程和动手能力,提高学生的综合素质。

关键词  JAVA 推箱子 数据存储 思维能力

第一章 概述

1.1 简介 

最经典的推箱子游戏,类似的游戏你一定早就玩过。要控制搬运工上下左右移动,来将箱子推到指定地点

记得几年前,《推箱子》在PC机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对《推箱子》赞不绝口,可见有深度的益智类游戏是非常受大家欢迎的。 推箱子游戏1981年由日本人今林宏行首创,是在1982年12月由Thinking Rabbit 公司首次发行,名“仓库番”。箱子只可以推, 不可以拉, 而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。

推箱子游戏是一种老少皆宜的益智游戏,既可以开发青少年学生的智力,又可以防止老年痴呆症,全家一起攻关还可以促进家庭和睦,何乐而不为?

1.2 系统目标

在此游戏本着娱乐为目的,游戏者不仅可以在玩游戏的同时享受乐趣,游戏界面简单,操作容易,在玩游戏的同时还可以锻炼大家的反应速度和灵敏程度,在游戏中设置关卡,级别由低到高,一关比一关难,提高大家的兴趣,通过对小人的移动是否到达指定位置进行判断决定是否通关并进入下一关。

第二章 设计方案论证

2.1系统概要

2.1.1 系统开发环境

1.硬件环境:

处理器 AMD Ryzen 5 4500U with Radeon Graphics  2.38 GHz

  1. 软件环境:JDK Eclipse

2.2 概要设计

2.2.1程序中主要方法的说明

  1. 界面框架和按钮:界面设计包括了所直观见到的图形界面,窗体大小,运行界面后默认开始游戏。(包含窗口的创建)
  2. 地图的绘制形成:地图以二维数组进行存储,不同的数字有不同的含义,用阿拉伯数字0-9(备选)来记录不同的图形或图像:比如0代表黑色主题背景墙,1代表火墙,2代表蓝色道路,3代表应到达的箱子位置,4代表箱子初始位置等。(利用双缓冲来防止图片闪烁)。
  3. 人物的绘制形成:包括绘制小人,使小人移动,和小人在不同方向指令下达时图片的改变
  4. 如何推动箱子:我绘制了小人矩形和箱子矩形,判断与墙体是否发生碰撞,用函数的方式判断是否移动,小人移动 墙体不移动
  5. 游戏的优化:包括小人剩余生命值和当前关卡显示,按L键回退上一关,按Q键重新开始等。

2.2.2程序流程图

第三章 设计结果和分析

3.1 程序的详细设计

3.1.1背景,地图和小人图片的导入

用draw方法画出一个背景并输入大小,颜色等自定义变量,接着用方法定义图片,这里的图片包括小人,火墙,地板和方块。再用final string方法存入图片,这样就把图片存入当前程序中,只需要用构造器初始化数据就能加载出这些图片,如下:

fire = GameUtil.loadBufferedImage(FIRE);

blue = GameUtil.loadBufferedImage(BLUE);

black = GameUtil.loadBufferedImage(BLACK);

yellow = GameUtil.loadBufferedImage(YELLOW);

再实例化就可得到如下界面:

3.1.2小人的移动以及推动箱子:

确定小人的初始位置后,用this方法确定坐标,接下来实现切换图片,而切换图片对应的就是变换方向,小人往什么方向走,就切换对应方向的图片,这里控制切换方向运用switch-case方法,切换小人图片运动if-else方法,这样就实现了小人在地图上的“自由移动”;接下来我们绘制小人的矩形以及箱子的矩形,即rect.add,这里使用了两次if-else方法,即小人矩形是否与箱子矩形相撞(相交),以及相撞后箱子矩形是否作出有效移动,若发生有效移动,即箱子被小人“推走”,那么就交换箱子位置与移动后位置的图片,这样就实现了箱子被推走的视觉效果。这里需要注意的是,需要构造一个存放这些矩形的集合,以便记录移动行为,

3.1.3游戏的优化

设置了生命值,碰到墙会减少生命值,生命值为0,即游戏失败,需要重新开始,玩家需要在推箱子的时候同时注意不要错按撞到墙壁上。

为了能有更好的游戏体验,设置了移动变量和记录行为,将箱子上一步的数据记录,并加在一起储存到一个集合中,按L键即可回退到上一步,增加了玩家的容错率和思考方向,如果觉得本关已经通关无望,可以按Q重新开始,通过重新加载地图,小人,箱子同时回到初始位置来重新开始游戏。

3.2程序尚需解决的问题:

  1. 应加入按钮Button实现选关 返回上一步,重新开始等
  2. 尝试连接数据库但失败了,显示注册成功但无法登录
  •  主要程序介绍

4.1 Eclipse和Java

Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 [4]

Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开放源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。

程序源码:

https://download.csdn.net/download/m0_54570435/87719833

Java小游戏-推箱子相关推荐

  1. 用JAVA制作小游戏——推箱子(三)

    本篇博客主要是对推箱子地图编辑器功能的代码讲解. 首先给出这段代码的部分运行截图: 重难点: 地图编辑器主要有三个重难点: 需要有一个绘制地图的界面 能够实现地图绘制的功能 地图绘制完成后需要将地图内 ...

  2. 用JAVA制作小游戏——推箱子(二)

    本篇博客主要是推箱子游戏界面功能的代码讲解. 首先先给出这段代码的部分运行截图: 重难点: 游戏界面主要有五个重难点: 固定好地图的位置 地图的显示 构建菜单栏 读取地图数据 玩家操作功能实现 地图的 ...

  3. 用JAVA制作小游戏——推箱子(一)

    本篇博客是对推箱子游戏首页代码的展示 效果图: 难点: 在背景图上添加按钮. 由于直接使用add方法,会变成图片一块区域,按钮一块区域,彼此互不重叠,形成的界面效果不太好,因此用了JLayeredPa ...

  4. JAVA小游戏推球球

    图形化界面的简单应用 先看效果 java小游戏推球球 代码如下 import javax.swing.*; import java.awt.*; import java.awt.event.*;pub ...

  5. C语言小游戏 ——推箱子

    文章目录 (1)内容描述 (2)功能 (3)设计目的 (4)总体设计 (5)明显缺点 (6)个人总结 7. 实例 实例一 实例二 实例三 实例四 实例五: (1)内容描述 描述:用户进入页面后可以进行 ...

  6. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  7. Python游戏开发,Python实现童年小游戏推箱子 附带源码

    开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 上效果图 原理简 ...

  8. python小游戏——推箱子代码开源

    ♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至. 目录 一.效 ...

  9. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

最新文章

  1. Java的equals() 和 hashCode()
  2. golang goroutine 得到返回值
  3. SpiderMonkey-让你的C++程序支持JavaScript脚本
  4. Android Tcp操作
  5. 在discuzNT中加入Adsense广告(只在第一楼显示)
  6. JQuery让input从disabled变成enabled
  7. shell 做加法运算_使用shell脚本实现加法乘法运算
  8. (113)FPGA面试题-LUT计算问题
  9. asyu中datagrid load 与reload
  10. 电脑配置Java环境变量之后,在cmd中仍然无法识别
  11. pymysql数据库使用教程_小白进阶之路,如何使用pymysql直连数据库?
  12. 建立自己的voc数据集_Mac上 制作自己的VOC数据集
  13. 【原创】2021-2001广东统计年鉴面板数据、珠三角数据、广东年鉴(可直接使用)
  14. C# 专业的软件安装包
  15. python 获得时间戳_Python 获取时间戳
  16. Acquiring a token for Kubernetes dashboard
  17. 桌面点右键,白屏怎么办
  18. 一米村长讲故事机器人_村长讲故事 | 牛牛特工队番外
  19. 计算机国二复习攻略,全国计算机等级考试二级复习指导及应试技巧二
  20. Android手绘涂鸦PaintView

热门文章

  1. “数字公务员”纷纷上岗,提高12345热线工单处理效率
  2. 程序员不懂过七夕?你怕是有什么误解
  3. ShareObject
  4. 微信浏览器强制刷新方法怎么清空缓存
  5. Java利用反射动态加载类实战
  6. 用户数据隐私保护:Web 2.0和Web 3.0的区别是什么?
  7. Qt MetaObject 详解
  8. 我的Unity(11)一点一滴 制作LOL小地图
  9. selenium获取网页翻页表格内容并存入 excel
  10. JavaScript动画性能优化