文章目录
前言
学习了一些java初步知识制作了这款五子棋游戏,本篇博客用于梳理过程`
一、GUI部分
1.Java.Swing 和 Java.awt
Java.Swing 和 Java.awt是两个常用来完成图形用户界面编程的工具包。
Swing是JAVA基础类的一部分。Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。 Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行。
AWT全称是抽象窗口工具集,AWT是一个窗口框架,它从不同平台的窗口系统中抽取共同组件,当使用AWT编写图形界面应用时,程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM 调用操作系统本地的图形界面来创建和平台一致的对等体。
JFrame:java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
JPanel :JavaGUI工具包swing中的面板容器类,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,可以加入到JFrame窗体
JButton :用于创建按钮。
此外还有JLabel,JTextField等。
2.创建基本窗体
public void showUI() {
JFrame jf = new JFrame();
jf.setSize(880,800);
jf.setTitle("五子棋1.1");
jf.setLocationRelativeTo(null);//窗口将置于屏幕的中央
jf.setDefaultCloseOperation(3);//点击关闭后直接关闭应用程序
jf.setVisible(true);
//窗体的基本结构
BorderLayout flow = new BorderLayout();
jf.setLayout(flow);
//流式布局
JPanel ePanel = new JPanel();
ePanel.setPreferredSize(new Dimension(80,0));
jf.add(ePanel, BorderLayout.EAST);
//加入面板,放在窗体最东的位置
JButton jbu = new JButton("开始");
ePanel.add(jbu);
//加入按钮
jf.getContentPane().setBackground(Color.lightGray);
//为棋盘设置背景板颜色方便区分
}
3.绘制棋盘
对于棋盘的绘制,我们知道棋盘是由若干条线段横竖交错形成的,棋子落在棋盘交界处
在这里我们单独创建一个继承JFrame的MYFrame类用来绘制棋盘,设定好初始坐标,棋盘线数,棋子大小等参数之后我们重写paint()方法,通过super.paint(g);继承父类的方法,接着绘制棋盘即可
记得将GUI类创建窗体部分的JFrame改为MYFrame
public class MYFrame extends JFrame {
public int X0 = 50 ,Y0 = 70 ,LINE = 15 ,SIZE = 50 ,CHESS = 50;
//X0,Y0为棋盘最左上角坐标,LINE为棋盘线条数,SIZE为线条间距,CHESS为棋子直径
public void paint(Graphics g) {
super.paint(g);
//super关键字用来访问父类的构造方法、普通方法和属性
//下面为重写部分用来绘制棋盘棋子
for(int i = 0;i < LINE;i++) {
g.setColor(Color.black);
g.drawLine(X0, Y0 + i*SIZE, (LINE-1)*SIZE + X0, Y0 + i*SIZE);
g.drawLine(X0 + i*SIZE, Y0,X0 + i*SIZE , (LINE - 1)*SIZE + Y0);
}
//绘制棋盘
}
基本效果如下所示
4.绘制棋子
对于棋子的规划我们可以想象整个棋盘的所有交点位置对应一个二维数组,对于每下入一个棋子就将数组中元素进行更改,然后根据数字不同对应不同的颜色,将下列代码加入刚才创建的MYFrame类里
public int[][] chessArr;
//此数组用于存放棋子坐标
for(int i = 0;i < LINE;i++) {
for(int j = 0;j < LINE;j++) {
if(chessArr[i][j] == 1) {
g.setColor(Color.BLACK);
g.fillOval(i*SIZE + X0 - CHESS/2, j*SIZE + Y0 - CHESS/2, CHESS, CHESS);
}
if(chessArr[i][j] == 2) {
g.setColor(Color.WHITE);
g.fillOval(i*SIZE + X0 - CHESS/2, j*SIZE + Y0 - CHESS/2, CHESS, CHESS);
}
}
}
//绘制棋子,1对应黑棋,2对应白棋
有了以上内容GUI部分的绘制就基本完成了
二、监听器
1.下棋
对于五子棋的落子,我们要知道,每个棋子对应二维数组里的一格,在这里我们详细讲一下整个棋盘的划分。
首先整个窗体我们设定的大小为880800,880我们将其分为800+80,也就是说棋盘大小为800800,控制面板大小为80800用来添加按钮
然后,我们的棋盘设定为横竖15条线,每条间距为50,因而棋盘的实际占用面积为(1550ÿ