Java 蛇游戏。手柄按键法
我让蛇跑了下来,现在我试着让keypressed()方法工作。我不认为这是从键盘上听到的。我的想法是,例如,如果按下向下键,变量方向设置为1,switch case语句将处理该问题。我怀疑开关盒没有读取方向变量 我的主要班级:Java 蛇游戏。手柄按键法,java,Java,我让蛇跑了下来,现在我试着让keypressed()方法工作。我不认为这是从键盘上听到的。我的想法是,例如,如果按下向下键,变量方向设置为1,switch case语句将处理该问题。我怀疑开关盒没有读取方向变量 我的主要班级: package com.bin.snake; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.KeyE
package com.bin.snake;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game extends JPanel{
boolean playingSnake = true;
Snake snake = new Snake();
public Game() {
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
snake.keyPressed(e);
}
});
setFocusable(true);
}
public void paint(Graphics g) {// inherit paint method of JPanel class with
// parameter g type Graphics
// parameter g is the object to paint things
super.paint(g); // erase latest image
Graphics2D g2d = (Graphics2D) g; // casting g to Graphics2D type
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// rendering
// image
snake.paint(g2d);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Snake!");
frame.setVisible(true);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game game = new Game();
frame.add(game);
while (true) {
game.updateGame();
game.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void updateGame() {
snake.moveSnake();
}
}
我的蛇课:
package com.bin.snake;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
public class Snake {
private Game game;
int iSnakeLength = 10;
int direction = 1;
final int SIDE = 13;
int[] snakeY = new int[2000];
int[] snakeX = new int[2000];
int xs = 0;
int ys = 0;
public void moveSnake() {
switch (direction) {
case 0:// up
snakeY[0] -=1.5;
break;
case 1:// down
snakeY[0] += 1.5;
break;
case 2:// right
snakeX[0] += 1.5;
break;
case 3:// left
snakeX[0] -=1.5;
break;
}
for (int i = iSnakeLength; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
}
public void paint(Graphics2D g) {
g.fillRect(snakeX[0], snakeY[0], SIDE, SIDE);
for (int i = 0; i < iSnakeLength; i++) {
g.fillRect(snakeX[i + 1], snakeY[i + 1], SIDE, SIDE);
}
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_DOWN){
direction = 1;
}
if(e.getKeyCode() == KeyEvent.VK_UP){
direction = 0;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT){
direction = 3;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
direction = 2;
}
}
package com.bin.snake;
导入java.awt.Graphics2D;
导入java.awt.event.KeyEvent;
公营蛇{
私人游戏;
int iSnakeLength=10;
int方向=1;
最终内端=13;
int[]snakeY=新int[2000];
int[]snakeX=新int[2000];
int-xs=0;
int ys=0;
公众假期{
开关(方向){
案例0://向上
snakeY[0]-=1.5;
打破
案例1://向下
snakeY[0]+=1.5;
打破
案例2://对
蛇[0]+=1.5;
打破
案例3://左
蛇[0]-=1.5;
打破
}
对于(int i=iSnakeLength;i>0;i--){
蛇[i]=蛇[i-1];
snakeY[i]=snakeY[i-1];
}
}
公共空隙涂料(图2D g){
g、 fillRect(蛇[0],蛇[0],边,边);
for(int i=0;i
}
我不认为这是从键盘上听到的。我的想法
KeyEvents仅调度到具有焦点的组件。默认情况下,JPanel不可聚焦
要使面板可聚焦,请使用:
panel.setFocusable( true );
其他意见:
paintComponent(…)
方法而不是paint()方法来完成的。有关更多信息和示例,请阅读上的Swing教程键绑定
。阅读上的Swing教程。您还可以查看其中包含使用键绑定移动组件的工作示例使用键绑定,任何其他答案都是错误的