我用Java创建了一个棋盘游戏,与跳棋原理相同。它在控制台中运行良好,但现在我正在尝试创建图形界面。我有一个Piece类,一个Tile类检查它是否为空或由白色或黑色的跳棋子占据,一个Grid类在矩阵中跟踪Tiles,以及一个Game类。
目前,游戏可以在Grid类中玩;当我们运行Grid类时,用户在控制台中指定棋盘大小,然后通过提供用户所选择的Tile的x和y坐标来玩游戏。我想要改变的是在Game类中运行游戏,它是JPanel的扩展并实现MouseListener(代码如下)。游戏板将是固定大小(我将从5x5开始),我已经画了一个网格的图片应该在游戏的背景中。将有一个实例变量(Grid g = new Grid(5,5))。我还画了不同的“跳棋”棋子的图片,它们应该分布在特定的Tile上。我希望发生的是,当用户单击Tile时,跳棋子会移动。理想情况下,我会这样做,使程序看到鼠标点击的位置的坐标(假设JPanel是500x500像素,用户单击具有坐标(0,500)的像素,然后我们检查(0,500)是否属于某个Tile,如果它不属于任何Tile,则什么也不会发生,如果它属于Grid g上的一个Tile,那么g.play(something,something))。
目前,游戏可以在Grid类中玩;当我们运行Grid类时,用户在控制台中指定棋盘大小,然后通过提供用户所选择的Tile的x和y坐标来玩游戏。我想要改变的是在Game类中运行游戏,它是JPanel的扩展并实现MouseListener(代码如下)。游戏板将是固定大小(我将从5x5开始),我已经画了一个网格的图片应该在游戏的背景中。将有一个实例变量(Grid g = new Grid(5,5))。我还画了不同的“跳棋”棋子的图片,它们应该分布在特定的Tile上。我希望发生的是,当用户单击Tile时,跳棋子会移动。理想情况下,我会这样做,使程序看到鼠标点击的位置的坐标(假设JPanel是500x500像素,用户单击具有坐标(0,500)的像素,然后我们检查(0,500)是否属于某个Tile,如果它不属于任何Tile,则什么也不会发生,如果它属于Grid g上的一个Tile,那么g.play(something,something))。
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class Game extends JPanel implements MouseListener {
private Grid g = new Grid(5,5);
public Game() {
JFrame frame = new JFrame("Boardgame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.setLayout(new FlowLayout());
frame.setPreferredSize(new Dimension(500,500));
frame.pack();
frame.setVisible(true);
frame.addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
//here we check if the user clicked on a tile,
if that happens then we get the x and y-coordinates of the tile and then g.play(x,y)
}
public void mouseEntered(MouseEvent e) {
// we are not really interested in this method or the following
mouse methods but they are necessary for the mouselistener
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public static void main(String args[]) {
new Game();
}
}
因此,我的主要目的是:
i)拥有一个背景图片(这很容易实现,对吧?)[更新:我通过使用JLabel已经实现了这一点,如果有更好的方法,请告诉我]。
ii)修复MouseListener,使得当点击一个图块时,棋子可以移动。我需要的唯一输入是要移动哪个图块,我们不需要知道哪个棋子应该放在那里。
非常感谢你的帮助,如果我有什么需要澄清的,请问我。这不是为学校或其他任何事情,只是一个私人项目。