• 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);
        }
    }
    
  • 相关阅读:
    [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
    [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
    JDE Develop Server分别安装DV PY PD后WEBSERVER问题
    [转]Java 8:不要再用循环了
    查找-find -grep
    长度有限制的字符串hash函数
    oracle 中proc和oci操作对缓存不同处理
    反编译.o到.cpp
    类的对象在外部访问它自己的私有成员变量没问题吗?
    strcpy(),string使用问题
  • 原文地址:https://www.cnblogs.com/iriswang/p/11084648.html
Copyright © 2020-2023  润新知