Compare commits

...

46 Commits
log ... main

Author SHA1 Message Date
p4s5w9lby 6decc6d67a Add monitor
2 years ago
p4s5w9lby 8f96a73df9 Add listener.java
2 years ago
p4s5w9lby cd854dce59 Delete 'monitor.java'
2 years ago
p4s5w9lby 3d89eed184 ADD file via upload
2 years ago
p4s5w9lby b8d25a4e80 ADD file via upload
2 years ago
pa69el8fx eaf8471400 ADD file via upload
2 years ago
pa69el8fx 4aa722bb6e ADD file via upload
2 years ago
p4s5w9lby 8dde80b7c7 Delete 'src/game.zip'
2 years ago
p4s5w9lby 62b72a1155 Add konfig.java
2 years ago
p4s5w9lby 91b585b55e Add 主函数
2 years ago
poqy64t3n 6b9f86b25e ADD file via upload
2 years ago
p4s5w9lby 6747a02097 ADD file via upload
2 years ago
poqy64t3n 1ed84196e3 ADD file via upload
2 years ago
p4s5w9lby 986b6cb4dc Delete '日志-026-柏晓龙5.docx'
2 years ago
p4s5w9lby 54823fae2f Delete '日志-026-柏晓龙4.docx'
2 years ago
p4s5w9lby 1db4dcd5b7 Delete '日志-026-柏晓龙3.docx'
2 years ago
p4s5w9lby 3e9cf6ca49 ADD file via upload
2 years ago
poqy64t3n 1fe7febdf4 ADD file via upload
2 years ago
poqy64t3n 82886ad001 ADD file via upload
2 years ago
poqy64t3n 4d911ca7bf ADD file via upload
2 years ago
poqy64t3n 0ea197f9a3 ADD file via upload
2 years ago
p4s5w9lby c453c4da6f Delete '日志-026-柏晓龙4.docx'
2 years ago
p4s5w9lby 609389e514 Delete '日志-026-柏晓龙3.docx'
2 years ago
p4s5w9lby 82b47c54f9 Delete '日志-026-柏晓龙2.docx'
2 years ago
p4s5w9lby 0e7e2b6801 ADD file via upload
2 years ago
poqy64t3n 8f2ad13fdd ADD file via upload
2 years ago
poqy64t3n cee3c3c7a7 ADD file via upload
2 years ago
poqy64t3n 3f3c24ada0 ADD file via upload
2 years ago
poqy64t3n 99e53785fc ADD file via upload
2 years ago
p4s5w9lby 464390b6db ADD file via upload
2 years ago
p4s5w9lby 9ad6ad1d35 ADD file via upload
2 years ago
p4s5w9lby 7e676952e5 ADD file via upload
2 years ago
p4s5w9lby 4dc0769cfd ADD file via upload
2 years ago
poqy64t3n 29ebc3caee ADD file via upload
2 years ago
pa69el8fx 402429868c ADD file via upload
2 years ago
pa69el8fx cb83cdfa66 Delete '日志-025-王广飞.docx'
2 years ago
pa69el8fx cf5322357f ADD file via upload
2 years ago
pa69el8fx de83cdf51d Delete 'log/日志-025-王广飞.docx'
2 years ago
pa69el8fx e5f5e5727e Delete 'log/日志2-025-王广飞.docx'
2 years ago
poqy64t3n 189c9448ce ADD file via upload
2 years ago
pa69el8fx 34ea60a1b8 ADD file via upload
2 years ago
p4s5w9lby a310b949dd ADD file via upload
2 years ago
p4s5w9lby e23e539c51 ADD file via upload
2 years ago
p4s5w9lby c184f7a3e8 ADD file via upload
2 years ago
p4s5w9lby a8461f7593 Delete '日志-022-柏晓龙.docx'
2 years ago
pa69el8fx 27f1b911ca ADD file via upload
2 years ago

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,12 @@
package game;
//定义config接口
//定义与棋盘数据相关的接口,保存棋盘的起点,格子大小,行数列数等信息
public interface config {
int x=20,y=20,size=40,row=19,column=19;
}

@ -0,0 +1,388 @@
package game;
import java.awt.event.MouseListener;
import java.awt.Graphics;
import java.awt.Color;
//实现对UI下棋界面的监听接口处理
public class listener implements config,MouseListener{
public UI gf;
//public int turn;//判断当前轮到谁了1表示黑方2表示白方
//动态数组对象的实例化
//public ArrayList<ChessPosition>ChessPositonList=new ArrayList<ChessPosition>();
public void setGraphics(UI gf) {
this.gf=gf;
//清除棋盘的全部信息
for(int i=0;i<row;i++)
for(int j=0;j<column;j++) {
gf.isAvail[i][j]=0;
}
gf.ChessPositonList.clear();
gf.turn=1;
gf.repaint();
}
public void mouseClicked(java.awt.event.MouseEvent e) {
int x=e.getX();
int y=e.getY();
//计算棋子要落在棋盘的哪个交叉点上
int countx=(x/40)*40+20;
int county=(y/40)*40+20;
Graphics g=gf.getGraphics();
// System.out.println(gf.isAvail[0][0]);
if(gf.isAvail[(countx-20)/40][(county-20)/40]!=0) {
if(monitor.q>1) {
return;
}
gf.textA.setText("此处已经有棋子了,请下在其它地方");
//System.out.println("此处已经有棋子了,请下在其它地方");
}
else {
//计算棋盘上棋子在数组中相应的位置
int colu=(countx-20)/40;
int ro=(county-20)/40;
if(gf.turn==1) {
//先获取要落的地方
g.setColor(Color.black);
//落子
g.fillOval(countx-size/2, county-size/2, size, size);
//设置当前位置已经有棋子了,棋子为黑子
gf.isAvail[colu][ro]=1;
//把当前所下的棋子位置保存在动态数组中
gf.ChessPositonList.add(new position(colu,ro));
gf.turn++;
gf.textA.setText("黑方已下:白方手");
//判断是否已经出现五颗棋子了
//列判断
//首先界定数组范围,防止越界
int imin=colu-4,imax=colu+4;
if(imin<0) imin=0;
if(imax>18) imax=18;
int count1=0;//判断相连的黑棋子数
for(int i=imin;i<=imax;i++) {
if(gf.isAvail[i][ro]==1) count1++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count1=0;
if(count1==5) {
gf.textA.setText(" 黑方赢!");
return;
}
}
//行判断
//首先界定数组范围,防止越界
int jmin=ro-4,jmax=ro+4;
if(jmin<0) jmin=0;
if(jmax>18) jmax=18;
int count2=0;//判断相连的棋子数
for(int j=jmin;j<=jmax;j++) {
if(gf.isAvail[colu][j]==1) count2++;
else count2=0;
if(count2==5) {
gf.textA.setText(" 黑方赢!");
return;
}
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
}
//左对角线判断
//首先界定数组范围,防止越界
int count3=0;//判断相连的棋子数
for(int i=-4;i<=4;i++) {
if((colu+i>=0)&&(ro+i>=0)&&(colu+i<=18)&&(ro+i<=18)) {
if(gf.isAvail[colu+i][ro+i]==1) count3++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count3=0;
if(count3==5) {
gf.textA.setText(" 黑方赢!");
return;
}
}
}
//右对角线判断
int count4=0;//判断相连的棋子数
for(int i=-4;i<=4;i++) {
if((colu+i>=0)&&(ro-i>=0)&&(colu+i<=18)&&(ro-i<=18)) {
//System.out.print("count4:"+count4);
if(gf.isAvail[colu+i][ro-i]==1) count4++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count4=0;
if(count4==5) {
gf.textA.setText(" 黑方赢!");
return;
}
}
}
}
else {
g.setColor(Color.white);
g.fillOval(countx-size/2, county-size/2, size, size);
//设置当前位置已经有棋子了,棋子为白子
gf.ChessPositonList.add(new position(colu,ro));
gf.isAvail[colu][ro]=2;
gf.turn--;
gf.textA.setText("白方已下:黑方手");
//列判断
//首先界定数组范围,防止越界
int imin=colu-4,imax=colu+4;
if(imin<0) imin=0;
if(imax>18) imax=18;
int count1=0;//判断相连的白棋子数
for(int i=imin;i<=imax;i++) {
if(gf.isAvail[i][ro]==2) count1++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count1=0;
if(count1==5) {
gf.textA.setText(" 白方赢!");
return;
}
}
//行判断
//首先界定数组范围,防止越界
int jmin=ro-4,jmax=ro+4;
if(jmin<0) jmin=0;
if(jmax>18) jmax=18;
int count2=0;//判断相连的棋子数
for(int j=jmin;j<=jmax;j++) {
if(gf.isAvail[colu][j]==2) count2++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count2=0;
if(count2==5) {
gf.textA.setText(" 白方赢!");
return;
}
}
//左对角线判断
//首先界定数组范围,防止越界
int count3=0;//判断相连的棋子数
for(int i=-4;i<=4;i++) {
if((colu+i>=0)&&(ro+i>=0)&&(colu+i<=18)&&(ro+i<=18)) {
if(gf.isAvail[colu+i][ro+i]==2) count3++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count3=0;
if(count3==5) {
gf.textA.setText(" 白方赢!");
return;
}
}
}
//右对角线判断
int count4=0;//判断相连的棋子数
for(int i=-4;i<=4;i++) {
if((colu+i>=0)&&(ro-i>=0)&&(colu+i<=18)&&(ro-i<=18)) {
if(gf.isAvail[colu+i][ro-i]==2) count4++;
//如果出现了其他棋子,或者是没有棋子时,就重新开始计数
else count4=0;
if(count4==5) {
gf.textA.setText(" 白方赢!");
return;
}
}
}
}
}
}
public void mousePressed(java.awt.event.MouseEvent e) {
}
public void mouseReleased(java.awt.event.MouseEvent e) {
}
public void mouseEntered(java.awt.event.MouseEvent e) {
}
public void mouseExited(java.awt.event.MouseEvent e) {
}
}

@ -0,0 +1,104 @@
package game;
//设置按钮监听方法monitor类
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
//实现对JPanel的监听接口处理
public class monitor implements config,ActionListener{
public UI gf;
static int q=0;
public monitor(UI gf) {
this.gf=gf;//获取左半部分的画板
}
//当界面发生操作时进行处理
public void actionPerformed(ActionEvent e) {
//获取当前被点击按钮的内容,判断是不是"开始新游戏"这个按钮
if(e.getActionCommand().equals("开始新游戏")) {
//如果是开始新游戏的按钮,再为左半部分设置监听方法
q++;
gf.textA.setText(" 开始新游戏!");
listener fl=new listener();
fl.setGraphics(gf);//获取画笔对象
gf.addMouseListener(fl);
}
//判断当前点击的按钮是不是悔棋
else if(e.getActionCommand().equals("悔棋")) {
if(gf.ChessPositonList.size()>1) {
//把棋子数组相应的位置置为0
position l=new position();
//获取最后一个棋子的对象信息
l=gf.ChessPositonList.remove(gf.ChessPositonList.size()-1);
//把相应的数组位置置为0
gf.isAvail[l.Listi][l.Listj]=0;
//把玩家还原为上一步的玩家
if(gf.turn==1) gf.turn++;
else gf.turn--;
gf.textA.setText(" ");
//直接调用gf的重绘方法重绘方法的画笔应该是在棋盘页面还没生成的时候就要获取
//调用repaint会自动调用paint方法而且不用给参数
gf.repaint();
//gf.paint(gf.getGraphics());
}
else {
gf.textA.setText(" 不能悔棋!");
//System.out.println("不能悔棋!");
}
}
else if(e.getActionCommand().equals("认输")) {
if(gf.turn==1) gf.textA.setText(" 白方赢!");//System.out.println("白方赢");
else gf.textA.setText(" 黑方赢!"); //System.out.println("黑方赢");
}
}
}

@ -0,0 +1,14 @@
package game;
//新建一个棋子类ChessPosition保存每一步棋子所在的位置
public class position {
public int Listi,Listj;
public position() {
}
public position(int Listi, int Listj) {
this.Listi=Listi;
this.Listj=Listj;
}
}

@ -0,0 +1,226 @@
package game;
//构建五子棋界面UI类
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.util.ArrayList;
public class UI extends JPanel implements config {
public Graphics g;//定义一支画笔
public int[][] isAvail=new int [19][19];//定义一个二维数组来储存棋盘的落子情况
public ArrayList<position>ChessPositonList=new ArrayList<position>();//保存每一步的落子情况
public int turn=1;
JTextArea textA = new JTextArea("欢迎来到五子棋",10,15);
JTextArea textB = new JTextArea("五子棋",0,15);
Font f1= new Font("宋体",Font.BOLD,15);
Font f2= new Font("宋体",Font.BOLD,15);
//主函数入口
public static void main(String args[]) {
UI gf=new UI();//初始化一个五子棋界面的对象
gf.initUI();//调用方法进行界面的初始化
}
public void initUI() {
//初始化一个界面,并设置标题大小等属性
JFrame jf=new JFrame();
jf.setTitle("五子棋");
jf.setSize(927,800);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(3);
jf.setLayout(new BorderLayout());//设置顶级容器JFrame为框架布局
Dimension dim1=new Dimension(150,0);//设置右半部分的大小
Dimension dim3=new Dimension(800,0);//设置左半部分的大小
Dimension dim2=new Dimension(140,40);//设置右边按钮组件的大小
//实现左边的界面把GoBangframe的对象添加到框架布局的中间部分
this.setPreferredSize(dim3);//设置下棋界面的大小
this.setBackground(Color.yellow);//设置下棋界面的颜色
//这里的话直接把左边的画板添加上去,指明是在框架布局的中间版块
//若放在其他版块会有一些小问题
jf.add(this,BorderLayout.CENTER);//添加到框架布局的中间部分
//实现右边的JPanel容器界面
JPanel jp=new JPanel();
jp.setPreferredSize(dim1);//设置JPanel的大小
jp.setBackground(Color.white);//设置右边的界面颜色为白色
jf.add(jp,BorderLayout.EAST);//添加到框架布局的东边部分
jp.setLayout(new FlowLayout());//设置JPanel为流式布局
//添加作者
textB.setFont(f2);
jp.add(textB);
//接下来我们需要把按钮等组件依次加到那个JPanel上面
//设置按钮数组
String[] butname= {"开始新游戏","悔棋","认输"};
JButton[] button=new JButton[3];
//依次把三个按钮组件加上去
for(int i=0;i<butname.length;i++) {
button[i]=new JButton(butname[i]);
button[i].setPreferredSize(dim2);
jp.add(button[i]);
}
//添加文本框
textA.setFont(f1);
textA.setLineWrap(true);//设置自动换行
jp.add(textA);
//按钮监控类
monitor butListen=new monitor(this);
//对每一个按钮都添加状态事件的监听处理机制
for(int i=0;i<butname.length;i++) {
button[i].addActionListener(butListen);//添加发生操作的监听方法
}
jf.setVisible(true);
}
//重写重绘方法,这里重写的是第一个大的JPanel的方法
public void paint(Graphics g) {
super.paint(g);
//重绘出棋盘
g.setColor(Color.black);
for(int i=0;i<row;i++) {
g.drawLine(x, y+size*i, x+size*(column-1), y+size*i);
}
for(int j=0;j<column;j++) {
g.drawLine(x+size*j, y, x+size*j, y+size*(row-1));
}
//重绘出棋子
for(int i=0;i<row;i++) {
for(int j=0;j<column;j++) {
if(isAvail[i][j]==1) {
int countx=size*i+20;
int county=size*j+20;
g.setColor(Color.black);
g.fillOval(countx-size/2, county-size/2, size, size);
}
else if(isAvail[i][j]==2) {
int countx=size*i+20;
int county=size*j+20;
g.setColor(Color.white);
g.fillOval(countx-size/2, county-size/2, size, size);
}
}
}
}
}

Binary file not shown.
Loading…
Cancel
Save