📄 gobang_server.java
字号:
}
});
mI[2][4].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
musicCurrent = music[4];
musicCurrent.loop();
}
});
mI[2][5].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
musicCurrent = music[5];
musicCurrent.loop();
}
});
mI[2][6].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
musicCurrent = music[6];
musicCurrent.loop();
}
});
mI[2][7].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
musicCurrent = music[7];
musicCurrent.loop();
}
});
mI[2][8].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
musicCurrent = music[8];
musicCurrent.loop();
}
});
mI[2][9].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
musicCurrent = music[9];
musicCurrent.loop();
}
});
mI[2][10].addActionListener(new ActionListener() //静音
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
musicCurrent.stop();
}
});
addMouseListener(new MouseListener() //根据鼠标点击位置确定下棋点
{
public void mouseClicked(MouseEvent e)
{
int iCurrent = (e.getX()-70+19)/37;
int jCurrent = (e.getY()-122+19)/37;
if(iCurrent>=0&&iCurrent<15&&jCurrent>=0&&jCurrent<15&&stoneColor[iCurrent][jCurrent]==0&&connected==true&&(steps_B==steps_W))
{
face1.setVisible(true);
face2.setVisible(false);
Name1.setVisible(true);
Name2.setVisible(false);
stone[iCurrent][jCurrent].setIcon(new ImageIcon("Picture/棋子-黑.png"));
stoneColor[iCurrent][jCurrent] = 1;
if(checkWin(iCurrent,jCurrent)==true)
{
JOptionPane.showMessageDialog(null,"黑棋获胜!");
try
{
z_output.writeObject("blackWin"+" "+iCurrent+" "+jCurrent);
z_output.flush();
}
catch (Exception e1)
{
System.err.println("发生异常:"+e1);
e1.printStackTrace();
}
System.exit(0);
}
else
{
steps_B++;
try
{
z_output.writeObject("ing"+" "+steps_B+" "+iCurrent+" "+jCurrent);
z_output.flush();
}
catch (Exception e1)
{
System.err.println("发生异常:"+e1);
e1.printStackTrace();
}
}
face1.setVisible(false);
face2.setVisible(true);
Name1.setVisible(false);
Name2.setVisible(true);
}
}
public void mousePressed(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
});
}
public void z_displayAppend(String s) //向聊天窗口传送消息
{
z_display.append(s+"\n");
z_display.setCaretPosition(z_display.getText().length());
z_enter.requestFocusInWindow();
}
public void z_run() //运行
{
try //连接客户端并完成信息交互
{
String m;
while(true)
{
z_displayAppend("等待连接");
s = server.accept();
connected = true;
z_displayAppend("接收到客户端连接,"+"您执黑棋,先行!");
z_output = new ObjectOutputStream(s.getOutputStream());
z_input = new ObjectInputStream(s.getInputStream());
z_output.writeObject("连接成功,您执白棋");
z_output.flush();
z_enter.setEnabled(true);
while(true)
{
m = (String) z_input.readObject();
StringBuffer mb = new StringBuffer(m);
if(mb.indexOf("whiteWin")==0) //如果白棋胜利
{
mb.delete(0,9);
if(mb.charAt(1)==' ')
{
xTemp = Integer.parseInt(mb.substring(0,1));
mb.delete(0,2);
}
else
{
xTemp = Integer.parseInt(mb.substring(0,2));
mb.delete(0,3);
}
yTemp = Integer.parseInt(mb.substring(0));
stoneColor[xTemp][yTemp] = 1;
stone[xTemp][yTemp].setIcon(new ImageIcon("Picture/棋子-白.png"));
JOptionPane.showMessageDialog(this,"白棋获胜!");
System.exit(1);
}
else if(mb.indexOf("ing")==0) //处理正常的走棋信息
{
mb.delete(0,4);
if(mb.charAt(1)==' ')
{
steps_W = Integer.parseInt(mb.substring(0,1));
mb.delete(0,2);
}
else
{
steps_W = Integer.parseInt(mb.substring(0,2));
mb.delete(0,3);
}
if(mb.charAt(1)==' ')
{
xTemp = Integer.parseInt(mb.substring(0,1));
mb.delete(0,2);
}
else
{
xTemp = Integer.parseInt(mb.substring(0,2));
mb.delete(0,3);
}
yTemp = Integer.parseInt(mb.substring(0));
stoneColor[xTemp][yTemp] = 2;
stone[xTemp][yTemp].setIcon(new ImageIcon("Picture/棋子-白.png"));
face1.setVisible(true);
face2.setVisible(false);
Name1.setVisible(true);
Name2.setVisible(false);
}
else z_displayAppend("客户端:"+m); //处理聊天信息
}
}
}
catch(Exception e)
{
System.out.println("发生异常"+e);
e.printStackTrace();
}
}
public boolean checkWin(int x,int y) //检测黑棋是否胜利
{
int total=0,i;
//水平方向搜索
for(i=1;(x-i)>=0&&stoneColor[x-i][y]==1;i++)
total++;
for(i=1;(x+i)<15&&stoneColor[x+i][y]==1;i++)
total++;
if(total>=4)
return(true);
else
total = 0;
//竖直方向搜索
for(i=1;(y-i)>=0&&stoneColor[x][y-i]==1;i++)
total++;
for(i=1;(y+i)<15&&stoneColor[x][y+i]==1;i++)
total++;
if(total>=4)
return(true);
else
total = 0;
//斜左侧方向搜索
for(i=1;(x-i)>=0&&(y-i)>=0&&stoneColor[x-i][y-i]==1;i++)
total++;
for(i=1;(x+i)<15&&(y+i)<15&&stoneColor[x+i][y+i]==1;i++)
total++;
if(total>=4)
return(true);
else
total = 0;
//斜右侧方向搜索
for(i=1;(x-i)>=0&&(y+i)<15&&stoneColor[x-i][y+i]==1;i++)
total++;
for(i=1;(x+i)<15&&(y-i)>=0&&stoneColor[x+i][y-i]==1;i++)
total++;
if(total>=4)
return(true);
else
return(false);
}
}
public class Gobang_Server //服务器端
{
public static void main(String args[])
{
Z_Frame_Server app = new Z_Frame_Server( );
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(1024, 768);
app.setVisible(true);
app.setResizable(false);
app.z_run();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -