1.概述
老外用Java做的2D密室逃脱游戏。个人认为挺不错的。
来源
http://meatfighter.com/escape/index.html
效果如图
2.源码赏析
还是一如既往,定义了一个IMode,这样不同模式可以切换,避免一堆if else,而且扩展也容易。
游戏主要核心就是Main以及GameMode这两个类。其他都是场景。当然里面有很多小游戏,如fifteen,汉诺塔,记忆题。
Main是游戏的一个框架。
public void run() {
Images.inventoryTile.getWidth(); // load images
addMouseListener();
BufferedImage image = new BufferedImage(CANVAS_WIDTH, CANVAS_HEIGHT,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D)image.getGraphics();
Graphics2D g2 = null;
int frameSkips = 0;
long nextFrameStartTime = System.nanoTime();
while(alive) {
//1.跳帧,防止电脑太慢
do {
nextFrameStartTime += 16666667;
frameSkips++;
//2.更新模型
mode.update();
} while(nextFrameStartTime < System.nanoTime()
&& frameSkips < MAX_FRAME_SKIPS);
if (frameSkips >= MAX_FRAME_SKIPS) {
nextFrameStartTime = System.nanoTime();
}
frameSkips = 0;
//3.如果targetMode存在,则进入该模式,并进入下一次循环(continue)
if (targetMode != null) {
mode = targetMode;
mode.enter();
targetMode = null;
nextFrameStartTime = System.nanoTime();
continue;
}
//4.渲染(在内存中画)(double buffer)
mode.render(g);
//5.一次性画到屏幕上
// show the hidden buffer
if (g2 == null) {
g2 = (Graphics2D)getGraphics();
requestFocus();
} else {
g2.drawImage(image, 0, 0, null);
}
//6.睡一会儿,节省cpu
// burn off extra cycles
while(nextFrameStartTime - System.nanoTime() > 0) {
Thread.yield();
}
// do not eat up CPU if user leaves browser
if (sleeping) {
synchronized(this) {
while (sleeping && alive) {
try {
wait();
} catch(Throwable t) {
}
}
}
nextFrameStartTime = System.nanoTime();
}
}
}
GameMode稍微复杂一点,处理了鼠标点击,鼠标拖放核心功能。
具体不多说了,附件可下载我加了中文注释的源码包,在JDK7上可以运行。
如果觉得难度太高的话,可以修改Main.DEBUG=true,可打开调试模式,降低游戏难度,一方面也方便大家学习源码。
- 大小: 80.9 KB
- 大小: 10.3 KB
分享到:
相关推荐
本篇文章将深入探讨如何使用C#编程语言来实现一个名为“Escape_Room”的密室逃脱游戏。 首先,我们需要了解C#的基础。C#是一种面向对象的、类型安全的编程语言,由微软公司开发,广泛应用于Windows平台和.NET框架。...
在本项目"CT4105-Escape-Room:密室逃脱游戏"中,我们可以深入探讨C#编程语言在创建互动式游戏开发中的应用。密室逃脱游戏是一种流行的游戏类型,它挑战玩家解决一系列谜题以逃离虚拟环境。在这款游戏中,C#将作为...
PRISON ESCAPE PLAN Unity迷你密室逃脱益智解谜游戏项目源码C# 支持Unity版本2018.3.5f1及以上 越狱计划 制定逃离监狱的计划并提防看守。画出逃生路线并帮助囚犯逃跑。那么教授有什么计划吗? 商品描述 制定逃离监狱...
`Escape.java` 源代码可能是一个工具类,专门用于处理文本中的特殊字符,这些字符可能需要转义以便正确地存储、显示或传输。让我们深入探讨Java中的字符编码和解码以及可能在`Escape.java`中涉及的相关概念。 1. **...
使用java对字符串进行unicode编码和解码。源程序
下面,我们将深入探讨如何在Java中实现JavaScript的`escape()`和`unescape()`方法,以及它们的具体工作原理和应用。 ### Java实现JS的`escape`和`unescape`方法 #### `escape`方法:URL编码 在JavaScript中,`...
本工具类用java实现了JavaScript escape/unescape 编码。对接建行支付以及需要向后端传输中文数据时可以使用得到
《使用Sass构建的Web版密室逃脱游戏:sassscape-room》 在现代网页开发中,Sass(Syntactically Awesome Style Sheets)作为一种强大的CSS预处理器,为开发者提供了更丰富的功能和更高效的代码管理方式。本文将深入...
然而,Java标准库中并没有内置的`escape`函数,但我们可以使用`java.net.URLEncoder.encode()`方法来达到类似的效果,对URL中的特殊字符进行编码。这个方法会将非字母数字字符转换为百分号(`%`)加上两个十六进制数字...
使用Unity VR开放框架开发的密室逃脱VR游戏,演示了完整的VR功能,包括镜头、手柄、场景交互、漫游等功能
关于逃脱虚拟现实室 Escape the Room VR是我们研究的Daydream VR项目,用于模拟Escape the Room体验。 其他信息可在中。 安装 在支持Daydream的Android设备上安装.apk文件,或在Unity上构建。 作者
Escape.java源代码是专门设计用于处理文本字符的编码和解码操作的一个类。这个类的目标是确保无论输入字符串是否已经经过`escape()`方法编码,都能够正确地进行“解码”,从而恢复原始的文本内容。 首先,让我们...
本文将深入探讨在Java中使用MySQL的`escape`功能时可能出现的陷阱。 首先,我们需要理解MySQL的`LIKE`语句中的转义规则。在`LIKE`语句中,`%`和`_`是特殊字符,它们分别代表任意数量的字符和单个字符。为了在字符串...
一个与Escape编码 解码相关的Java实例代码,其实是一个解码编码类,里面就一个文件。关于解码的说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果,编码的过程请大家下载源代码查看,本...
"ansi-escapes" 是一个与编程相关的库,主要目的是处理和操纵终端(命令行界面)中的输出。"ANSI转义代码" 指的是用于控制终端文本显示的一系列特殊字符序列,例如改变文字颜色、移动光标位置、清除屏幕等。这个库...
unity游戏源码-逃脱鸟游戏源码Escape Bird Unity游戏源码 , Unity工具 , 完整的项目 , 适合学习和二次开发 。 是整个完整的UnityPackage包 , 直接导入项目里面就行。 C#语言的! C#语言的!! C#语言的!!! 重要的事说三...
Wednesday Escape 星期三逃脱Unity迷你迷宫逃脱游戏项目源码C# 支持Unity版本 2020.3.18f1或更高 描述 突破怪物,走出迷宫!许多迷宫不会让你感到无聊。展示你的能力,你将成为赢家。 特征 该游戏是在2019年3月9日...
FORD福特锐际ESCAPE车型手册汽车说明书pdf电子版下载
《Java技术在“密室逃脱”游戏开发中的应用解析》 在当今的数字娱乐领域,游戏开发已经成为一个不可或缺的部分,而“密室逃脱”作为一款深受玩家喜爱的解谜类游戏,更是吸引了众多开发者和玩家的关注。在这个独特的...