📄 chess.java
字号:
package test.mychess;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Chess extends JFrame {
// 用于记录黑白棋的位置,chess[i][j] =1 表示在i,j位置放置黑棋
int[][] chess = new int[8][8];
// 用于标志到目前为止下棋的次数
int count = 1;
// stop_black作为是否要停止黑棋走动的标志
boolean stop_black = false;
// stop_write作为是否要停止白棋走动的标志
boolean stop_white = false;
// 用于统计黑棋和白棋的个数
int blackNum = 0, whiteNum = 0;
MyPanel panel = null;
public Chess() {
super("黑白棋游戏");
chess[3][3] = 1;
chess[4][4] = 1;
chess[4][3] = 2;
chess[3][4] = 2;
Container container = this.getContentPane();
container.setLayout(new BorderLayout());
panel = new MyPanel();
JButton button = new JButton("重新开始游戏");
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
int i = e.getX() / 40;
int j = e.getY() / 40;
if (chess[i][j] == 0) {
count++;
test(i, j, count % 2);
}
/*
* // count%2 ==1表示黑方下棋 if(count % 2 == 1){ if(chess[i][j] ==
* 0){ System.out.println("黑棋i:"+i+"j:"+j); count ++;
* chess[i][j] = 2; // flag用于标记是否找到了212序列 int flag = 0;
* if(i-2>=0){ if(chess[i-2][j]==2&&chess[i-1][j]==1){
* chess[i-1][j] = 2; panel.repaint(); flag = 1; change3to0(); } }
* if(i+2<=7&&j-2>=0){
* if(chess[i+1][j-1]==1&&chess[i+2][j-2]==2){
* chess[i+1][j-1]=2; panel.repaint(); flag = 1; change3to0(); } }
* if(i+2<=7){ if(chess[i+1][j]==1&&chess[i+2][j]==2){
* chess[i+1][j]=2; panel.repaint(); flag = 1; change3to0(); } }
* if(j-2>=0){ if(chess[i][j-1]==1&&chess[i][j-2]==2){
* chess[i][j-1]=2 ; panel.repaint(); flag = 1; change3to0(); } }
* if(j+2<=7){ if(chess[i][j+1]==1&&chess[i][j+2]==2){
* chess[i][j+1]=2; panel.repaint(); flag = 1; change3to0(); } }
* if(i-2>=0&&j-2>=0){
* if(chess[i-1][j-1]==1&&chess[i-2][j-2]==2){
* chess[i-1][j-1]=2; panel.repaint(); flag = 1; change3to0(); } }
* if(i-2>=0&&j+2<=7){
* if(chess[i-1][j+1]==1&&chess[i-2][j+2]==2){
* chess[i-1][j+1]=2; panel.repaint(); flag = 1; change3to0(); } }
* if(i+2<=7&&j+2<=7){
* if(chess[i+1][j+1]==1&&chess[i+2][j+2]==2){
* chess[i+1][j+1]=2; panel.repaint(); flag = 1; change3to0(); } }
* if(flag == 0){ chess[i][j] = 3;
* JOptionPane.showMessageDialog(getParent(),
* "没有形成夹击,该位置无效,继续黑方下棋"); if(!isExist()){ stop_black = true;
* blackNum = totalBlack(); if(stop_black == true){
* JOptionPane.showMessageDialog(getParent(),
* "黑棋的个数:"+blackNum+"白棋的个数是:"+whiteNum); } } else{ count --; } } } } //
* 白方下棋 else{ System.out.println("白棋i:"+i+"j:"+j); count ++;
* chess[i][j] = 1; // flag用于标记是否找到了121序列 int flag = 0;
* if(i-2>=0){ if(chess[i-2][j]==1&&chess[i-1][j]==2){
* chess[i-1][j] = 1; panel.repaint(); flag = 1; change3to0(); } }
* if(i+2<=7&&j-2>=0){
* if(chess[i+1][j-1]==2&&chess[i+2][j-2]==1){
* chess[i+1][j-1]=1; panel.repaint(); flag = 1; change3to0(); } }
* if(i+2<=7){ if(chess[i+1][j]==2&&chess[i+2][j]==1){
* chess[i+1][j]=1; panel.repaint(); flag = 1; change3to0(); } }
* if(j-2>=0){ if(chess[i][j-1]==2&&chess[i][j-2]==1){
* chess[i][j-1]=1 ; panel.repaint(); flag = 1; change3to0(); } }
* if(j+2<=7){ if(chess[i][j+1]==2&&chess[i][j+2]==1){
* chess[i][j+1]=1; panel.repaint(); flag = 1; change3to0(); } }
* if(i-2>=0&&j-2>=0){
* if(chess[i-1][j-1]==2&&chess[i-2][j-2]==1){
* chess[i-1][j-1]=1; panel.repaint(); flag = 1; change3to0(); } }
* if(i-2>=0&&j+2<=7){
* if(chess[i-1][j+1]==2&&chess[i-2][j+2]==1){
* chess[i-1][j+1]=1; panel.repaint(); flag = 1; change3to0(); } }
* if(i+2<=7&&j+2<=7){
* if(chess[i+1][j+1]==2&&chess[i+2][j+2]==1){
* chess[i+1][j+1]=1; panel.repaint(); flag = 1; change3to0(); } }
* if(flag == 0){ chess[i][j] = 3;
* JOptionPane.showMessageDialog(getParent(),
* "没有形成夹击,该位置无效,继续由白方下棋"); if(!isExist()){ stop_white = true;
* whiteNum = totalWhite(); if(stop_black == true){
* JOptionPane.showMessageDialog(getParent(),
* "黑棋的个数:"+blackNum+"白棋的个数是:"+whiteNum); } } else{ count --; } } }
*/
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
});
container.add(panel, BorderLayout.CENTER);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
chess[i][j] = 0;
}
}
chess[3][3] = 1;
chess[4][4] = 1;
chess[4][3] = 2;
chess[3][4] = 2;
count = 1;
stop_black = false;
stop_white = false;
blackNum = 0;
whiteNum = 0;
panel.repaint();
}
});
container.add(button, BorderLayout.SOUTH);
this.setSize(330, 380);
this.setVisible(true);
/*Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(d.width / 2, d.height / 2);*/
this.setLocation(200, 100);
this.setResizable(false);
this.addWindowListener(new WindowListener() {
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
});
}
// 用于测试是否可以在i,j位置放置棋子
// mark==1表示在i,j位置放置白棋
// mark ==2表示在i,j位置放置黑棋
public void test(int i, int j, int mark) {
int flag = 0;
int temp1 = 0;
int temp2 = 0;
if (mark == 0) {
temp1 = 2;
temp2 = 1;
} else {
temp1 = 1;
temp2 = 2;
}
// left
int index = -1;
if ((index = i - 1) >= 0) {
while (chess[index][j] == temp2 && index >= 0) {
index--;
}
if (chess[index][j] == temp1 && index < i - 1) {
flag = 1;
for (int n = index; n <= i; n++) {
chess[n][j] = temp1;
}
panel.repaint();
change3to0();
}
}
// right
if ((index = i + 1) <= 7) {
while (chess[index][j] == temp2 && index <= 7) {
index++;
}
if (chess[index][j] == temp1 && index > i + 1) {
flag = 1;
for (int n = i; n <= index; n++) {
chess[n][j] = temp1;
}
panel.repaint();
change3to0();
}
}
// up
if ((index = j - 1) >= 0) {
while (chess[i][index] == temp2 && index >= 0) {
index--;
}
if (chess[i][index] == temp1 && index < j - 1) {
flag = 1;
for (int n = index; n <= j; n++) {
chess[i][n] = temp1;
}
panel.repaint();
change3to0();
}
}
// dowm
if ((index = j + 1) <= 7) {
while (chess[i][index] == temp2 && index <= 7) {
index++;
}
if (chess[i][index] == temp1 && index > j + 1) {
flag = 1;
for (int n = j; n <= index; n++) {
chess[i][n] = temp1;
}
panel.repaint();
change3to0();
}
}
// up-right
int i_index = -1;
int j_index = -1;
if ((i_index = i + 1) <= 7 && (j_index = j - 1) >= 0) {
while (chess[i_index][j_index] == temp2 && i_index <= 7
&& j_index >= 0) {
i_index++;
j_index--;
}
if (chess[i_index][j_index] == temp1 && i_index > i + 1
&& j_index < j - 1) {
flag = 1;
for (int n = 0; n <= i_index - i; n++) {
chess[i + n][j - n] = temp1;
}
panel.repaint();
change3to0();
}
}
// right-down
if ((i_index = i + 1) <= 7 && (j_index = j + 1) <= 7) {
while (chess[i_index][j_index] == temp2 && i_index <= 7
&& j_index <= 7) {
i_index++;
j_index++;
}
if (chess[i_index][j_index] == temp1 && i_index > i + 1
&& j_index > j + 1) {
flag = 1;
for (int n = 0; n <= i_index - i; n++) {
chess[i + n][j + n] = temp1;
}
panel.repaint();
change3to0();
}
}
// left-down
if ((i_index = i - 1) >= 0 && (j_index = j + 1) <= 7) {
while (chess[i_index][j_index] == temp2 && i_index >= 0
&& j_index <= 7) {
i_index--;
j_index++;
}
if (chess[i_index][j_index] == temp1 && i_index < i - 1
&& j_index > j + 1) {
flag = 1;
for (int n = 0; n <= j_index - j; n++) {
chess[i - n][j + n] = temp1;
}
panel.repaint();
change3to0();
}
}
// left-up
if ((i_index = i - 1) >= 0 && (j_index = j - 1) >= 0) {
while (chess[i_index][j_index] == temp2 && i_index >= 0
&& j_index >= 0) {
i_index--;
j_index--;
}
if (chess[i_index][j_index] == temp1 && i_index < i - 1
&& j_index < j - 1) {
flag = 1;
for (int n = 0; n <= i - i_index; n++) {
chess[i - n][j - n] = temp1;
}
panel.repaint();
change3to0();
}
}
if (flag == 0) {
chess[i][j] = 3;
if (mark == 0) {
JOptionPane.showMessageDialog(getParent(),
"没有形成夹击,该位置无效,继续黑方下棋");
if (!isExist()) {
stop_black = true;
blackNum = totalBlack();
if (stop_white == true) {
JOptionPane.showMessageDialog(getParent(), "黑棋的个数:"
+ blackNum + "白棋的个数是:" + whiteNum);
}
} else {
count--;
}
} else {
JOptionPane.showMessageDialog(getParent(),
"没有形成夹击,该位置无效,继续由白方下棋");
if (!isExist()) {
stop_white = true;
whiteNum = totalWhite();
if (stop_black == true) {
JOptionPane.showMessageDialog(getParent(), "黑棋的个数:"
+ blackNum + "白棋的个数是:" + whiteNum);
}
} else {
count--;
}
}
}
}
public void change3to0() {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (chess[i][j] == 3) {
chess[i][j] = 0;
}
}
}
}
public boolean isExist() {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (chess[i][j] == 0) {
return true;
}
}
}
return false;
}
public int totalBlack() {
int count = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (chess[i][j] == 2) {
count++;
}
}
}
return count;
}
public int totalWhite() {
int count = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (chess[i][j] == 1) {
count++;
}
}
}
return count;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Chess chess = new Chess();
}
public class MyPanel extends JPanel {
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
for (int i = 0; i < 9; i++) {
g.drawLine(0, i * 40, 320, i * 40);
g.drawLine(i * 40, 0, i * 40, 320);
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (chess[i][j] == 2) {
g.setColor(Color.BLACK);
g.fillOval(i * 40, j * 40, 40, 40);
}
if (chess[i][j] == 1) {
g.setColor(Color.GREEN);
g.fillOval(i * 40, j * 40, 40, 40);
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -