📄 go.java
字号:
import java.io.*;
import java.awt.*;
import java.net.*;
import java.text.*;
import java.util.*;
import java.beans.*;
import javax.swing.*;
import java.util.zip.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
public class Go extends JFrame implements ItemListener, KeyListener
{
public static JFrame frame = null;
public static Toolkit toolkit = null;
public TextField serverIp = new TextField(25);
public static TextField sendMsg = new TextField(80);
public Choice appType = new Choice();
public Choice chessType = new Choice();
public ChessBoard chessBoard = null;
/*
** myAppType = 0 Client
** myAppType = 1 Server
*/
public int myAppType = 0;
/*
** myChessColor = 3 White
** myChessColor = 7 Black
*/
public static int myChessColor = 3;
public Button beginButton = new Button(" 开始 ");
public Button newButton = new Button(" 新游戏 ");
public ServerSocket server = null;
public InetAddress address = null;
public Socket socket = null;
public static BufferedReader in = null;
public static PrintWriter out = null;
public static boolean goFlag = false;
public static int chess = 1;
public Go()
{
this.frame = this;
setResizable(false);
appType.addItem("Server");
appType.addItem("Client");
chessType.addItem("围棋");
chessType.addItem("五子棋");
appType.setBackground(Color.cyan);
appType.addItemListener(this);
chessType.addItemListener(this);
sendMsg.addKeyListener(this);
setTitle("围棋");
addWindowListener(new WinListener());
this.toolkit = Toolkit.getDefaultToolkit();
try {
serverIp.setText(InetAddress.getLocalHost().getHostAddress());
} catch(UnknownHostException uhe) {
serverIp.setText("GetHostAddress Error!");
}
JPanel panel = new JPanel();
panel.add(appType);
panel.add(chessType);
panel.add(serverIp);
panel.add(beginButton);
panel.add(newButton);
newButton.setEnabled(false);
beginButton.addActionListener(new BeginButtonL());
newButton.addActionListener(new NewButtonL());
chessBoard = new ChessBoard("goimg.jpg");
getContentPane().add(panel, BorderLayout.NORTH);
getContentPane().add(chessBoard, BorderLayout.CENTER);
getContentPane().add(sendMsg, BorderLayout.SOUTH);
setIconImage(new ImageIcon(getClass().getResource("blackchess.gif")).getImage());
}
public static void setDefaultFont(Font font)
{
UIDefaults compUI = UIManager.getDefaults();
Enumeration keys = compUI.keys();
for(; keys.hasMoreElements() ;)
{
try {
String key = (String)keys.nextElement();
Object obj = compUI.get(key);
if(obj instanceof Font)
UIManager.put(key, font);
} catch(ClassCastException cce) {
}
}
}
public static String[] tokenize(String input, String delim)
{
Vector vector = new Vector();
StringTokenizer stk = new StringTokenizer(input, delim);
String fields[];
while(stk.hasMoreTokens())
vector.addElement(stk.nextToken());
fields = new String[vector.size()];
for (int i = 0; i < fields.length; i++)
fields[i] = ((String)vector.elementAt(i)).trim();
return fields;
}
class NetService extends Thread
{
public NetService()
{
start();
}
public void addChessMan(String str)
{
int chessColor = 0;
int chessX = 0;
int chessY = 0;
String[] packet = null;
packet = tokenize(str, ",");
chessColor = Integer.parseInt(packet[0]);
chessX = Integer.parseInt(packet[1]);
chessY = Integer.parseInt(packet[2]);
chessBoard.chessMap[chessX][chessY] = chessColor;
chessBoard.setLastChessman(chessX, chessY);
chessBoard.repaint();
sendMsg.setText("该你下了 ...");
}
public void run()
{
while(true)
{
try {
String str = in.readLine();
if(str.length() != 0)
{
if(str.startsWith("M") == true)
sendMsg.setText(str.substring(1));
else if(str.startsWith("O") == true)
{ //: ChessMan
String tmp = str.substring(1);
addChessMan(tmp);
goFlag = true;
}
else if(str.startsWith("W") == true)
{
String tmp = str.substring(1);
int who = Integer.parseInt(tmp);
if(who == 3) chessBoard.showMessage("白棋赢!!!");
else if(who == 7) chessBoard.showMessage("黑棋赢!!!");
for(int i = 0; i < 19; i ++)
for(int j = 0; j < 19; j ++)
chessBoard.chessMap[i][j] = 0;
chessBoard.setLastChessman(-1, -1);
chessBoard.repaint();
goFlag = true;
sendMsg.setText("先手?");
}
else if(str.startsWith("T") == true)
{ //: 提子
String tmp = str.substring(1);
String[] packet = tokenize(tmp, ",");
for(int i = 0; i < packet.length - 1;)
{
int x = Integer.parseInt(packet[i ++]);
int y = Integer.parseInt(packet[i ++]);
chessBoard.chessMap[x][y] = 0;
}
chessBoard.repaint();
}
else if(str.startsWith("Y_TO_CLEAR") == true)
{ //: Clear Chess
for(int i = 0; i < 19; i ++)
for(int j = 0; j < 19; j ++)
chessBoard.chessMap[i][j] = 0;
chessBoard.setLastChessman(-1, -1);
chessBoard.repaint();
newButton.setEnabled(true);
goFlag = true;
}
else if(str.compareTo("N_TO_CLEAR") == 0)
{
chessBoard.showMessage("对方不同意重新开局!!!");
newButton.setEnabled(true);
}
else if(str.compareTo("BEG CLEAR") == 0)
{
int res = chessBoard.showMessage("对方认输,请求新棋局,是否同意?");
if(res == 0)
{
out.println("Y_TO_CLEAR");
for(int i = 0; i < 19; i ++)
for(int j = 0; j < 19; j ++)
chessBoard.chessMap[i][j] = 0;
chessBoard.setLastChessman(-1, -1);
chessBoard.repaint();
goFlag = true;
}
else out.println("N_TO_CLEAR");
}
}
sleep(500);
} catch(IOException ioe) {
sendMsg.setText(ioe.getMessage());
return;
} catch(InterruptedException e) {}
}
}
}
class NewButtonL implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
out.println("BEG CLEAR");
newButton.setEnabled(false);
}
}
class AcceptClient extends Thread
{
public AcceptClient()
{
start();
}
public void run()
{
sendMsg.setText("等待对方连接......");
try {
socket = server.accept();
sendMsg.setText("联机:" + socket);
in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
NetService net = new NetService();
newButton.setEnabled(true);
goFlag = true;
} catch(IOException ioe) {
sendMsg.setText(ioe.getMessage());
return;
}
}
}
class BeginButtonL implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
beginButton.setEnabled(false);
appType.setEnabled(false);
if(myAppType == 0)
{
sendMsg.setText("正在创建服务......");
try {
server = new ServerSocket(15555);
} catch(IOException ioe) {
sendMsg.setText(ioe.getMessage());
return;
}
new AcceptClient();
}
if(myAppType == 1)
{
try {
address = InetAddress.getByName(serverIp.getText());
sendMsg.setText("Connecting To " + serverIp.getText());
socket = new Socket(address, 15555);
in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
sendMsg.setText("Connect OK!!!");
NetService net = new NetService();
newButton.setEnabled(true);
goFlag = true;
} catch(IOException e) {
sendMsg.setText(e.getMessage());
return;
}
}
}
}
public void itemStateChanged(ItemEvent e)
{
if(e.getSource() instanceof Choice)
{
String choice = (String)e.getItem();
//System.out.println(choice);
if(choice.equals("Server"))
{
myAppType = 0;
myChessColor = 3;
beginButton.setLabel(" 创建 ");
beginButton.setEnabled(true);
}
else if(choice.equals("Client"))
{
myAppType = 1;
myChessColor = 7;
beginButton.setLabel(" 连接 ");
beginButton.setEnabled(true);
}
else if(choice.equals("围棋"))
{
chess = 1;
setTitle("围棋");
}
else if(choice.equals("五子棋"))
{
chess = 2;
setTitle("五子棋");
}
}
} //: itemStateChanged()
public void keyTyped(KeyEvent e)
{
if(e.getKeyChar() == '\n')
out.println("M" + sendMsg.getText());
}
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public class WinListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)
{
int fwidth = 0;
int fheight = 0;
int localx = 0;
int localy = 0;
Go go = new Go();
fwidth = 624;
fheight = 702;
if(go.toolkit.getScreenSize().width > fwidth)
localx = (go.toolkit.getScreenSize().width - fwidth)/2;
if(go.toolkit.getScreenSize().height > fheight)
localy = (go.toolkit.getScreenSize().height - fheight)/2;
go.setSize(fwidth, fheight);
go.setLocation(localx, localy);
go.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -