JAVA——黑白棋簡單實現
阿新 • • 發佈:2018-10-31
package Reversi_JCoder; import java.awt.*; import java.awt.Button; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Reversi extends JFrame{ static JButton mmp[][] = new JButton[8][8]; static int chess[][] = newint[8][8]; static int dir[][] = {{0,1},{1,0},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; static int color = 2; static int check(int x,int y,int color){ if(chess[x][y] != 1 && chess[x][y] != 2){ for(int i = 0;i < 8;i ++){ int tx = x + dir[i][0];int ty = y + dir[i][1]; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8 && chess[tx][ty] > 0 && chess[tx][ty] != color){ return 1; } } } return 0; } static void Print(){for(int i = 0;i < 8;i ++){ for(int j = 0;j < 8;j ++){ if(chess[i][j] == 1){mmp[i][j].setBackground(Color.WHITE);} else if(chess[i][j] == 2){mmp[i][j].setBackground(Color.BLACK);} } } return ; } static int hasZero(String p) { if(p.length() == 0) {return 0;} return p.indexOf("0"); } static int change(int x,int y,int color){ int isChange = 0; int diff = 3 - color; String p = ""; int f = 0; for(int i = x - 1;i >= 0;i --) {//west if(chess[i][y] == color) {f = 1;break;} p += String.valueOf(chess[i][y]); } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = x - 1;i >= 0;i --) { if(chess[i][y] == color) {break;} chess[i][y] = color; } }//System.out.println(f); f = 0;p = ""; for(int i = x + 1;i < 8;i ++) {//east if(chess[i][y] == color) {f = 1;break;} p += String.valueOf(chess[i][y]); } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = x + 1;i < 8;i ++) { if(chess[i][y] == color) {break;} chess[i][y] = color; } }//System.out.println(f); f = 0;p = ""; for(int i = y - 1;i >= 0;i --) {//north if(chess[x][i] == color) {f = 1;break;} p += String.valueOf(chess[x][i]); } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = y - 1;i >= 0;i --) { if(chess[x][i] == color) {break;} chess[x][i] = color; } }//System.out.println(f); f = 0;p = ""; for(int i = y + 1;i < 8;i ++) {//south if(chess[x][i] == color) {f = 1;break;} p += String.valueOf(chess[x][i]); } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = y + 1;i < 8;i ++) { if(chess[x][i] == color) {break;} chess[x][i] = color; } }//System.out.println(f); f = 0;p = ""; for(int i = 1;i <= 8;i ++) {//east-north int tx = x + i; int ty = y - i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {f = 1;break;} p += String.valueOf(chess[tx][ty]); } } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = 1;i <= 8;i ++) { int tx = x + i; int ty = y - i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {break;} chess[tx][ty] = color; } } } f = 0;p = ""; for(int i = 1;i <= 8;i ++) {//east-south int tx = x + i; int ty = y + i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {f = 1;break;} p += String.valueOf(chess[tx][ty]); } } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = 1;i <= 8;i ++) { int tx = x + i; int ty = y + i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {break;} chess[tx][ty] = color; } } } f = 0;p = ""; for(int i = 1;i <= 8;i ++) {//west-north int tx = x - i; int ty = y - i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {f = 1;break;} p += String.valueOf(chess[tx][ty]); } } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = 1;i <= 8;i ++) { int tx = x - i; int ty = y - i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {break;} chess[tx][ty] = color; } } } f = 0;p = ""; for(int i = 1;i <= 8;i ++) {//west-south int tx = x - i; int ty = y + i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {f = 1;break;} p += String.valueOf(chess[tx][ty]); } } if(hasZero(p) == -1 && f == 1) { isChange = 1; for(int i = 1;i <= 8;i ++) { int tx = x - i; int ty = y + i; if(tx >= 0 && tx < 8 && ty >= 0 && ty < 8) { if(chess[tx][ty] == color) {break;} chess[tx][ty] = color; } } } f = 0;p = ""; if(isChange == 1) {chess[x][y] = color;Print();} return isChange; } public Reversi(){ JFrame window = new JFrame(); Container con = window.getContentPane(); con.setLayout(null); window.setVisible(true); window.setSize(800,600); for(int i = 0;i < 8;i ++){ for(int j = 0;j < 8;j ++){ int ii = i; int jj = j; chess[i][j] = 0; mmp[i][j] = new JButton(); mmp[i][j].setVisible(true); mmp[i][j].setBounds(40 + 40 * i,40 + 40 * j,40,40); mmp[i][j].setBackground(Color.gray); mmp[i][j].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ if(check(ii,jj,color) == 1) { if(change(ii,jj,color) == 1) { color = 3 - color; } } } }); window.add(mmp[i][j]); } } chess[3][3] = 1; chess[4][4] = 1; mmp[3][3].setBackground(Color.WHITE); mmp[4][4].setBackground(Color.WHITE); chess[3][4] = 2; chess[4][3] = 2; mmp[3][4].setBackground(Color.BLACK); mmp[4][3].setBackground(Color.BLACK); window.setSize(800,500); window.setTitle("Reversi By-J_Coder"); window.setVisible(true); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Reversi(); } }