java网络五子棋
chessPad.java:棋盘的绘制.
chessServer.java:服务器端.
/*********************************************************************************************
①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(userNumber0 !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);
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无法关闭");
else if(recMessage.startsWith("/peer "))
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="";
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;
boolean isOnChat=false; //在聊天?
boolean isOnChess=false; //在下棋?
boolean isServer=false; //如果是下棋的主机
Panel southPanel=new Panel();
Panel northPanel=new Panel();
Panel centerPanel=new Panel();
Panel westPanel=new Panel();
Panel eastPanel=new Panel();
chessClient()
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)
chatSocket.close();
catch(Exception ed)
if(isOnChess || isGameConnected)
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();
setVisible(true);
setResizable(false);
validate();
public boolean connectServer(String serverIP,int serverPort) throws Exception
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();
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(e.getSource()==controlpad.joinGameButton)
String selectedUser=userpad.userList.getSelectedItem();
if(selectedUser==null || selectedUser.startsWith("[inchess]") ||
selectedUser.equals(chessClientName))
chesspad.statusText.setText("必须先选定一个有效用户");
if(!isGameConnected)
if(chesspad.connectServer(chesspad.host,chesspad.port))
isGameConnected=true;
isOnChess=true;
isClient=true;
controlpad.cancelGameButton.setEnabled(true);
chesspad.chessthread.sendMessage("/joingame "◆userpad.userList.getSelectedItem()◆" "◆chessClientName);
isGameConnected=false;
isOnChess=false;
isClient=false;
chatpad.chatLineArea.setText("chesspad.connectServer无法连接 \n"◆ee);
if(e.getSource()==controlpad.creatGameButton)
isServer=true;
chesspad.chessthread.sendMessage("/creatgame "◆"[inchess]"◆chessClientName);
catch(Exception ec)
isServer=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);
chesspad.statusText.setText("请建立游戏或者加入游戏");
if(!isOnChess)
isClient=isServer=false;
public void keyPressed(KeyEvent e)
TextField inputWords=(TextField)e.getSource();
if(e.getKeyCode()==KeyEvent.VK_ENTER)
if(inputpad.userChoice.getSelectedItem().equals("所有人"))
out.writeUTF(inputWords.getText());
inputWords.setText("");
catch(Exception ea)
chatpad.chatLineArea.setText("chessClient:KeyPressed无法连接,建议重新连接 \n");
userpad.userList.removeAll();
inputpad.userChoice.removeAll();
controlpad.connectButton.setEnabled(true);
out.writeUTF("/"◆inputpad.userChoice.getSelectedItem()◆" "◆inputWords.getText());
public void keyTyped(KeyEvent e)
public void keyReleased(KeyEvent e)
public static void main(String args[])
chessClient chessClient=new chessClient();
/******************************************************************************************
下面是:chessInteface.java
******************************************************************************************/
class userPad extends Panel
List userList=new List(10);
userPad()
userList.add(i◆"."◆"没有用户");
add(userList,BorderLayout.CENTER);
class chatPad extends Panel
chatPad()
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
Choice userChoice=new Choice();
inputPad()
userChoice.addItem(i◆"."◆"没有用户");
add(userChoice);
add(inputWords);
/**********************************************************************************************
下面是:chessPad.java
class chessThread extends Thread
chessPad chesspad;
chessThread(chessPad chesspad)
this.chesspad=chesspad;
public void sendMessage(String sndMessage)
chesspad.outData.writeUTF(sndMessage);
System.out.println("chessThread.sendMessage:"◆ea);
if(recMessage.startsWith("/chess "))
String chessToken;
String[] chessOpt={"-1","-1","0"};
int chessOptNum=0;
chessToken=(String)userToken.nextToken(" ");
chessOpt[chessOptNum-1]=chessToken;
chessOptNum◆◆;
chesspad.chessSelfName=recMessage.substring(10);
chesspad.statusText.setText("错误:没有这个用户,请退出程序,重新加入");
//System.out.println(recMessage);
message=chesspad.inData.readUTF();
class chessPad extends Panel implements MouseListener,ActionListener
int chessPoint_x=-1,chessPoint_y=-1,chessColor=1;
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;
chessThread chessthread=new chessThread(this);
chessPad()
setLayout(null);
addMouseListener(this);
add(statusText);
statusText.setEditable(false);
public boolean connectServer(String ServerIP,int ServerPort) throws Exception
chessSocket=new Socket(ServerIP,ServerPort);
inData=new DataInputStream(chessSocket.getInputStream());
outData=new DataOutputStream(chessSocket.getOutputStream());
chessthread.start();
statusText.setText("chessPad:connectServer:无法连接 \n");
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;
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)
chessBlackCount◆◆;
else if(color==-1)
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(chessCompare=0;chessCompare=chessBlackCount;chessCompare◆◆)
chessLink=chessLink◆1;
return(true);
if(chessLink==(chessLinkTest◆1))
chessLinkTest◆◆;
break;
chessLink◆◆;
chessLinkTest=1;
这个程序实现还要一个关联文件夹"image"象棋棋子图片 部分代码如下:(代码太长 给个邮箱 我发给你)
import javax.swing.*;
//主类
public class Chess{
public static void main(String args[]){
new ChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫");
//主框架类
class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{
//粉丝
//棋盘
JLabel image;
//窗格
Container con;
//工具栏
JToolBar jmain;
//重新开始
JButton anew;
//悔棋
JButton repent;
//退出
JButton exit;
//当前信息
JLabel text;
//保存当前操作
Vector Var;
//规则类对象(使于调用方法)
ChessRule rule;
/**
** 单击棋子
** chessManClick = true 闪烁棋子 并给线程响应
** chessManClick = false 吃棋子 停止闪烁 并给线程响应
*/
boolean chessManClick;
** 控制粉丝走棋
** chessPlayClick=1 黑棋走棋
//控制棋子闪烁的线程
Thread tmain;
//把第一次的单击棋子给线程响应
static int Man,i;
ChessMainFrame(){
new ChessMainFrame("中国象棋");
** 构造函数
** 初始化图形用户界面
ChessMainFrame(String Title){
//获行客格引用
con = this.getContentPane();
con.setLayout(null);
//实例化规则类
rule = new ChessRule();
Var = new Vector();
//创建工具栏
jmain = new JToolBar();
text = new JLabel("欢迎使用象棋对弈系统");
//当鼠标放上显示信息
text.setToolTipText("信息提示");
anew = new JButton(" 新 游 戏 ");
anew.setToolTipText("重新开始新的一局");
exit = new JButton(" 退 出 ");
exit.setToolTipText("退出象棋程序程序");
repent = new JButton(" 悔 棋 ");
repent.setToolTipText("返回到上次走棋的位置");
//把组件添加到工具栏
jmain.add(anew);
jmain.add(repent);
jmain.add(exit);
jmain.add(text);
con.add(jmain);
//添加棋子标签
drawChessMan();
//注册按扭监听
anew.addActionListener(this);
repent.addActionListener(this);
exit.addActionListener(this);
//注册棋子移动监听
con.add(play[i]);
play[i].addMouseListener(this);
//添加棋盘标签
con.add(image = new JLabel(new ImageIcon("image\\Main.GIF")));
image.addMouseListener(this);
//注册窗体关闭监听
this.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent we){
);
//窗体居中
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height screenSize.height){
frameSize.height = screenSize.height;
if (frameSize.width screenSize.width){
frameSize.width = screenSize.width;
//设置
this.setIconImage(new ImageIcon("image\\红将.GIF").getImage());
this.setResizable(false);
this.setTitle(Title);
this.show();
** 添加棋子方法
public void drawChessMan(){
//流程控制
int i,k;
//图标
Icon in;
//黑色棋子
//车
in = new ImageIcon("image\\黑车.GIF");
play[i] = new JLabel(in);
play[i].setName("车1");
//马
in = new ImageIcon("image\\黑马.GIF");
play[i].setName("马1");
//相
in = new ImageIcon("image\\黑象.GIF");
play[i].setName("象1");
//士
in = new ImageIcon("image\\黑士.GIF");
play[i].setName("士1");
//卒
in = new ImageIcon("image\\黑卒.GIF");
play[i].setName("卒1" ◆ i);
//炮
in = new ImageIcon("image\\黑炮.GIF");
play[i].setName("炮1" ◆ i);
//将
in = new ImageIcon("image\\黑将.GIF");
//红色棋子
in = new ImageIcon("image\\红车.GIF");
in = new ImageIcon("image\\红马.GIF");
in = new ImageIcon("image\\红象.GIF");
in = new ImageIcon("image\\红士.GIF");
//兵
in = new ImageIcon("image\\红卒.GIF");
in = new ImageIcon("image\\红炮.GIF");
//帅
in = new ImageIcon("image\\红将.GIF");
** 线程方法控制棋子闪烁
import java.awt.Color;
public class Chess extends JPanel
{//继承面板类
public Chess(int grids,int gridsize)
{//grids:行数和列数, gridsize:单元格的高和宽
super(null);
for(int i=0; igrids; i◆◆)
for(int j=0; jgrids; j◆◆)
JLabel l = new JLabel();//生成标签实例
l.setSize(gridsize,gridsize);
l.setLocation(i*gridsize,j*gridsize);
{ //当小方格的坐标和刚好是偶数时,
l.setBackground(Color.black); //设置为方格为黑色
l.setOpaque(true); //设置为不透明
l.setBorder(BorderFactory.createLineBorder(Color.black)); //设置边界为黑色
add(l);//将l标签添加到面板
public static void main(String[] args)
JFrame f = new JFrame();
f.setLocationRelativeTo(null); //设置窗口相对于指定组件的位置
f.setVisible(true);
以上就是土嘎嘎小编为大家整理的java象棋注册界面代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!