Java用awt编写五子棋

Java用awt编写五子棋

结果演示:
结果演示

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class ChessBoard extends Frame {
	public TextField txt;//提示文本(显示当前应下棋的玩家)
	public int flag=1;//判断轮到哪名玩家
	public int[][] board= new int[15][15];//对应棋盘的二维数组
	public Button[] btn=new Button[225];//棋盘
	public ChessBoard(String title) {
		super(title);
		init();
	}
	private void init() {
		this.setBounds(100,100,800,840);
		txt=new TextField();
		Button restart=new Button("重新开始");
		this.add(txt, BorderLayout.SOUTH);
		this.add(restart, BorderLayout.EAST);
		txt.setText("当前玩家:Player1");
		TextField name=new TextField();
		this.add(name, BorderLayout.NORTH);
		name.setText("Player1:O;     Player2:X;");
		Panel panel=new Panel();
		GridLayout gl=new GridLayout(15,15,1,1);
		panel.setLayout(gl);
		this.add(panel);
		for(int i=0;i<btn.length;i++) {
			btn[i]=new Button();
			panel.add(btn[i]);
		}//建立棋盘
		for(int i=0;i<btn.length;i++) {
				btn[i].addMouseListener(new ChessButtonListener(this,i));
		}//将棋子在棋盘上打印出来
		new Result1(this);
		new Result2(this);//启动线程
		restart.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				for(int i=0;i<btn.length;i++)
					btn[i].setLabel(null);
				for(int i=0;i<15;i++) {
					for(int j=0;j<15;j++)
						board[i][j]=0;
				}
				if(flag==1) {
					flag=1;
					txt.setText("当前玩家:Player1");
				}else if(flag==2) {
					flag=2;
					txt.setText("当前玩家:Player2");
				}
			}
		});//判断是否重新开始并清空棋盘
		this.setVisible(true);
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				ChessBoard.this.dispose();
			}
		});//关闭游戏
	}
}
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class ChessButtonListener extends MouseAdapter {
	private ChessBoard frame;
	private int i;
	public ChessButtonListener(ChessBoard frame,int i) {
		this.frame =frame;
		this.i=i;
	}//引入数据

	public void mouseClicked(MouseEvent e) {
		if(frame.board[i/15][i%15]==0) {//判断是否为空棋盘
			if(frame.flag==1) {//判断轮到哪名玩家
				frame.board[i/15][i%15]=1;//改变对应二维数组的值
				frame.btn[i].setLabel("O");//输出棋子
				frame.flag=2;
				frame.txt.setText("当前玩家:Player2");//输出提示
			}else if(frame.flag==2) {
				frame.board[i/15][i%15]=2;//改变对应二维数组的值
				frame.btn[i].setLabel("X");//输出棋子
				frame.flag=1;
				frame.txt.setText("当前玩家:Player1");//输出提示
			}
		}
		super.mouseClicked(e);
	}
}

public class Result1 extends Thread {
	private ChessBoard frame;
	private int count=1,i,j,i1,j1;
	private boolean result=false;//判断输赢

	public Result1(ChessBoard frame) {
		this.frame = frame;
		start();
	}//引入数据并启动线程
	public void run() {
	while(true) {
		synchronized("") {//判断是否赢了
		for(i=0;i<15;i++) {//横行
			count=1;
			for(j=0;j<14;j++) {
				if(frame.board[i][j]==1) {
					if(frame.board[i][j]==frame.board[i][j+1]) {
						count++;
						if(count==5) {
							result=true;
							break;
						}
					}else {
						count=1;
					}
				}
			}
		}
		for(i=0;i<15;i++) {//纵列
			count=1;
			for(j=0;j<14;j++) {
				if(frame.board[j][i]==1) {
					if(frame.board[j][i]==frame.board[j+1][i]) {
						count++;
						if(count==5) {
							result=true;
							break;
						}
					}else {
						count=1;
					}
				}
			}
		}
		for(i=0;i<frame.board.length-4;i++) {//左斜
			for(j=0;j<frame.board.length-4;j++) {
				i1=i;
				j1=j;
				count=1;
				while(i1<frame.board.length-1&&j1<frame.board.length-1) {
					if(frame.board[i1][j1]==1) {
						if(frame.board[i1][j1]==frame.board[i1+1][j1+1]) {
							count++;
							if(count==5) {
								result=true;
								break;
							}
						}else {
							count=1;
						}
					}
					i1++;
					j1++;
				}
			}
		}
		for(i=0;i<frame.board.length-4;i++) {//右斜
			for(j=frame.board.length-1;j>=4;j--) {
				i1=i;
				j1=j;
				count=1;
				while(i1<frame.board.length-1&&j1-1>=0) {
					if(frame.board[i1][j1]==1) {
						if(frame.board[i1][j1]==frame.board[i1+1][j1-1]) {
							count++;
							if(count==5) {
								result=true;
								break;
							}
						}else {
							count=1;
						}
					}
					i1++;
					j1--;
				}
			}
		}
		if(result) {
			frame.txt.setText("Player1获胜!");//输出结果
			for(i=0;i<15;i++) {
				for(j=0;j<15;j++)
					frame.board[i][j]=1;//停止落棋
			}
			result=false;
		}
	}
		try {
			this.sleep(1000);//上锁并休眠节约内存
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	}
}
public class Result2 extends Thread {
	private ChessBoard frame;
	private int count=1,i,j,i1,j1;
	private boolean result=false;//判断输赢

	public Result2(ChessBoard frame) {
		this.frame = frame;
		start();
	}//引入数据并启动线程
	public void run() {
		while(true) {
			synchronized("") {//判断是否赢了
			for(i=0;i<15;i++) {//横行
				count=1;
				for(j=0;j<14;j++) {
					if(frame.board[i][j]==2) {
						if(frame.board[i][j]==frame.board[i][j+1]) {
							count++;
							if(count==5) {
								result=true;
								break;
							}
						}else {
							count=1;
						}
					}
				}
			}
			for(i=0;i<15;i++) {//纵列
				count=1;
				for(j=0;j<14;j++) {
					if(frame.board[j][i]==2) {
						if(frame.board[j][i]==frame.board[j+1][i]) {
							count++;
							if(count==5) {
								result=true;
								break;
							}
						}else {
							count=1;
						}
					}
				}
			}
			for(i=0;i<frame.board.length-4;i++) {//左斜
				for(j=0;j<frame.board.length-4;j++) {
					i1=i;
					j1=j;
					count=1;
					while(i1<frame.board.length-1&&j1<frame.board.length-1) {
						if(frame.board[i1][j1]==2) {
							if(frame.board[i1][j1]==frame.board[i1+1][j1+1]) {
								count++;
								if(count==5) {
									result=true;
									break;
								}
							}else {
								count=1;
							}
						}
						i1++;
						j1++;
					}
				}
			}
			for(i=0;i<frame.board.length-4;i++) {//右斜
				for(j=frame.board.length-1;j>=4;j--) {
					i1=i;
					j1=j;
					count=1;
					while(i1<frame.board.length-1&&j1-1>=0) {
						if(frame.board[i1][j1]==2) {
							if(frame.board[i1][j1]==frame.board[i1+1][j1-1]) {
								count++;
								if(count==5) {
									result=true;
									break;
								}
							}else {
								count=1;
							}
						}
						i1++;
						j1--;
					}
				}
			}
			if(result) {
				frame.txt.setText("Player2获胜!");//输出结果
				for(i=0;i<15;i++) {
					for(j=0;j<15;j++)
						frame.board[i][j]=2;//停止落棋
				}
				result=false;
			}
		}
			try {
				this.sleep(1000);//上锁并休眠节约内存
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
public class Game {

	public static void main(String[] args) {
		new ChessBoard("五子棋");//启动
	}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wslxc00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值