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
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("\n--------\n");
JButton jb2 = new JButton("玩家对战");
JButton jb3 = new JButton("悔棋");
JLabel lb2 = new JLabel("\n--------\n");
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 五子棋 项目
一、需求分析
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
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("\n--------\n");
JButton jb2 = new JButton("玩家对战");
JButton jb3 = new JButton("悔棋");
JLabel lb2 = new JLabel("\n--------\n");
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);
}
}
发布评论