gpt4 book ai didi

java - 使用 Java 创建 Snake

转载 作者:搜寻专家 更新时间:2023-11-01 01:10:59 28 4
gpt4 key购买 nike

我决定使用 Java 重新创建 Snake,但我有点卡住了。目前,我有一个正方形,用户可以使用箭头键在屏幕上移动。当您按一次左键时,方 block 开始使用计时器向左移动。您不需要按住键或一直按着它;当您按下任何其他设置的键(右、上、下)时,它会改变方向。我的目标是使用 ArrayList 来保存构成蛇的方 block 。目前,我创建了一个 ArrayList,里面只有一个 Snake 对象,如果我将第二个 Snake 对象添加到列表中并将其添加到框架(与第一个一起),则只有一个 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));
}
}

P.S 当我在我的 Mac 上的 Eclipse 中放置完全相同的代码时,我的框架背景是黑色的,但在 Windows 上它是浅灰色的......有人知道为什么吗?谢谢。

最佳答案

要回答您的后记,请设置背景颜色或使用绘制(paint)的颜色在其他所有内容后面制作一个 JPanel。

要推进该项目,请考虑在 MVC 框架中进行练习。现在发生的情况是您的模型和 View 在同一个类中链接 - 这使得很难遵循一切背后的逻辑。

您可以做的是首先将您的 Snake 与任何与 View 有关的东西分开 - 用 ArrayList<Integer[]> segmentLocations 制作一条蛇或其他东西,以表示您定义的板上每个段位置的 (x,y) - 您可以使用绝对坐标,也可以制作任意网格并在 View 中更改为绝对坐标(这代表了 MVC 关系更好的)。 Snake 还应该有一个字段表示蛇所面对的方向 - 我会使用 enum Direction {N, S, E, W} ,但是您可以选择它,因为您也可以用整数表示方向,或者其他各种方式。

然后你的 Snake 也有办法 self 更新 - move(),根据初始段的当前方向移动所有段的位置,并导致所有其他段跟随前一个段的移动它(如果您考虑几分钟,这将非常容易)。

您的 View 可以是一个 JFrame 和一个由 JPanel 组成的 GridLayout,它会轮询您的 Snake 实例并查看该位置是否有一个段,如果有,则绘制它,或者其他许多选项。

您的 Controller 将是 KeyAdapter,它会在按下箭头键时向您的 Snake 方向发送更新。

小提示,让您的生活更轻松:当您添加新段时,只需将其放在蛇的最后一段的位置即可。下次它移动时,新的部分将位于同一位置,Snake 的其余部分应该相应地移动。

关于java - 使用 Java 创建 Snake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964853/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com