如何使用箭头键在 GridWorld 中移动 Bug

2024-05-03

我正在为我的计算机科学课制作一个游戏,我正在尝试使用箭头键移动一个扩展 Bug 的角色对象。我应该将使用箭头键移动的代码放在“角色”类中还是“世界”类中?代码应该是什么样的?现在我已经在Character类中得到了这段代码,并且它符合要求,但是当我尝试在网格中运行它时,当我按箭头键时没有任何反应。

 public class Character extends Bug
{
Random pokemon;
public Character()
{

}

public void act(KeyEvent e)
{
        move(e);
        pokemon = new Random();
        if(pokemon.nextInt(10) == 5)
            System.out.println("It works!!");
}

public void move(KeyEvent e)
{
    Grid<Actor> gr = getGrid();
    Location loc = getLocation();
    if(gr == null)
        return;
    if( e.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        if(!(getDirection() == 90))
            setDirection(90);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }
    else if( e.getKeyCode() == KeyEvent.VK_LEFT)
    {
        if(!(getDirection() == 270))
            setDirection(270);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }
    else if( e.getKeyCode() == KeyEvent.VK_UP)
    {
        if(!(getDirection() == 0))
            setDirection(0);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }
    else if( e.getKeyCode() == KeyEvent.VK_DOWN)
    {
        if(!(getDirection() == 180))
            setDirection(180);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }

public class Character extends Bug
{
Random pokemon;
public Character()
{

}

public void act(KeyEvent e)
{
        move(e);
        pokemon = new Random();
        if(pokemon.nextInt(10) == 5)
            System.out.println("It works!!");
}

public void move(KeyEvent e)
{
    Grid<Actor> gr = getGrid();
    Location loc = getLocation();
    if(gr == null)
        return;
    if( e.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        if(!(getDirection() == 90))
            setDirection(90);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }
    else if( e.getKeyCode() == KeyEvent.VK_LEFT)
    {
        if(!(getDirection() == 270))
            setDirection(270);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }
    else if( e.getKeyCode() == KeyEvent.VK_UP)
    {
        if(!(getDirection() == 0))
            setDirection(0);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }
    else if( e.getKeyCode() == KeyEvent.VK_DOWN)
    {
        if(!(getDirection() == 180))
            setDirection(180);
        else
        {

            Location next = loc.getAdjacentLocation(getDirection());
            if (gr.isValid(next))
                moveTo(next);
            else
                removeSelfFromGrid();
        }
    }

此代码对于 KeyEvent 是否正确?我如何从 World 类调用此代码? 任何帮助将不胜感激!


In the ActorWorld类有一个方法boolean keyPressed(String description, Location loc)此方法的唯一目的是在子类中重写。description is the KeyStroke在找到的格式中here http://docs.oracle.com/javase/6/docs/api/javax/swing/KeyStroke.html#getKeyStroke%28java.lang.String%29,loc 是Location按下该键时光标处于打开状态。 (尽管对你来说这并不重要)

简而言之,你应该扩展KeyPressed在定制中CharacterWorld extends ActorWorld class.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用箭头键在 GridWorld 中移动 Bug 的相关文章

  • Android系统adb模拟按键操作方法

    使用adb命令模拟按键操作 主要是找到对应的按键的keycode 主要命令adb shell input keyevent
  • 键盘向上和向下箭头

    我有一个自动完成搜索 通过输入几个字符 它将显示与输入的字符相匹配的所有名称 我使用 DIV 标记在 jsp 中填充这些数据 通过使用鼠标 我可以选择名称 但我想使用键盘上下箭头选择要选择的 DIV 标签中的名称 任何人都可以帮我解决这个问
  • Java 如何调度 KeyEvent?

    我已经阅读了明确的教程键绑定几次 但我的大脑缓存似乎不够大 无法容纳复杂的过程 我正在调试一个按键绑定问题 结果发现我使用了错误的JComponent WHEN 条件 我偶然发现了一个关于 private 包的简洁而搞笑的 javadocj
  • 如何在 Android 上欺骗我的活动的方向键

    我试图覆盖音量按钮以充当向上 向下箭头键 即它们应该将焦点移动到我的所有活动可聚焦视图上 为此 我超越了我的活动dispatchKeyEvent 方法注意我也尝试过onKeyDown 但我的音量键事件的某些部分仍然会通过系统 当您更改音量时
  • Javascript - 模拟 Chrome 53 上的按键事件

    我正在尝试模拟按键事件 按下 铬53 我在 StackOverflow 上找到的所有解决方案似乎都不起作用 我的目标是拥有一个函数keyCode并用它模拟按键 需要纯JS function keyPressSimulate keyCode
  • 按左右箭头改变图像?

    所以我有这个简单的幻灯片 div class container div img alt slideshow src 1 jpg div div 当我像这样单击时 我已经设法使图像发生变化
  • 获取组合键

    How can I get key combination of keys on keyboard E G Ctrl somekey Alt somekey with Java I use KeyEvent listener MouseEv
  • 如何使用按键绑定而不是按键侦听器

    我在用着KeyListener在我的代码 游戏或其他 中作为我的屏幕对象对用户按键输入做出反应的方式 这是我的代码 public class MyGame extends JFrame static int up KeyEvent VK U
  • 一旦按下按钮,Java 键事件就不会执行

    您好 希望有人能告诉我我的关键事件做错了什么 我正在使用卡片布局来浏览我的两个 JPanels atm 为此 我使用操作事件和关键事件 当按下按钮时 动作事件将在 JPanel 之间切换 而当按下按键时 按键事件将隐藏按钮 按键事件一切顺利
  • Java - 具有显示箭头的按钮

    我想要一个 Java 中的按钮 它显示箭头 就像键盘上一样 到目前为止我有这个 JButton arrowUp new JButton JButton arrowDown new JButton v JButton arrowLeft ne
  • 如何在按住 KeyEvent 时仅执行一次?

    我试图以一定的速度发射导弹 但目前你可以简单地按住发射按钮 空格键 它就会形成连续的导弹线 我相信这是因为KeyEvent当你按住它时就会触发 而我需要它做的只是在你按住它时触发一次 我如何让它检测到按下按钮只按一次 public void
  • 如何在Python中使用paramiko库发送箭头键?

    我正在使用 python 2 7 和代码 ssh 客户端paramiko图书馆 我用myhost channel send chr keycode 将每个键码发送到服务器 但它仅适用于 1 字节键码 我想发送其他多字节键码 例如箭头键 我怎
  • jQuery 中触发退格键

    如何在 jQuery 中触发退格键事件 以下示例不起作用 var e jQuery Event backspace keyCode 8 myarea trigger e 你实际上无法触发它 例如 您可以从某个输入中删除最后一个字符 但无法触
  • 各功能键码快捷键

    我正在编写一个小脚本来捕获按键事件并轻松地在其上绑定函数 但我现在被困住了 问题是 如果我初始化多个 事件处理程序 它会覆盖第一次初始化的参数 几千个字不比几行代码说得更多 所以 这就是我到目前为止所做的 var keyCodes a 65
  • Android:监听电源键按下

    我目前正在尝试监听何时按下电源按钮 最终 我希望在按两次电源按钮时运行一些代码 以检查屏幕是否锁定或解锁 我目前有这个 Override public void onCreate Bundle savedInstanceState supe
  • VIM 自定义箭头键映射不适用于窗口切换?

    我一直在尝试创建一个在 vim 中打开的窗口拆分之间切换的快捷方式 而不是必须使用 ctrl w arrowkey 我更愿意只能够使用 ctrl arrow key 这是我当前的 vimrc 中的内容 map
  • 如何在 Java 中生成没有按键代码的键盘事件?

    我使用 Robot 类和 KeyEvent 按键代码来生成所有其他按键事件 它们工作正常 但我还需要 Hangul 键 切换韩语键盘 显然 KeyEvent 没有这个键的键码 所以我被卡住了 有没有办法生成这个韩文键事件 有没有办法使用 W
  • 如何使用箭头键在 GridWorld 中移动 Bug

    我正在为我的计算机科学课制作一个游戏 我正在尝试使用箭头键移动一个扩展 Bug 的角色对象 我应该将使用箭头键移动的代码放在 角色 类中还是 世界 类中 代码应该是什么样的 现在我已经在Character类中得到了这段代码 并且它符合要求
  • 覆盖 VK_Tab 焦点操作

    再会 我正在向 jTextField 添加 keyevent 侦听器 以便如果用户按下 Tab 键 插入符号位置将转到 jtextField 内文本的末尾 这是我的代码 private void jTextField1KeyPressed
  • 无论表单上的焦点控件如何,如何捕获 Keys.F1?

    我使用了 KeyDown 事件和一些简单的代码 例如if e KeyCode Keys F1 捕获在表单上按下 F1 但如果表单上有一些文本框 或者表单上有一些带有 Dock Fill 的电子表格 则上面的代码将毫无用处并且不执行任何操作

随机推荐

  • 如何让我的方法等待所有线程完成?

    我有一个方法可以触发线程来完成一些工作 将有 2 个线程异步运行一段时间 当调用它们的回调方法时 回调会触发另一个线程 直到所有工作完成 如何让我的方法等待所有这些线程完成并被触发 如果这是 Net 4 0 您可以使用CountdownEv
  • 使用iOS类别创建新颜色

    我想创造一些新的UIColor我的应用程序中始终使用的 s RGB 有时会稍微调整 确切的颜色阴影正在争论中 目前 我必须从 RGB 创建新颜色 并且代码遍布各处并重复 有没有更好的方法可以创建一种新的颜色并在我的应用程序中使用它 UICo
  • Bash 将字符串转换为时间戳

    我有一个格式的字符串20141225093000这代表Dec 25 2014 09 30 00我想将原始格式转换为 unix 时间戳格式 以便我可以对其进行时间操作 我如何在 bash 中执行此操作 我可以轻松地解析出这些值expr但我希望
  • VSCode Jupyter Notebook - 恢复缓存版本

    我正在使用在 Ubuntu 19 10 上运行的 VSCode v 1 48 0 创建一个 Jupyter Notebook VSCode 崩溃了 不幸的是我没有保存笔记本 当我重新启动时它是空的 我已经能够在 config Code Us
  • 无法将应用程序提交到 AppStore。 “您的应用程序包的签名包含 iOS 不支持的代码签名权利”

    我正在尝试将我的应用程序提交到 AppStore 但一切都是徒劳的 无论我做什么 我都会收到以下错误 我尝试清理 删除派生数据 重新启动 Xcode 重新启动我的 Mac 没有任何帮助 这个答案 https stackoverflow co
  • Firebase 的 Xcode 编译错误

    我刚刚将 Firebase 框架安装到 Xcode 由于存在其他无法解决的问题 没有使用 CocoaPods 我按照 Firebase 替代设置说明进行操作here https www firebase com docs ios alter
  • Amazon S3 下载尝试限制

    我想限制我的 Amazon s3 服务的下载尝试次数为特定数量 我正在使用来自的库http undesign org za http undesigned org za 任何人都知道如何限制下载到特定数量 我的理解是 这种限制是不可能的 无
  • 复制粘贴编码是否可以接受?

    人们普遍认为复制和粘贴编程是一个坏主意 但是处理两个函数或代码块确实需要的情况的最佳方法是什么 do只需要在几个方面有所不同就会使概括它们变得极其混乱 如果除了一些细微的变化之外 代码基本上是相同的 但这些细微的变化并不容易通过添加参数 模
  • 如何在 iOS 6 中访问 iPhone 的联系人

    我想在我的应用程序中显示联系人和联系人详细信息 联系人列表以及选择该联系人的任何联系人详细信息后将使用地址簿显示在下一页上 我正在 iOS 6 上工作 提前致谢 以下代码用于检索联系方式详细信息 void viewDidLoad super
  • 无法在 Swift 3 / iOS 10 中触发 continueUserActivity

    注意 我已经弄清楚了大部分内容 请参阅最后的更新 还是有些迷茫 我正在尝试在 Swift 3 下的 Xc8b6 中实现 NSUserActivity 处理 但处理程序协议方法的方法签名遇到问题 在当前的文档中 该方法据说是 func app
  • PHP 如何保持下拉列表中选定的选项在提交时保持选中状态?

    I have
  • 将 Android 应用程序与服务器上的 Matlab 应用程序连接

    我正在 Android 上开发一个应用程序 它将获取图像输入 并将该输入传递到安装 MATLAB 应用程序的服务器 MATLAB 应用程序将计算结果并将其返回到该 Android 应用程序 我想知道我可以使用哪个服务器 如何将 MATLAB
  • DataGridView 自动完成组合框列不保留初始单元格离开时的值

    我有一个带有自动完成组合框列的绑定 dataGridView 并且自动完成功能正在工作 只是我观察到一种有点令人恼火的行为 当我第一次在自动完成单元格中键入文本并使用 tabKey 移动到下一个单元格时 我的选择不会保留 我选择的内容将被清
  • -moz-background-clip:text 在 Firefox 中不起作用

    我正在尝试用图像填充 h1 标签中的文本内容 根据我的理解 我在 html 中执行以下操作 div class image clip h1 MY WONDERFULL TEXT h1 div 并在 css 文件中 image clip ba
  • Ember 未在生产环境中加载某些图像

    我有一个 Ember cli 1 13 应用程序 它在公共目录中存储了很多图像 现在 它将正确加载除特定组件中的图像之外的所有图像 该组件的调用方式如下 list item url list url name List Name price
  • 创建默认应用程序时 FirebaseOptions 不能为 null

    我正在尝试在 Flutter 集成电子邮件和基于 google 的登录中尝试一个示例项目 并计划使用 firebase 初始化来执行此操作 同时我已按照教程中提到的所有步骤进行操作 一旦尝试使用 firebase 我就会收到此错误已初始化
  • 打字稿错误:将覆盖输入文件

    我已经更新了最新的离子版本 https github com ionic team ionic releases tag v3 3 0并删除src declarations d ts文件 现在 当我尝试运行应用程序时 我的应用程序显示以下错
  • 有没有办法在 Blazor 中隐藏 div?

    我正在使用 Blazor 并且想在按下导航栏切换器图标时隐藏侧边栏 列表项崩溃了 但问题是 div 仍然存在 div class page div class sidebar div class nav top row pl 4 navba
  • 无法将 python 数据框中的列类型从 object 转换为 str

    我已经下载了一个csv文件 然后将其读取到python dataframe 现在所有4列都有对象类型 我想将它们转换为str类型 现在dtypes的结果如下 Name object Position Title object Departm
  • 如何使用箭头键在 GridWorld 中移动 Bug

    我正在为我的计算机科学课制作一个游戏 我正在尝试使用箭头键移动一个扩展 Bug 的角色对象 我应该将使用箭头键移动的代码放在 角色 类中还是 世界 类中 代码应该是什么样的 现在我已经在Character类中得到了这段代码 并且它符合要求