Java小项目——五子棋

一、需求分析

1、界面设计

左:棋盘,单独写一个GamePanel类

右:控制栏panel2

2、功能

2.1 棋盘

首先绘制一个棋盘。考虑重绘,将该绘制写在paint()重写中。

2.2 下棋

用户点击相应位置:计算出棋子的位置,绘制棋子,并存储棋子位置。同样将该绘制写在paint()重写中。

2.3 胜利

胜利判断:横向、竖直、斜向判断

2.4 电脑下棋

使用xxx实现

二、实现

0、Config 常数接口

存在一些数为常量,不须改变。

需要时直接继承该接口。

1、绘制棋盘

我们将UI分为两个板块,左边为游戏区域

将绘制棋盘的功能代码,放在paint()函数中,解决重绘功能

  public void paint(Graphics gr){
        super.paint(gr);
        System.out.println("重绘");
        //绘制棋盘
        for(int i=0;i<LINE;i++){
            gr.drawLine(X0,Y0+SIZE*i,X0+SIZE*(LINE-1),Y0+SIZE*i);//竖向画线
            gr.drawLine(X0+SIZE*i,Y0,X0+SIZE*i,Y0+SIZE*(LINE-1));//横向画线
        }
}

2、下棋功能

三、源码

0、

​
package com.java7.wuziqi0712_win;

public interface Config {
    public static final int X0=30;
    public static final int Y0=30;
    public static final int SIZE=40;//棋盘间隔大小
    public static final int LINE=19;//棋盘线条数目

    //保存棋子,二维数组对应第i,j个,是否存在棋子,不存在为0;若存在,黑棋为1,白棋为0
    public int chessArray[][] = new int[LINE][LINE];
}

​

1、GameUI

package com.java7.wuziqi0715_ai;

import javax.swing.*;
import java.awt.*;

public class GameUI implements Config {
    public static void main(String args[]){
        GameUI game = new GameUI();
        game.showUI();
    }

    public void showUI(){
        //1.建立面板
        JFrame jf = new JFrame();
        jf.setTitle("五子棋1.0");
        jf.setSize(X0*2+SIZE*(LINE-1)+130,X0*2+SIZE*(LINE-1)+22);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(3);

        //2.绘制棋盘
        GamePanel gp = new GamePanel();
        jf.add(gp);

        //3.绘制按钮
        JPanel jp2 = new JPanel();

        jp2.setBackground(Color.WHITE);
        jp2.setPreferredSize(new Dimension(130,0));
        //jp2.setBorder(BorderFactory.createLineBorder(Color.red));//设置面板边框颜色
        jf.add(jp2,BorderLayout.EAST);
        JButton jb1 = new JButton("重新开始");
        JLabel lb1 = new JLabel("
--------
");
        JButton jb2 = new JButton("玩家对战");
        JButton jb3 = new JButton("悔棋");
        JLabel lb2 = new JLabel("
--------
");
        JButton jb4 = new JButton("人机对战");

        jp2.add(jb1);
        jp2.add(lb1);
        jp2.add(jb2);
        jp2.add(jb3);
        jp2.add(lb2);
        jp2.add(jb4);

        JRadioButton jrb1= new JRadioButton("玩家先手",true);
        JRadioButton jrb2= new JRadioButton("电脑先手");
        //单选按钮,互斥,一次只能选择一个
        ButtonGroup bg = new ButtonGroup();
        bg.add(jrb1);
        bg.add(jrb2);
        jp2.add(jrb1);
        jp2.add(jrb2);

        jf.setVisible(true);

        //3.下棋  :在jf上加鼠标监听器
        //画笔
        Graphics gr = gp.getGraphics();
        //创建监听器对象
        GameMouse mouse = new GameMouse(gr,chessArray,jf);

        //给面板加上监听器
        gp.addMouseListener(mouse);
        jb1.addActionListener(mouse);
        jb2.addActionListener(mouse);
        jb3.addActionListener(mouse);
        jb4.addActionListener(mouse);

        jrb1.addActionListener(mouse);
        jrb2.addActionListener(mouse);
    }
}
原文地址:https://www.cnblogs.com/iriswang/p/11084648.html