您好我最近开始开发一款蛇游戏。我处于起步阶段,我有一个移动的物体和一个点吃它,但我的主要问题是如何检查蛇是否“吃”了点,我怎么能让它消失?
任何帮助都将非常感激。
这是以下代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
import javax.swing.JPanel;
public class Gui extends JPanel implements ActionListener,KeyListener{
Random rnd= new Random();
int pointx=100 + (int)(Math.random() * ((400- 100) + 1));;
int pointy=100 + (int)(Math.random() * ((300 - 100) + 1));
private String text;
Timer tm = new Timer(5, this);
int x = 300, y = 178, velx = 0, vely = 0;
public Gui()
{
tm.start();
addKeyListener(this);
setFocusable(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(x, y, 35, 15);
g.setColor(Color.BLACK);
g.fillOval(pointx,pointy, 20,20);
}
public void keyPressed(KeyEvent e)
{
int c = e.getKeyCode();
if (c == KeyEvent.VK_LEFT)
{
velx = -1;
vely = 0;
}
if (c == KeyEvent.VK_UP)
{
velx = 0;
vely = -1;
}
if (c == KeyEvent.VK_RIGHT)
{
velx = 1;
vely = 0;
}
if (c == KeyEvent.VK_DOWN)
{
velx = 0;
vely = 1;
}
}
public void actionPerformed(ActionEvent e)
{
x += velx;
y += vely;
repaint();
borders(e);
}
public void borders(ActionEvent e) {
if (x < 0) {
velx = 0;
x = 0;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
if (x > 530) {
velx = 0;
x = 530;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
if (y < 0) {
velx = 0;
y = 0;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
if (y > 330) {
velx = 0;
y = 330;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame("gui");
frame.add(new Gui());
frame.setVisible(true);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
答案 0 :(得分:5)
首先要做的事情:你的GUI应该与你的游戏逻辑分开。
基本上,您需要一个或多个类来封装游戏状态。这个GameState类有一个函数,它返回一个要绘制的圆的列表,以及另一个接受输入的函数。 GUI类处理设置面板和执行绘制请求。事情变得非常简单。要使点消失,只需将其从列表中删除即可。要检查两件事是否相撞,请比较他们的位置。
我实际上用Java做了一段Snake游戏。这是我的课程列表。请记住,这只是一个建议:根据个人喜好和游戏的复杂程度,您需要更多或更少的课程。
显然,这只是做事的一种方式,但这是我推荐的方法。