导航:首页 > 编程语言 > java五子棋简单

java五子棋简单

发布时间:2022-07-18 12:15:22

‘壹’ 初学java写的简单五子棋代码,大神帮看看哪儿错了,用windows可以运行,但是边界会出错。

是的,数组下标越界。

‘贰’ 用JAVA设计游戏:五子棋游戏

下面的源代码分为4个文件;
chessClient.java:客户端主程序。
chessInterface.java:客户端的界面。
chessPad.java:棋盘的绘制。
chessServer.java:服务器端。
可同时容纳50个人同时在线下棋,聊天。
没有加上详细注释,不过绝对可以运行,j2sdk1.4下通过。

/*********************************************************************************************
1.chessClient.java
**********************************************************************************************/

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

class clientThread extends Thread
{
chessClient chessclient;

clientThread(chessClient chessclient)
{
this.chessclient=chessclient;
}

public void acceptMessage(String recMessage)
{
if(recMessage.startsWith("/userlist "))
{
StringTokenizer userToken=new StringTokenizer(recMessage," ");
int userNumber=0;

chessclient.userpad.userList.removeAll();
chessclient.inputpad.userChoice.removeAll();
chessclient.inputpad.userChoice.addItem("所有人");
while(userToken.hasMoreTokens())
{
String user=(String)userToken.nextToken(" ");
if(userNumber>0 && !user.startsWith("[inchess]"))
{
chessclient.userpad.userList.add(user);
chessclient.inputpad.userChoice.addItem(user);
}

userNumber++;
}
chessclient.inputpad.userChoice.select("所有人");
}
else if(recMessage.startsWith("/yourname "))
{
chessclient.chessClientName=recMessage.substring(10);
chessclient.setTitle("Java五子棋客户端 "+"用户名:"+chessclient.chessClientName);
}
else if(recMessage.equals("/reject"))
{
try
{
chessclient.chesspad.statusText.setText("不能加入游戏");
chessclient.controlpad.cancelGameButton.setEnabled(false);
chessclient.controlpad.joinGameButton.setEnabled(true);
chessclient.controlpad.creatGameButton.setEnabled(true);
}
catch(Exception ef)
{
chessclient.chatpad.chatLineArea.setText("chessclient.chesspad.chessSocket.close无法关闭");
}
chessclient.controlpad.joinGameButton.setEnabled(true);
}
else if(recMessage.startsWith("/peer "))
{
chessclient.chesspad.chessPeerName=recMessage.substring(6);
if(chessclient.isServer)
{
chessclient.chesspad.chessColor=1;
chessclient.chesspad.isMouseEnabled=true;
chessclient.chesspad.statusText.setText("请黑棋下子");
}
else if(chessclient.isClient)
{
chessclient.chesspad.chessColor=-1;
chessclient.chesspad.statusText.setText("已加入游戏,等待对方下子...");
}

}
else if(recMessage.equals("/youwin"))
{
chessclient.isOnChess=false;
chessclient.chesspad.chessVictory(chessclient.chesspad.chessColor);
chessclient.chesspad.statusText.setText("对方退出,请点放弃游戏退出连接");
chessclient.chesspad.isMouseEnabled=false;
}
else if(recMessage.equals("/OK"))
{
chessclient.chesspad.statusText.setText("创建游戏成功,等待别人加入...");
}
else if(recMessage.equals("/error"))
{
chessclient.chatpad.chatLineArea.append("传输错误:请退出程序,重新加入 \n");
}
else
{
chessclient.chatpad.chatLineArea.append(recMessage+"\n");
chessclient.chatpad.chatLineArea.setCaretPosition(
chessclient.chatpad.chatLineArea.getText().length());
}
}

public void run()
{
String message="";
try
{
while(true)
{
message=chessclient.in.readUTF();
acceptMessage(message);
}
}
catch(IOException es)
{
}
}

}

public class chessClient extends Frame implements ActionListener,KeyListener
{
userPad userpad=new userPad();
chatPad chatpad=new chatPad();
controlPad controlpad=new controlPad();
chessPad chesspad=new chessPad();
inputPad inputpad=new inputPad();

Socket chatSocket;
DataInputStream in;
DataOutputStream out;
String chessClientName=null;
String host=null;
int port=4331;

boolean isOnChat=false; //在聊天?
boolean isOnChess=false; //在下棋?
boolean isGameConnected=false; //下棋的客户端连接?
boolean isServer=false; //如果是下棋的主机
boolean isClient=false; //如果是下棋的客户端

Panel southPanel=new Panel();
Panel northPanel=new Panel();
Panel centerPanel=new Panel();
Panel westPanel=new Panel();
Panel eastPanel=new Panel();

chessClient()
{
super("Java五子棋客户端");
setLayout(new BorderLayout());
host=controlpad.inputIP.getText();

westPanel.setLayout(new BorderLayout());
westPanel.add(userpad,BorderLayout.NORTH);
westPanel.add(chatpad,BorderLayout.CENTER);
westPanel.setBackground(Color.pink);

inputpad.inputWords.addKeyListener(this);
chesspad.host=controlpad.inputIP.getText();

centerPanel.add(chesspad,BorderLayout.CENTER);
centerPanel.add(inputpad,BorderLayout.SOUTH);
centerPanel.setBackground(Color.pink);

controlpad.connectButton.addActionListener(this);
controlpad.creatGameButton.addActionListener(this);
controlpad.joinGameButton.addActionListener(this);
controlpad.cancelGameButton.addActionListener(this);
controlpad.exitGameButton.addActionListener(this);

controlpad.creatGameButton.setEnabled(false);
controlpad.joinGameButton.setEnabled(false);
controlpad.cancelGameButton.setEnabled(false);

southPanel.add(controlpad,BorderLayout.CENTER);
southPanel.setBackground(Color.pink);

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(isOnChat)
{
try
{
chatSocket.close();
}
catch(Exception ed)
{
}
}
if(isOnChess || isGameConnected)
{
try
{
chesspad.chessSocket.close();
}
catch(Exception ee)
{
}
}
System.exit(0);
}
public void windowActivated(WindowEvent ea)
{

}
});

add(westPanel,BorderLayout.WEST);
add(centerPanel,BorderLayout.CENTER);
add(southPanel,BorderLayout.SOUTH);

pack();
setSize(670,548);
setVisible(true);
setResizable(false);
validate();
}

public boolean connectServer(String serverIP,int serverPort) throws Exception
{
try
{
chatSocket=new Socket(serverIP,serverPort);
in=new DataInputStream(chatSocket.getInputStream());
out=new DataOutputStream(chatSocket.getOutputStream());

clientThread clientthread=new clientThread(this);
clientthread.start();
isOnChat=true;
return true;
}
catch(IOException ex)
{
chatpad.chatLineArea.setText("chessClient:connectServer:无法连接,建议重新启动程序 \n");
}
return false;
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource()==controlpad.connectButton)
{
host=chesspad.host=controlpad.inputIP.getText();
try
{
if(connectServer(host,port))
{
chatpad.chatLineArea.setText("");
controlpad.connectButton.setEnabled(false);
controlpad.creatGameButton.setEnabled(true);
controlpad.joinGameButton.setEnabled(true);
chesspad.statusText.setText("连接成功,请创建游戏或加入游戏");
}

}
catch(Exception ei)
{
chatpad.chatLineArea.setText("controlpad.connectButton:无法连接,建议重新启动程序 \n");
}
}
if(e.getSource()==controlpad.exitGameButton)
{
if(isOnChat)
{
try
{
chatSocket.close();
}
catch(Exception ed)
{
}
}
if(isOnChess || isGameConnected)
{
try
{
chesspad.chessSocket.close();
}
catch(Exception ee)
{
}
}
System.exit(0);

}
if(e.getSource()==controlpad.joinGameButton)
{
String selectedUser=userpad.userList.getSelectedItem();
if(selectedUser==null || selectedUser.startsWith("[inchess]") ||
selectedUser.equals(chessClientName))
{
chesspad.statusText.setText("必须先选定一个有效用户");
}
else
{
try
{
if(!isGameConnected)
{
if(chesspad.connectServer(chesspad.host,chesspad.port))
{
isGameConnected=true;
isOnChess=true;
isClient=true;
controlpad.creatGameButton.setEnabled(false);
controlpad.joinGameButton.setEnabled(false);
controlpad.cancelGameButton.setEnabled(true);
chesspad.chessthread.sendMessage("/joingame "+userpad.userList.getSelectedItem()+" "+chessClientName);
}
}
else
{
isOnChess=true;
isClient=true;
controlpad.creatGameButton.setEnabled(false);
controlpad.joinGameButton.setEnabled(false);
controlpad.cancelGameButton.setEnabled(true);
chesspad.chessthread.sendMessage("/joingame "+userpad.userList.getSelectedItem()+" "+chessClientName);
}

}
catch(Exception ee)
{
isGameConnected=false;
isOnChess=false;
isClient=false;
controlpad.creatGameButton.setEnabled(true);
controlpad.joinGameButton.setEnabled(true);
controlpad.cancelGameButton.setEnabled(false);
chatpad.chatLineArea.setText("chesspad.connectServer无法连接 \n"+ee);
}

}
}
if(e.getSource()==controlpad.creatGameButton)
{
try
{
if(!isGameConnected)
{
if(chesspad.connectServer(chesspad.host,chesspad.port))
{
isGameConnected=true;
isOnChess=true;
isServer=true;
controlpad.creatGameButton.setEnabled(false);
controlpad.joinGameButton.setEnabled(false);
controlpad.cancelGameButton.setEnabled(true);
chesspad.chessthread.sendMessage("/creatgame "+"[inchess]"+chessClientName);
}
}
else
{
isOnChess=true;
isServer=true;
controlpad.creatGameButton.setEnabled(false);
controlpad.joinGameButton.setEnabled(false);
controlpad.cancelGameButton.setEnabled(true);
chesspad.chessthread.sendMessage("/creatgame "+"[inchess]"+chessClientName);
}
}
catch(Exception ec)
{
isGameConnected=false;
isOnChess=false;
isServer=false;
controlpad.creatGameButton.setEnabled(true);
controlpad.joinGameButton.setEnabled(true);
controlpad.cancelGameButton.setEnabled(false);
ec.printStackTrace();
chatpad.chatLineArea.setText("chesspad.connectServer无法连接 \n"+ec);
}

}
if(e.getSource()==controlpad.cancelGameButton)
{
if(isOnChess)
{
chesspad.chessthread.sendMessage("/giveup "+chessClientName);
chesspad.chessVictory(-1*chesspad.chessColor);
controlpad.creatGameButton.setEnabled(true);
controlpad.joinGameButton.setEnabled(true);
controlpad.cancelGameButton.setEnabled(false);
chesspad.statusText.setText("请建立游戏或者加入游戏");
}
if(!isOnChess)
{
controlpad.creatGameButton.setEnabled(true);
controlpad.joinGameButton.setEnabled(true);
controlpad.cancelGameButton.setEnabled(false);
chesspad.statusText.setText("请建立游戏或者加入游戏");
}
isClient=isServer=false;
}

}

public void keyPressed(KeyEvent e)
{
TextField inputWords=(TextField)e.getSource();

if(e.getKeyCode()==KeyEvent.VK_ENTER)
{
if(inputpad.userChoice.getSelectedItem().equals("所有人"))
{
try
{
out.writeUTF(inputWords.getText());
inputWords.setText("");
}
catch(Exception ea)
{
chatpad.chatLineArea.setText("chessClient:KeyPressed无法连接,建议重新连接 \n");
userpad.userList.removeAll();
inputpad.userChoice.removeAll();
inputWords.setText("");
controlpad.connectButton.setEnabled(true);
}
}
else
{
try
{
out.writeUTF("/"+inputpad.userChoice.getSelectedItem()+" "+inputWords.getText());
inputWords.setText("");
}
catch(Exception ea)
{
chatpad.chatLineArea.setText("chessClient:KeyPressed无法连接,建议重新连接 \n");
userpad.userList.removeAll();
inputpad.userChoice.removeAll();
inputWords.setText("");
controlpad.connectButton.setEnabled(true);
}
}
}

}

public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}

public static void main(String args[])
{
chessClient chessClient=new chessClient();
}
}

/******************************************************************************************
下面是:chessInteface.java
******************************************************************************************/

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

class userPad extends Panel
{
List userList=new List(10);

userPad()
{
setLayout(new BorderLayout());

for(int i=0;i<50;i++)
{
userList.add(i+"."+"没有用户");
}
add(userList,BorderLayout.CENTER);

}

}

class chatPad extends Panel
{
TextArea chatLineArea=new TextArea("",18,30,TextArea.SCROLLBARS_VERTICAL_ONLY);

chatPad()
{
setLayout(new BorderLayout());

add(chatLineArea,BorderLayout.CENTER);
}

}

class controlPad extends Panel
{
Label IPlabel=new Label("IP",Label.LEFT);
TextField inputIP=new TextField("localhost",10);
Button connectButton=new Button("连接主机");
Button creatGameButton=new Button("建立游戏");
Button joinGameButton=new Button("加入游戏");
Button cancelGameButton=new Button("放弃游戏");
Button exitGameButton=new Button("关闭程序");

controlPad()
{
setLayout(new FlowLayout(FlowLayout.LEFT));
setBackground(Color.pink);

add(IPlabel);
add(inputIP);
add(connectButton);
add(creatGameButton);
add(joinGameButton);
add(cancelGameButton);
add(exitGameButton);
}

}

class inputPad extends Panel
{
TextField inputWords=new TextField("",40);
Choice userChoice=new Choice();

inputPad()
{
setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i=0;i<50;i++)
{
userChoice.addItem(i+"."+"没有用户");
}
userChoice.setSize(60,24);
add(userChoice);
add(inputWords);
}
}

/**********************************************************************************************
下面是:chessPad.java
**********************************************************************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

class chessThread extends Thread
{
chessPad chesspad;

chessThread(chessPad chesspad)
{
this.chesspad=chesspad;
}

public void sendMessage(String sndMessage)
{
try
{
chesspad.outData.writeUTF(sndMessage);
}
catch(Exception ea)
{
System.out.println("chessThread.sendMessage:"+ea);
}
}

public void acceptMessage(String recMessage)
{
if(recMessage.startsWith("/chess "))
{
StringTokenizer userToken=new StringTokenizer(recMessage," ");
String chessToken;
String[] chessOpt={"-1","-1","0"};
int chessOptNum=0;

while(userToken.hasMoreTokens())
{
chessToken=(String)userToken.nextToken(" ");
if(chessOptNum>=1 && chessOptNum<=3)
{
chessOpt[chessOptNum-1]=chessToken;

}
chessOptNum++;
}
chesspad.netChessPaint(Integer.parseInt(chessOpt[0]),Integer.parseInt(chessOpt[1]),Integer.parseInt(chessOpt[2]));

}
else if(recMessage.startsWith("/yourname "))
{
chesspad.chessSelfName=recMessage.substring(10);
}
else if(recMessage.equals("/error"))
{
chesspad.statusText.setText("错误:没有这个用户,请退出程序,重新加入");
}
else
{
//System.out.println(recMessage);
}
}

public void run()
{
String message="";
try
{
while(true)
{
message=chesspad.inData.readUTF();
acceptMessage(message);
}
}
catch(IOException es)
{
}
}

}

class chessPad extends Panel implements MouseListener,ActionListener
{
int chessPoint_x=-1,chessPoint_y=-1,chessColor=1;
int chessBlack_x[]=new int[200];
int chessBlack_y[]=new int[200];
int chessWhite_x[]=new int[200];
int chessWhite_y[]=new int[200];
int chessBlackCount=0,chessWhiteCount=0;
int chessBlackWin=0,chessWhiteWin=0;
boolean isMouseEnabled=false,isWin=false,isInGame=false;
TextField statusText=new TextField("请先连接服务器");

Socket chessSocket;
DataInputStream inData;
DataOutputStream outData;

String chessSelfName=null;
String chessPeerName=null;
String host=null;
int port=4331;
chessThread chessthread=new chessThread(this);

chessPad()
{
setSize(440,440);
setLayout(null);
setBackground(Color.pink);
addMouseListener(this);
add(statusText);
statusText.setBounds(40,5,360,24);
statusText.setEditable(false);
}

public boolean connectServer(String ServerIP,int ServerPort) throws Exception
{
try
{
chessSocket=new Socket(ServerIP,ServerPort);
inData=new DataInputStream(chessSocket.getInputStream());
outData=new DataOutputStream(chessSocket.getOutputStream());
chessthread.start();
return true;
}
catch(IOException ex)
{
statusText.setText("chessPad:connectServer:无法连接 \n");
}
return false;
}

public void chessVictory(int chessColorWin)
{
this.removeAll();
for(int i=0;i<=chessBlackCount;i++)
{
chessBlack_x[i]=0;
chessBlack_y[i]=0;
}
for(int i=0;i<=chessWhiteCount;i++)
{
chessWhite_x[i]=0;
chessWhite_y[i]=0;
}
chessBlackCount=0;
chessWhiteCount=0;
add(statusText);
statusText.setBounds(40,5,360,24);

if(chessColorWin==1)
{ chessBlackWin++;
statusText.setText("黑棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待白棋下子...");
}
else if(chessColorWin==-1)
{
chessWhiteWin++;
statusText.setText("白棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待黑棋下子...");
}
}

public void getLocation(int a,int b,int color)
{

if(color==1)
{
chessBlack_x[chessBlackCount]=a*20;
chessBlack_y[chessBlackCount]=b*20;
chessBlackCount++;
}
else if(color==-1)
{
chessWhite_x[chessWhiteCount]=a*20;
chessWhite_y[chessWhiteCount]=b*20;
chessWhiteCount++;
}
}

public boolean checkWin(int a,int b,int checkColor)
{
int step=1,chessLink=1,chessLinkTest=1,chessCompare=0;
if(checkColor==1)
{
chessLink=1;
for(step=1;step<=4;step++)
{
for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++)
{
if(((a+step)*20==chessBlack_x[chessCompare]) && ((b*20)==chessBlack_y[chessCompare]))
{
chessLink=chessLink+1;
if(chessLink==5)
{
return(true);
}
}
}
if(chessLink==(chessLinkTest+1))
chessLinkTest++;
else
break;
}
for(step=1;step<=4;step++)
{
for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++)
{
if(((a-step)*20==chessBlack_x[chessCompare]) && (b*20==chessBlack_y[chessCompare]))
{
chessLink++;
if(chessLink==5)
{
return(true);
}
}
}
if(chessLink==(chessLinkTest+1))
chessLinkTest++;
else
break;
}
chessLink=1;
chessLinkTest=1;
for(step=1;step<=4;step++)
{
for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++)
{
if((a*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare]))
{

‘叁’ 五子棋的Java算法

五子棋的算法是比较简单的。

把棋盘当作一个 2 维数组。 用2维数组来当作棋盘的坐标系

当落子 之后。 把落子,插入到 数组中 获得 棋盘 的数组, 循环刚才数组, 判断,

刚才 数组元素 的 横向坐标 -5 到刚才 数组元素坐标 + 5 是否都是 一个数字(黑子代表 1 ,白子代表0) 只要其中 有连续 5个 都是 黑子,或者白子, 则黑子或白子 赢了。

判断,刚才元素 纵向坐标 -5 到 + 5 如上判断。

判断 右斜线。 判断 横向坐标 -5 y -5 到 横向坐标 + 5 y + 5

判断 y + 5 x + 5 到 y-5 x -5

简单来说。

用2维数组 来代表 棋盘 , 每次在 界面上, 由白子,或黑子 落子之后, 在数组相应坐标,放入 1 或者0 。

然后循环数组判断, 数组横向 竖向 右斜线 左斜线 是否是 黑子或者白子 连续的。 如果是,则获胜。

‘肆’ 最近用JAVA写了一个简单的五子棋,鼠标点击问题

repaint();

试试

‘伍’ 用简单的java语言编写五子棋

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class mypanel extends Panel implements MouseListener
{
int chess[][] = new int[11][11];
boolean Is_Black_True;
mypanel()
{
Is_Black_True = true;
for(int i = 0;i < 11;i++)
{
for(int j = 0;j < 11;j++)
{
chess[i][j] = 0;
}
}
addMouseListener(this);
setBackground(Color.BLUE);
setBounds(0, 0, 360, 360);
setVisible(true);
}
public void mousePressed(MouseEvent e)
{
int x = e.getX();
int y = e.getY();

if(x < 25 || x > 330 + 25 ||y < 25 || y > 330+25)
{
return;
}
if(chess[x/30-1][y/30-1] != 0)
{
return;
}
if(Is_Black_True == true)
{
chess[x/30-1][y/30-1] = 1;
Is_Black_True = false;
repaint();
Justisewiner();
return;
}
if(Is_Black_True == false)
{
chess[x/30-1][y/30-1] = 2;
Is_Black_True = true;
repaint();
Justisewiner();
return;
}
}
void Drawline(Graphics g)
{
for(int i = 30;i <= 330;i += 30)
{
for(int j = 30;j <= 330; j+= 30)
{
g.setColor(Color.WHITE);
g.drawLine(i, j, i, 330);
}
}

for(int j = 30;j <= 330;j += 30)
{
g.setColor(Color.WHITE);
g.drawLine(30, j, 330, j);
}

}
void Drawchess(Graphics g)
{
for(int i = 0;i < 11;i++)
{
for(int j = 0;j < 11;j++)
{
if(chess[i][j] == 1)
{
g.setColor(Color.BLACK);
g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16);
}
if(chess[i][j] == 2)
{
g.setColor(Color.WHITE);
g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16);
}
}
}
}
void Justisewiner()
{
int black_count = 0;
int white_count = 0;
int i = 0;

for(i = 0;i < 11;i++)//横向判断
{
for(int j = 0;j < 11;j++)
{
if(chess[i][j] == 1)
{
black_count++;
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利");
Clear_Chess();
return;
}
}
else
{
black_count = 0;
}
if(chess[i][j] == 2)
{
white_count++;
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利");
Clear_Chess();
return;
}
}
else
{
white_count = 0;
}
}
}

for(i = 0;i < 11;i++)//竖向判断
{
for(int j = 0;j < 11;j++)
{
if(chess[j][i] == 1)
{
black_count++;
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利");
Clear_Chess();
return;
}
}
else
{
black_count = 0;
}
if(chess[j][i] == 2)
{
white_count++;
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利");
Clear_Chess();
return;
}
}
else
{
white_count = 0;
}
}
}

for(i = 0;i < 7;i++)//左向右斜判断
{
for(int j = 0;j < 7;j++)
{
for(int k = 0;k < 5;k++)
{
if(chess[i + k][j + k] == 1)
{
black_count++;
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利");
Clear_Chess();
return;
}
}
else
{
black_count = 0;
}
if(chess[i + k][j + k] == 2)
{
white_count++;
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利");
Clear_Chess();
return;
}
}
else
{
white_count = 0;
}
}
}
}

for(i = 4;i < 11;i++)//右向左斜判断
{
for(int j = 6;j >= 0;j--)
{
for(int k = 0;k < 5;k++)
{
if(chess[i - k][j + k] == 1)
{
black_count++;
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利");
Clear_Chess();
return;
}
}
else
{
black_count = 0;
}
if(chess[i - k][j + k] == 2)
{
white_count++;
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利");
Clear_Chess();
return;
}
}
else
{
white_count = 0;
}
}
}
}

}
void Clear_Chess()
{
for(int i=0;i<11;i++)
{
for(int j=0;j<11;j++)
{
chess[i][j]=0;
}
}
repaint();
}
public void paint(Graphics g)
{
Drawline(g);
Drawchess(g);
}
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}

}

class myframe extends Frame implements WindowListener
{
mypanel panel;
myframe()
{
setLayout(null);
panel = new mypanel();
add(panel);
panel.setBounds(0,23, 360, 360);
setTitle("单人版五子棋");
setBounds(200, 200, 360, 383);
setVisible(true);
addWindowListener(this);

}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowOpened(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
}
public class mywindow
{
public static void main(String argc [])
{
myframe f = new myframe();
}
}

‘陆’ 求一个最简单的JAVA五子棋程序。。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

;

public class 下棋 extends JFrame {
int x = 0, y = 0;

int a = 0;

int x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0;;

boolean fa = true, huatu = true, yin = false;

int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0, a7 = 0, a8 = 0, a9 = 0;

int s[] = new int[10], jj[] = new int[10];

JButton congxin, huanse;

JLabel jl;

public 下棋() {
Container c = getContentPane();
c.setLayout(new FlowLayout());
congxin = new JButton("重新开始红队先下");
c.add(congxin);
huanse = new JButton("重新开始蓝队先下");
c.add(huanse);
jl = new JLabel();
c.add(jl, BorderLayout.SOUTH);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
if (event.isAltDown()) {
repaint();
}
x = event.getPoint().x;
y = event.getPoint().y;
int a = mm(x, y);
if (yin) {
jl.setForeground(Color.RED);
jl
.setText(" 游戏已结束,请重新开始 ");

}

else {
if (s[a] == 1) {
jl.setForeground(Color.RED);
jl.setText(" 此位置有棋子,请另选位置重新下棋 ");
} else {
fa = false;
if (a == 1)
a1 = 1;
if (a == 2)
a2 = 1;
if (a == 3)
a3 = 1;
if (a == 4)
a4 = 1;
if (a == 5)
a5 = 1;
if (a == 6)
a6 = 1;
if (a == 7)
a7 = 1;
if (a == 8)
a8 = 1;
if (a == 9)
a9 = 1;
jl.setText("");
repaint();
}
}
s[a] = 1;
}
});

congxin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for (int i = 0; i < s.length; i++) {
s[i] = 0;
jj[i] = 0;
}
fa = true;
repaint();
yin = false;
huatu = true;
jl.setForeground(Color.black);
jl
.setText(" 红队先下 ");
}
});

huanse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for (int i = 0; i < s.length; i++) {
s[i] = 0;
jj[i] = 0;
}
fa = true;
repaint();
yin = false;
huatu = false;
jl.setForeground(Color.black);
jl
.setText(" 蓝队先下 ");
}
});

setSize(500, 500);
setVisible(true);
}

public void paint(Graphics g) {
if (fa) {
super.paint(g);
int x = 100, y = 100, c = 300, k = 300;
for (int i = 0; i < 300; i += 100)
g.drawRect(x, y + i, c, k - i);
for (int i = 0; i < 300; i += 100)
g.drawRect(x + i, y, c - i, k);
} else {
jl.setForeground(Color.black);
if (huatu) {
g.setColor(Color.red);
if (a1 == 1) {
g.drawLine(120, 120, 180, 180);
g.drawLine(180, 120, 120, 180);
a1 = 0;
jj[1] = 1;
}
if (a2 == 1) {
g.drawLine(220, 120, 280, 180);
g.drawLine(280, 120, 220, 180);
a2 = 0;
jj[2] = 1;
}

if (a3 == 1) {
g.drawLine(320, 120, 380, 180);
g.drawLine(380, 120, 320, 180);
a3 = 0;
jj[3] = 1;
}
if (a4 == 1) {
g.drawLine(120, 220, 180, 280);
g.drawLine(180, 220, 120, 280);
a4 = 0;
jj[4] = 1;
}
if (a5 == 1) {
g.drawLine(220, 220, 280, 280);
g.drawLine(280, 220, 220, 280);
a5 = 0;
jj[5] = 1;
}
if (a6 == 1) {
g.drawLine(320, 220, 380, 280);
g.drawLine(380, 220, 320, 280);
a6 = 0;
jj[6] = 1;
}
if (a7 == 1) {
g.drawLine(120, 320, 180, 380);
g.drawLine(180, 320, 120, 380);
a7 = 0;
jj[7] = 1;
}
if (a8 == 1) {
g.drawLine(220, 320, 280, 380);
g.drawLine(280, 320, 220, 380);
a8 = 0;
jj[8] = 1;
}
if (a9 == 1) {
g.drawLine(320, 320, 380, 380);
g.drawLine(380, 320, 320, 380);
a9 = 0;
jj[9] = 1;
}
huatu = false;
jl
.setText(" 蓝队下棋 ");
} else {
g.setColor(Color.blue);
if (a1 == 1) {
g.drawOval(125, 125, 50, 50);
a1 = 0;
jj[1] = 2;
}
if (a2 == 1) {
g.drawOval(225, 125, 50, 50);
a2 = 0;
jj[2] = 2;
}
if (a3 == 1) {
g.drawOval(325, 125, 50, 50);
a3 = 0;
jj[3] = 2;
}
if (a4 == 1) {
g.drawOval(125, 225, 50, 50);
a4 = 0;
jj[4] = 2;
}
if (a5 == 1) {
g.drawOval(225, 225, 50, 50);
a5 = 0;
jj[5] = 2;
}
if (a6 == 1) {
g.drawOval(325, 225, 50, 50);
a6 = 0;
jj[6] = 2;
}
if (a7 == 1) {
g.drawOval(125, 325, 50, 50);
a7 = 0;
jj[7] = 2;
}
if (a8 == 1) {
g.drawOval(225, 325, 50, 50);
a8 = 0;
jj[8] = 2;
}
if (a9 == 1) {
g.drawOval(325, 325, 50, 50);
a9 = 0;
jj[9] = 2;
}
huatu = true;
jl
.setText(" 红队下棋 ");
}
dd();
}
}

public int mm(int x, int y) {
if (x >= 100 && x < 200 && y >= 100 && y < 200)
a = 1;
else if (x >= 200 && x < 300 && y >= 100 && y < 200)
a = 2;
else if (x >= 300 && x < 400 && y >= 100 && y < 200)
a = 3;
else if (x >= 100 && x < 200 && y >= 200 && y < 300)
a = 4;
else if (x >= 200 && x < 300 && y >= 200 && y < 300)
a = 5;
else if (x >= 300 && x < 400 && y >= 200 && y < 300)
a = 6;
else if (x >= 100 && x < 200 && y >= 300 && y < 400)
a = 7;
else if (x >= 200 && x < 300 && y >= 300 && y < 400)
a = 8;
else if (x >= 300 && x < 400 && y >= 300 && y < 400)
a = 9;
else
a = 0;
return a;
}

public void dd() {

if (jj[1] == 1 && jj[2] == 1 && jj[3] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线1,2,3 ");
yin = true;
}
if (jj[4] == 1 && jj[5] == 1 && jj[6] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线4,5,6 ");
yin = true;
}
if (jj[7] == 1 && jj[8] == 1 && jj[9] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线7,8,9 ");
yin = true;
}
if (jj[1] == 1 && jj[5] == 1 && jj[9] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获获胜,连接线1,5,9 ");
yin = true;
}
if (jj[3] == 1 && jj[5] == 1 && jj[7] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线3,5,7 ");
yin = true;
}
if (jj[1] == 1 && jj[4] == 1 && jj[7] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线1,4,7 ");
yin = true;
}
if (jj[2] == 1 && jj[5] == 1 && jj[8] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线2,5,8 ");
yin = true;
}
if (jj[3] == 1 && jj[6] == 1 && jj[9] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 红方获胜,连接线3,6,9 ");
yin = true;
}

if (jj[1] == 2 && jj[2] == 2 && jj[3] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线1,2,3 ");
yin = true;
}
if (jj[4] == 2 && jj[5] == 2 && jj[6] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线4,5,6 ");
yin = true;
}
if (jj[7] == 2 && jj[8] == 2 && jj[9] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线7,8,9 ");
yin = true;
}
if (jj[1] == 2 && jj[5] == 2 && jj[9] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线1,5,9 ");
yin = true;
}
if (jj[3] == 2 && jj[5] == 2 && jj[7] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线3,5,7 ");
yin = true;
}
if (jj[1] == 2 && jj[4] == 2 && jj[7] == 2) {
jl.setForeground(Color.RED);
jl.setText("蓝方获胜,连接线1,4,7 ");
yin = true;
}
if (jj[2] == 2 && jj[5] == 2 && jj[8] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线2,5,8 ");
yin = true;
}
if (jj[3] == 2 && jj[6] == 2 && jj[9] == 2) {
jl.setForeground(Color.RED);
jl
.setText(" 蓝方获胜,连接线3,6,9 ");
yin = true;
}
if (s[1] == 1 && s[2] == 1 && s[3] == 1 && s[4] == 1 && s[5] == 1
&& s[6] == 1 && s[7] == 1 && s[8] == 1 && s[9] == 1) {
jl.setForeground(Color.RED);
jl
.setText(" 双方都没获胜,游戏结束 ");
yin = true;
}
System.out.println(jj[2]);
}

public static void main(String[] args) {
下棋 s = new 下棋();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

‘柒’ java五子棋问题

你好:
我给你讲下思路吧。你可以用0表示没有 棋子,1代表黑棋,2代表白棋。然后"int [][] allChess = new int[19][19]; ",这个二维数组刚好表示空棋盘。你每下一个白棋,把该位置的值改为2,黑棋改为1。输赢判断,横向,如果allChess[x][y]的颜色跟allChess[x+i][y],i从1循环4,往左就减i。满足一个count++,count初始为一,因为从你点击的那个子开始算,至少有一个子连成一条线。关键来了,左上--右下方向 , 判断allChess[x][y]==allChess[x+i][y+i]?count++:count。

‘捌’ JAVA单机版五子棋怎么写

界面思路:
用按钮数组模拟棋盘。

改变按钮的背景图片标志这个棋盘的格子上是黑棋、白棋、空。同时使用一个二维数组记录棋盘棋子的分布,比如qipan[0][0]=1标示第1行第一列的棋子是黑棋子,乙烯类推。

循环检测是否某行、某列、某斜线上是否已经有五个颜色相同的棋子。

简单的算法就是判断某行、某列、某斜线的妻子数目那个最多。通过2个for循环遍历棋盘。

复杂的算法,你看看下面的参考资料,不过下面这段材料如果看不懂的话,用简单的算法实现了五子棋也是很好的了,^_^

五子棋算法(AI)

任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描
整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三
个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:

gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3
gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4
在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:
Const DIR_UP = 1
Const DIR_UPRIGHT = 2
Const DIR_RIGHT = 3
Const DIR_RIGHTDOWN = 4
Const DIR_DOWN = 5
Const DIR_DOWNLEFT = 6
Const DIR_LEFT = 7
Const DIR_LEFTUP = 8
这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:
---------
---------
---oo----
-ox*xx---
---------
---------
图中的*点从标为(4,4),(打*的位置是空位),则:
gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1
gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2
gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2
gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3
...

一旦把所有空点的棋型值填完,我们很容易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的
棋称为活)组成的。对于而白棋在垂直方向上点(4,4)的价值是一个活1,而在/方向也是活1所以,只要我们把该点的对于黑棋和白棋的价值算出
来,然后我们就取棋盘上各个空点的这两个值的和的最大一点作为下棋的点。然而,对各种棋型应该取什么值呢?我们可以先作如下假设:
Fn 表示先手n个棋子的活棋型,如:F4表示先手活四
Fn'表示先手n个棋子的冲棋型,如:F4'表示先手冲四
Ln 表示后手n个棋子的活棋型,如:L3表示后手活三
Ln'表示后手n个棋子的冲棋型,如:L3'表示后手冲三
.
.
.
根据在一行中的棋型分析,得到如下关系:
L1'<=F1'<L2'<=F2'<=L1<F1<L2<F2<L3'<=F3'<L4'<F4'=F4
从这个关系包含了进攻和防守的关系(当然,这个关系是由我定的,你可以自己定义这些关系)。对这些关系再进一步细化,如在一个可下
棋的点,其四个方向上都有活三,也比不上一个冲四,所以我们可以又得到4*F3<L4'这个关系,同样,我们还可以得到其它的关系,如:4*F2<L3、4*L3<F3...,这些的关系由于你的定法和我的定法制可能不一样,这样计算机的AI也就不一样,最后我们把分值最小的L1'值定为1,则我们就得
到了下面各种棋型的分值,由C语言表示为:
F[2][5]={{0,2,5,50,16000},{0,10,30,750,16000}};
L[2][5]={{0,1,5,50,3750},{0,10,30,150,4000}};
F数组表示先手,第一个下标为0时表示冲型,第二个下标表示棋子数,则F2'对应F[0][2]L数组表示后手,第一个下标为0时表示冲型,第二
个下标表示棋子数,则L2对应F[1][2]Ok,棋型的分值关系确定好了以后,我们把每一个可下点的四个方向的棋型值相加(包括先手和后手的分
值),最后选择一个最大值,并把这一点作为计算机要下的点就OK了:)。

‘玖’ 求一个简单的JAVA五子棋代码!! 网上复制的别来了!

我有一个,刚刚做的。可以实现人机对战,人人对战,悔棋,禁手等操作。机器方主要采用的是a-b剪枝算法。功能很强大,代码很多。

阅读全文

与java五子棋简单相关的资料

热点内容
战双程序员 浏览:479
him触摸编程软件 浏览:929
植物大战僵尸存档怎么转移安卓 浏览:852
java栈的元素 浏览:737
程序员与篮球事件 浏览:675
app反编译不完整 浏览:788
电脑上的文件夹怎么调整 浏览:7
服务器无响应是什么原因呀 浏览:984
wd文档里的app怎么制作 浏览:513
电脑里的文件夹没有了一般能恢复吗 浏览:418
哪里有配加密钥匙的 浏览:210
服务器开不了机怎么把数据弄出来 浏览:958
gif动态图片怎么压缩 浏览:521
黑猴子棒球压缩文件解压密码 浏览:631
如何让app适应不同的手机屏幕大小 浏览:10
苹果手机如何给安卓手机分享软件 浏览:761
苹果电脑怎么运行腾讯云服务器 浏览:59
明日之后沙石堡命令助手 浏览:261
蛋糕店用什么样的app 浏览:877
长安银行信用卡app怎么取现 浏览:635