Как добавить слушателя на нажатие клавиши на игре Hangman [duplicate]

Ответ Хастуркуна с использованием опции xxd -i превосходный. Если вы хотите включить процесс преобразования (текст -> файл с шестнадцатеричным включением) непосредственно в свою сборку, то инструмент / библиотека hexdump.c недавно добавила возможность, аналогичную опции -i xxd (она не дает вам полный заголовок - вам нужно для предоставления определения массива char, но это имеет преимущество, позволяя вам выбрать имя массива char):

http://25thandclement.com/~william/projects/hexdump.c .html

Это лицензия намного более «стандартная», чем xxd, и очень либеральная - пример ее использования для вставки файла инициализации в программу можно увидеть в CMakeLists.txt и schem.c здесь:

https://github.com/starseeker/tinyscheme-cmake

Есть плюсы и минусы как для включения сгенерированных файлы в исходных деревьях и связанные с ними утилиты - как справиться с этим будет зависеть от конкретных целей и потребностей вашего проекта. hexdump.c открывает опцию связывания для этого приложения.

3
задан Andrew Thompson 4 June 2012 в 06:21
поделиться

4 ответа

http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html Проверьте этот учебник

Если это приложение на основе пользовательского интерфейса, Мне также нужно знать, что мне нужно добавить в мой код, чтобы моя программа ожидала около 700 миллисекунд для ввода ключа, прежде чем перейти к другому методу «вы можете использовать класс GlassPane или Timer для выполнения этого требования.

Для ключевого события:

public void keyPressed(KeyEvent e) {

    int key = e.getKeyCode();

    if (key == KeyEvent.VK_LEFT) {
        dx = -1;
    }

    if (key == KeyEvent.VK_RIGHT) {
        dx = 1;
    }

    if (key == KeyEvent.VK_UP) {
        dy = -1;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 1;
    }
}

проверьте этот игровой пример http://zetcode.com/tutorials/javagamestutorial/movingsprites/

9
ответ дан Nayuki 19 August 2018 в 03:36
поделиться
  • 1
    Я проверил этот учебник, а также около 4 других, и я, похоже, не очень понимаю его. – DSdavidDS 4 June 2012 в 06:07
  • 2
    Ссылка имеет 2D-игру, там вы найдете точный выход – Abhishek Choudhary 4 June 2012 в 06:20
  • 3
    Классный пример игры! – Yster 4 December 2015 в 14:55

В дополнение к использованию KeyListener (как показывают ответы других), иногда вам необходимо убедиться, что JComponent, который вы используете, является Focusable. Это можно установить, добавив это в свой компонент (если вы являетесь подклассом):

@Override
public void setFocusable(boolean b) {
    super.setFocusable(b);
}

И добавив это в свой конструктор:

setFocusable(true);

Или, если вы вызов функции из родительского класса / контейнера:

JComponent childComponent = new JComponent();
childComponent.setFocusable(true);

И затем выполнение всех материалов KeyListener, упомянутых другими.

1
ответ дан Astrolamb 19 August 2018 в 03:36
поделиться

Здесь SSCCE ,

package experiment;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class KeyListenerTester extends JFrame implements KeyListener {

    JLabel label;

    public KeyListenerTester(String s) {
        super(s);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        addKeyListener(this);
        setSize(200, 100);
        setVisible(true);

    }

    @Override
    public void keyTyped(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right key typed");
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left key typed");
        }

    }

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right key pressed");
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left key pressed");
        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right key Released");
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left key Released");
        }
    }

    public static void main(String[] args) {
        new KeyListenerTester("Key Listener Tester");
    }
}

Дополнительно читайте по этим ссылкам: Как написать прослушиватель клавиш и ] Как использовать привязки клавиш

6
ответ дан COD3BOY 19 August 2018 в 03:36
поделиться

Класс, который реализует интерфейс KeyListener, становится нашим пользовательским прослушивателем ключевых событий. Этот слушатель не может напрямую прослушивать ключевые события. Он может только прослушивать ключевые события через промежуточные объекты, такие как JFrame. Итак,

  1. Сделайте один класс прослушивателя клавиш как
    class MyListener implements KeyListener{
    
       // override all the methods of KeyListener interface.
    }
    
  2. Теперь наш класс MyKeyListener готов прослушать ключевые события. Но он не может этого сделать напрямую.
  3. Создайте любой объект, например JFrame, через который MyListener может прослушивать ключевые события. для этого вам нужно добавить объект MyListener к объекту JFrame.
    JFrame f=new JFrame();
    f.addKeyListener(new MyKeyListener);
    
1
ответ дан René Vogt 19 August 2018 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: