📄 chesspad.java
字号:
package com.fivechess.chessface;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
/**
* @author wufenghanren
* 显示棋盘的Panel。此Panel实现了鼠标监听器
*/
public class chessPad extends Panel implements MouseListener {
public int chessPoint_x = -1, chessPoint_y = -1, chessColor = 1;
int chessBlack_x[] = new int[200];//黑子的x坐标
int chessBlack_y[] = new int[200];//黑子的y坐标
int chessWhite_x[] = new int[200];//白子的x坐标
int chessWhite_y[] = new int[200];//白子的y坐标
int chessBlackCount = 0, chessWhiteCount = 0;
int chessBlackWin = 0, chessWhiteWin = 0;
public boolean isMouseEnabled = false, isWin = false, isInGame = false;
public Label statusLabel = new Label("客户端状态");
public TextField statusText = new TextField("请先连接服务器");//显示客户端状态的文本框
public Socket chessSocket;
DataInputStream inData;
DataOutputStream outData;
public String chessSelfName = null;//己方的名字
public String chessPeerName = null;//对方的名字
public String host = null;
public int port = 4331;
public chessThread chessthread = new chessThread(this);
/**
* 棋盘Panel的构造函数
*/
public chessPad() {
setSize(440, 440);
setLayout(null);
setBackground(new Color(204, 204, 204));
addMouseListener(this);
add(statusLabel);
statusLabel.setBounds(30, 5, 70, 24);
add(statusText);
statusText.setBounds(100, 5, 300, 24);
statusText.setEditable(false);
}
/**
* 和服务器通信的函数
*/
public boolean connectServer(String ServerIP, int ServerPort)
throws Exception {
try {
//利用参数创建一个Socket的实例来完成和服务器之间的信息交换
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])) {
chessLink++;
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 * 20 == chessBlack_x[chessCompare])
&& ((b - step) * 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 - step) * 20 == chessBlack_x[chessCompare])
&& ((b + step) * 20 == chessBlack_y[chessCompare])) {
chessLink++;
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 - step) * 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 + step) * 20 == chessBlack_x[chessCompare])
&& ((b + step) * 20 == chessBlack_y[chessCompare])) {
chessLink++;
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 - step) * 20 == chessBlack_y[chessCompare])) {
chessLink++;
if (chessLink == 5) {
return (true);
}
}
}
if (chessLink == (chessLinkTest + 1))
chessLinkTest++;
else
break;
}
} else if (checkColor == -1) {
chessLink = 1;
for (step = 1; step <= 4; step++) {
for (chessCompare = 0; chessCompare <= chessWhiteCount; chessCompare++) {
if (((a + step) * 20 == chessWhite_x[chessCompare])
&& (b * 20 == chessWhite_y[chessCompare])) {
chessLink++;
if (chessLink == 5) {
return (true);
}
}
}
if (chessLink == (chessLinkTest + 1))
chessLinkTest++;
else
break;
}
for (step = 1; step <= 4; step++) {
for (chessCompare = 0; chessCompare <= chessWhiteCount; chessCompare++) {
if (((a - step) * 20 == chessWhite_x[chessCompare])
&& (b * 20 == chessWhite_y[chessCompare])) {
chessLink++;
if (chessLink == 5) {
return (true);
}
}
}
if (chessLink == (chessLinkTest + 1))
chessLinkTest++;
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -