Java を使用して Snake を再作成することにしましたが、行き詰まっています。現時点では、ユーザーが矢印キーを使用して画面上を移動できる正方形があります。LEFT を 1 回押すと、タイマーを使用して正方形が左に移動し始めます。キーを押したままにしたり、押し続けたりする必要はありません。設定されている他のキー(右、上、下)のいずれかを押すと、方向が変わります。私の目標は、ArrayList を使用して、ヘビを構成する正方形を保持することです。現時点では、内部に Snake オブジェクトを 1 つだけ含む ArrayList を作成しました。リストに 2 つ目の Snake オブジェクトを追加してフレームに追加すると (最初のオブジェクトとともに)、1 つの Snake オブジェクトのみが表示され、移動するキーが表示されます。機能しません。このプロジェクトをどのように進めることができるかについて、いくつかのアイデアを探しています。完全な回答はしないでください。自分でそのほとんどを理解したいと思います。方向性が必要なだけです。前もって感謝します-コードは以下です。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Snake extends JPanel implements KeyListener, ActionListener
{
int x = 0, y = 0, velx = 0, vely = 0;
Timer t = new Timer(250, this);
public Snake(int num1, int num2)
{
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(true);
x = num1;
y = num2;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.blue);
g.fillRect(x, y, 20, 20);
}
public void actionPerformed(ActionEvent e)
{
repaint();
x += velx;
y += vely;
}
public void up()
{
vely = -20;
velx = 0;
}
public void down()
{
vely = 20;
velx = 0;
}
public void left()
{
vely = 0;
velx = -20;
}
public void right()
{
vely = 0;
velx = 20;
}
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(code == KeyEvent.VK_UP)
up();
else if(code == KeyEvent.VK_DOWN)
down();
else if(code == KeyEvent.VK_RIGHT)
right();
else if(code == KeyEvent.VK_LEFT)
left();
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
}
//Driver Class
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
public class UserClass
{
private static JFrame frame = new JFrame("Snake");
private static ArrayList<Snake> mySnake = new ArrayList<Snake>();
public static void main(String[] args)
{
frame.setSize(500,500);
frame.setBackground(Color.black);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mySnake.add(new Snake(20,20));
frame.add(mySnake.get(0));
}
}
PS Mac の Eclipse にこれとまったく同じコードを配置すると、フレームの背景は黒ですが、Windows では明るい灰色になります...理由は誰にもわかりますか? ありがとう。