`
xpenxpen
  • 浏览: 724951 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Escape the men's room(Java版密室逃脱)

阅读更多
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
分享到:
评论

相关推荐

    Escape_Room:密室逃脱游戏

    本篇文章将深入探讨如何使用C#编程语言来实现一个名为“Escape_Room”的密室逃脱游戏。 首先,我们需要了解C#的基础。C#是一种面向对象的、类型安全的编程语言,由微软公司开发,广泛应用于Windows平台和.NET框架。...

    CT4105-Escape-Room:密室逃脱游戏

    在本项目"CT4105-Escape-Room:密室逃脱游戏"中,我们可以深入探讨C#编程语言在创建互动式游戏开发中的应用。密室逃脱游戏是一种流行的游戏类型,它挑战玩家解决一系列谜题以逃离虚拟环境。在这款游戏中,C#将作为...

    PRISON ESCAPE PLAN Unity迷你密室逃脱益智解谜游戏项目源码C#

    PRISON ESCAPE PLAN Unity迷你密室逃脱益智解谜游戏项目源码C# 支持Unity版本2018.3.5f1及以上 越狱计划 制定逃离监狱的计划并提防看守。画出逃生路线并帮助囚犯逃跑。那么教授有什么计划吗? 商品描述 制定逃离监狱...

    Escape.java_java_

    `Escape.java` 源代码可能是一个工具类,专门用于处理文本中的特殊字符,这些字符可能需要转义以便正确地存储、显示或传输。让我们深入探讨Java中的字符编码和解码以及可能在`Escape.java`中涉及的相关概念。 1. **...

    escape/unescape 编码的Java 实现

    使用java对字符串进行unicode编码和解码。源程序

    java实现js的escape和unescape

    下面,我们将深入探讨如何在Java中实现JavaScript的`escape()`和`unescape()`方法,以及它们的具体工作原理和应用。 ### Java实现JS的`escape`和`unescape`方法 #### `escape`方法:URL编码 在JavaScript中,`...

    JavaScript escape/unescape 编码的 Java 实现

    本工具类用java实现了JavaScript escape/unescape 编码。对接建行支付以及需要向后端传输中文数据时可以使用得到

    sasscape-room:仅使用HTML和Sass的密室逃脱游戏

    《使用Sass构建的Web版密室逃脱游戏:sassscape-room》 在现代网页开发中,Sass(Syntactically Awesome Style Sheets)作为一种强大的CSS预处理器,为开发者提供了更丰富的功能和更高效的代码管理方式。本文将深入...

    java版本的escape和unescape函数

    然而,Java标准库中并没有内置的`escape`函数,但我们可以使用`java.net.URLEncoder.encode()`方法来达到类似的效果,对URL中的特殊字符进行编码。这个方法会将非字母数字字符转换为百分号(`%`)加上两个十六进制数字...

    VR Beginner The Escape Room.unitypackage

    使用Unity VR开放框架开发的密室逃脱VR游戏,演示了完整的VR功能,包括镜头、手柄、场景交互、漫游等功能

    EscapeTheRoomVR:使用Daydream VR和Unity构建的Escape The Room VR游戏

    关于逃脱虚拟现实室 Escape the Room VR是我们研究的Daydream VR项目,用于模拟Escape the Room体验。 其他信息可在中。 安装 在支持Daydream的Android设备上安装.apk文件,或在Unity上构建。 作者

    Java文本字符编码解码操作类 Escape.java源代码.rar

    Escape.java源代码是专门设计用于处理文本字符的编码和解码操作的一个类。这个类的目标是确保无论输入字符串是否已经经过`escape()`方法编码,都能够正确地进行“解码”,从而恢复原始的文本内容。 首先,让我们...

    java使用mysql的escape遇到的坑.pdf

    本文将深入探讨在Java中使用MySQL的`escape`功能时可能出现的陷阱。 首先,我们需要理解MySQL的`LIKE`语句中的转义规则。在`LIKE`语句中,`%`和`_`是特殊字符,它们分别代表任意数量的字符和单个字符。为了在字符串...

    Java Escape编码 解码相关实例代码.rar

    一个与Escape编码 解码相关的Java实例代码,其实是一个解码编码类,里面就一个文件。关于解码的说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果,编码的过程请大家下载源代码查看,本...

    ansi-escapes-ANSI转义代码用于操纵终端

    "ansi-escapes" 是一个与编程相关的库,主要目的是处理和操纵终端(命令行界面)中的输出。"ANSI转义代码" 指的是用于控制终端文本显示的一系列特殊字符序列,例如改变文字颜色、移动光标位置、清除屏幕等。这个库...

    unity游戏源码-逃脱鸟游戏源码Escape Bird

    unity游戏源码-逃脱鸟游戏源码Escape Bird Unity游戏源码 , Unity工具 , 完整的项目 , 适合学习和二次开发 。 是整个完整的UnityPackage包 , 直接导入项目里面就行。 C#语言的! C#语言的!! C#语言的!!! 重要的事说三...

    Wednesday Escape 星期三逃脱Unity迷你迷宫逃脱游戏项目源码C#

    Wednesday Escape 星期三逃脱Unity迷你迷宫逃脱游戏项目源码C# 支持Unity版本 2020.3.18f1或更高 描述 突破怪物,走出迷宫!许多迷宫不会让你感到无聊。展示你的能力,你将成为赢家。 特征 该游戏是在2019年3月9日...

    FORD福特锐际ESCAPE车型手册汽车说明书pdf电子版下载.pdf

    FORD福特锐际ESCAPE车型手册汽车说明书pdf电子版下载

    Room_Escape

    《Java技术在“密室逃脱”游戏开发中的应用解析》 在当今的数字娱乐领域,游戏开发已经成为一个不可或缺的部分,而“密室逃脱”作为一款深受玩家喜爱的解谜类游戏,更是吸引了众多开发者和玩家的关注。在这个独特的...

Global site tag (gtag.js) - Google Analytics