⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chess.java

📁 黑白棋对抗小游戏。在8×8的棋盘中间事先放置两颗黑棋和两颗白棋
💻 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 + -