之四:落子及判断输赢
“程序主界面”上落子,判断输赢,效果见下图:

汇智学堂-JAVA桌面游戏开发(五子棋之四:落子及判断输赢)-LMLPHP
准备工作:
汇智学堂-JAVA桌面游戏开发(五子棋之四:落子及判断输赢)-LMLPHP
Images文件夹下,放置black.png及white.png图片一张。

代码实现:

package com.fivechess.view;
import javax.swing.JOptionPane;

public class WhichWin extends ChessBoard2{

//判断上下输赢
public void upOrDown(int x1,int y1,int[][] position,int whichColor) {
	 int sum=1;
    //向上判断
	 for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1][y1-i]==position[x1][y1-i-1]) {
			 sum+=1;
		 }
		 else {
			 break;
		 }
	 }

	//向下判断
	 for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }

		 if(position[x1][y1+i]==position[x1][y1+i+1]) {
			 sum+=1;
		 }

		 else {
			 break;
		 }
	 }

	 if(sum>=5) {
		 if(whichColor==1) {
			 JOptionPane.showMessageDialog(null,"白棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 if(whichColor==0) {
			 JOptionPane.showMessageDialog(null,"黑棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }

		 PCChessBoard2.isClose=1;
		 initStart();
	 }
}

//判断左右输赢
public void leftOrRight(int x1,int y1,int[][] position,int whichColor) {
int sum=1;
//向左判断
for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1-i][y1]==position[x1-i-1][y1]) {
			 sum+=1;
		 }
		 else {
			 break;
		 }
	 }

	//向右判断
	 for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1+i][y1]==position[x1+i+1][y1]) {
    			 sum+=1;
    	  }
		 else {
			 break;
		 }
	 }

	 if(sum>=5) {
		 if(whichColor==1) {
			 JOptionPane.showMessageDialog(null,"白棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 if(whichColor==0) {
			 JOptionPane.showMessageDialog(null,"黑棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 PCChessBoard2.isClose=1;
	 }

}

//判断左上及右下输赢
public void Obliquedirection(int x1,int y1,int[][] position,int whichColor) {
int sum=1;
//向左上判断
for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1-i][y1-i]==position[x1-i-1][y1-i-1]) {
			 sum+=1;
		 }
		 else {
			 break;
		 }
	 }

	//向右判断
	 for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1+i][y1+i]==position[x1+i+1][y1+i+1]) {
			 sum+=1;
		 }
		 else {
			 break;
		 }
	 }

	 if(sum>=5) {
		 if(whichColor==1) {
			 JOptionPane.showMessageDialog(null,"白棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 if(whichColor==0) {
			 JOptionPane.showMessageDialog(null,"黑棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 PCChessBoard2.isClose=1;
	 }

}

//判断右上及左下输赢
public void Obliquedirection2(int x1,int y1,int[][] position,int whichColor) {
int sum=1;
//向右上判断
for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1+i][y1-i]==position[x1+i+1][y1-i-1]) {
			 sum+=1;
		 }
		 else {
			 break;
		 }
	 }

	//向左下判断
	 for(int i=0;i<5;i++) {

		 if(position[x1][y1]==0) {
			 return;
		 }
		 if(position[x1-i][y1+i]==position[x1-i-1][y1+i+1]) {
			 sum+=1;
		 }
		 else {
			 break;
		 }
	 }

	 if(sum>=5) {
		 if(whichColor==1) {
			 JOptionPane.showMessageDialog(null,"白棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 if(whichColor==0) {
			 JOptionPane.showMessageDialog(null,"黑棋胜利,游戏结束", "消息提示", JOptionPane.INFORMATION_MESSAGE);
		 }
		 PCChessBoard2.isClose=1;
	 }
}

}

修改后PCChessBoard2 类的代码

package com.fivechess.view;

import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;

public class PCChessBoard2 extends ChessBoard2{

public int whichColor=0;
private int ex;
private int ey;

public static int isClose=0;

WhichWin whichwin=new WhichWin();

//落下棋子
@Override
public void mouseMoved(MouseEvent e) {
	repaint();
}

@Override
public void mouseClicked(MouseEvent e) {

	if(isClose==1) {
		return;
	}

	 ex=e.getX();
	 ey=e.getY();

	 float x = (ex - 25) / 25;
     float y = (ey - 25) / 25;
     int x1 = (int) x;
     int y1 = (int) y;

	if(whichColor==0&&position[x1][y1]==0) {
		position[x1][y1]=1;//落下白棋子
		whichColor=1;
	}
	else if(whichColor==1&&position[x1][y1]==0) {
		position[x1][y1]=2;//落下黑色棋子
		whichColor=0;
	}

	//判断各方向输赢
	whichwin.upOrDown(x1,y1,position,whichColor);
	whichwin.leftOrRight(x1,y1,position,whichColor);
	whichwin.Obliquedirection(x1,y1,position,whichColor);
	whichwin.Obliquedirection2(x1,y1,position,whichColor);

}

}

ChessBoard2类

package com.fivechess.view;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

/*

  • 汇制棋盘的代码

  • */
    public class ChessBoard2 extends JPanel implements MouseMotionListener,MouseListener{

    public Image chessBoardImage;
    public Image blackChess;
    public Image whiteChess;

    public static final int COLS=19;
    public static final int RAWS=19;//棋盘的行数和列数
    public int position[][]=new int[COLS][RAWS];

    public ChessBoard2() {
    chessBoardImage = Toolkit.getDefaultToolkit().getImage(“images/chessBoard.jpg”);
    blackChess= Toolkit.getDefaultToolkit().getImage(“images/black.png”);
    whiteChess= Toolkit.getDefaultToolkit().getImage(“images/white.png”);

     initStart();
     addMouseListener(this);
    

    }
    /**
    * 初始化数组为BLANK
    */
    public void initStart()
    {
    for(int i=0;i<19;i++)
    {
    for(int j=0;j<19;j++)
    {
    position[i][j]= 0;//“0”代表当前无棋子
    }
    }
    }

    //汇制棋盘
    @Override
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(chessBoardImage, 0, 0,null);

     for (int i = 0; i < 19; i++) {
         for (int j = 0; j < 19; j++) {
             if (position[i][j] ==2) {
                 g.drawImage(blackChess, 13+i * 25 ,  13+j * 25 , null);
             } else if (position[i][j] ==1) {
                 g.drawImage(whiteChess,  13+i * 25 , 13+j * 25 , null);
             }
         }
     }
    

    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }
    /**
    * 按下鼠标时,记录鼠标的位置,并改写数组的数值,重新绘制图形
    * @param e
    */
    @Override
    public void mousePressed(MouseEvent e) {
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    }

     @Override
     public void mouseEntered(MouseEvent e) {
     }
    
     @Override
     public void mouseExited(MouseEvent e) {
     }
     @Override
     public void mouseDragged(MouseEvent e) {
     	// TODO Auto-generated method stub
     }
     @Override
     public void mouseMoved(MouseEvent e) {
     	// TODO Auto-generated method stub
     }
    

}

03-22 19:21