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("五子棋");//启动
}
}