欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)五子棋程序

 更新時間:2022年08月09日 10:23:25   作者:@JiaHao  
這篇文章主要為大家詳細介紹了java實現(xiàn)五子棋程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)五子棋程序的具體代碼,供大家參考,具體內容如下

知識點

1、Swing 編程
2、ImageIO 類的使用
3、圖片的繪制

1、 Swing的概念

Swing是在java的基礎圖形化用戶界面AWT的基礎上擴展的API集

Swing的功能:通過java的代碼編寫窗口程序,創(chuàng)建圖形化界面(GUI)

JFrame是Swing的基礎類之一

JOptionPane類

showMessageDialog():顯示一個消息對話框,主要用來提示信息
showConfirmDialog():顯示一個對話框,用戶選擇后根據(jù)返回的結果進行判斷
showMessageDialog():顯示一個信息輸入對話框,用于保存用戶輸入的信息

MouseListener類

MouseListener的使用方法,調用JFremain的addMouseListener方法加入監(jiān)聽。
mouseClicked():監(jiān)聽鼠標點擊事件
mousePressed():監(jiān)聽鼠標進去事件的操作(窗體內部)
mouseReleased():監(jiān)聽鼠標的離開事件的操作(窗體外部)
mouseEntered()::監(jiān)聽鼠標按下的事件
mouseExited():監(jiān)聽鼠標抬起的事件

鼠標點擊時的執(zhí)行順序時:mousePressed——>mouseReleased——>mouseClicked(判斷按下與抬起是否在同一位置)

MouseEvent類

getX():得到鼠標的橫向位置的坐標
getY():得到鼠標的縱向位置的坐標

Graphics類

drawString():繪制字符串
drawOval():繪制一個空心的圓形
fillOval():繪制一個實心的圓形
drawLine():繪制一條線
drawRect():繪制一個空心矩形
fillRect():繪制一個實心矩形
drawImage():繪制一個已經(jīng)存在的圖片,將一個圖片直接顯示到窗體中
setColor():設置畫筆的顏色
setFont():設置文字的字體

功能

(1)、在點擊鼠標時在相應的位置顯示旗子
(2)、可以自動判斷游戲是否結束,黑方還是白方勝利
(3)、游戲時間進行設置,判斷是否超時

1、開發(fā)界面

計算棋盤中每一條線的間距:這里是19*19的圍棋盤
總寬度為467-17=450,總高度533-89=450
分18份,每一份:x:25 y:25
此代碼獲取棋盤四個端點的坐標

@Override
?? ?public void mousePressed(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?System.out.println("X"+e.getX());
?? ??? ?System.out.println("Y"+e.getY());
?? ?}

2、在棋盤上的鼠標點擊位置,顯示一個旗子

黑子:實心黑圓
白子:實心白圓

repaint():表示重新執(zhí)行repaint

3、保存之前下過的旗子

通過一個二維數(shù)組來保存之前下過的棋子

4、判斷游戲勝負

五子棋的基本規(guī)則,是否有同一顏色的棋子連成五個(核心算法)

public boolean checKwin() {
?? ??? ?boolean flag=false;
?? ??? ?//判斷橫向的是否有五個棋子,特點 縱坐標是相同的即allChess[X][Y]中Y值是相同的
?? ??? ?int color=allChess[x][y];
?? ??? ?//保存共有多少相同顏色的棋子
?? ? ? ?int count=1;
?count=this.checkCount(1, 0, color);
?? ??? ?if(count>=5) {
?? ??? ??? ?flag=true;
?? ??? ?}else {
?? ??? ??? ?//判斷縱向
?? ??? ??? ?count=this.checkCount(0, 1, color);
?? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ?flag=true;
?? ??? ?}else {
?? ??? ??? ?//右下
?? ??? ??? ?count=this.checkCount(1, -1, color);
?? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ?flag=true;
?? ??? ??? ?}else {
?? ??? ??? ??? ?//左上
?? ??? ??? ??? ?count=this.checkCount(-1, 1, color);
?? ??? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ??? ?flag=true;
?? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ?//右上
?? ??? ??? ??? ??? ??? ?count=this.checkCount(1, 1, color);
?? ??? ??? ??? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ??? ??? ??? ?flag=true;
?? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ?//左上
?? ??? ??? ??? ??? ??? ?count=this.checkCount(-1,-1, color);
?? ??? ??? ??? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ??? ??? ??? ?flag=true;
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return flag;
?? ?}
?? ?//判斷棋子連接的數(shù)量
?? ?private int checkCount(int xChange,int yChange,int color) {
?? ??? ?int count =1;
?? ??? ?int tempX=xChange;
?? ??? ?int tempY=yChange;
?? ??? ?while(x+xChange>=0 &&x+xChange<=18 && y+yChange>=0 &&y+yChange<=18 && color==allChess[x+xChange][y+yChange]) {
?? ??? ??? ?count++;
?? ??? ??? ?if(xChange!=0)?
?? ??? ??? ??? ?xChange++;
?? ??? ??? ?if(yChange!=0) {
?? ??? ??? ??? ?if(yChange>0)?
?? ??? ??? ??? ??? ?yChange++;
?? ??? ??? ??? ?else {
?? ??? ??? ??? ??? ?yChange--;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?xChange=tempY;
?? ??? ?yChange=tempX;
?? ??? ?
?? ??? ?while(color==allChess[x-xChange][y-yChange]) {
?? ??? ??? ?count++;
?? ??? ??? ?if(xChange!=0)?
?? ??? ??? ??? ?xChange++;
?? ??? ??? ?if(yChange!=0) {
?? ??? ??? ??? ?if(yChange>0)?
?? ??? ??? ??? ??? ?yChange++;
?? ??? ??? ??? ?else {
?? ??? ??? ??? ??? ?yChange--;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return count;
?? ??? ?
?? ?}

5、實現(xiàn)各個按鈕的功能

開始游戲:重新開始

游戲設置:設置倒計時

線程實現(xiàn)

//點擊 游戲設置 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=154 &&e.getY()<=190) {
?? ??? ??? ?String input=JOptionPane.showInputDialog("請輸入游戲的最大時間(分鐘),輸入0表示沒有時間限制");
?? ??? ??? ?try {
?? ??? ??? ??? ?maxTime=Integer.parseInt(input)*60;
?? ??? ??? ??? ?if(maxTime<0) {
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this, "不允許輸入負數(shù)");
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(maxTime>0){
?? ??? ??? ??? ??? ?int r1=JOptionPane.showConfirmDialog(this,"是否重新開始游戲?");
?? ??? ??? ??? ??? ?if(r1==0) {
?? ??? ??? ??? ??? ??? ?//重新開始游戲1、棋盤清空;allChess==0;2、將游戲信息的顯示改到開始位置;3、將下一步要下棋的改為黑方
?? ??? ??? ??? ??? ??? ?allChess=new int[19][19];
?? ??? ??? ??? ??? ??? ?message="黑方先行";
?? ??? ??? ??? ??? ??? ?blackTime=maxTime;
?? ??? ??? ??? ??? ??? ?whiteTime=maxTime;
?? ??? ??? ??? ??? ??? ?blackMessage=maxTime/3600+":"
?? ??? ??? ??? ??? ??? ??? ??? ?+(maxTime/60-maxTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ??? ??? ?+(maxTime-maxTime/60*60);
?? ??? ??? ??? ??? ??? ?whiteMessage=maxTime/3600+":"+
?? ??? ??? ??? ??? ??? ??? ??? ?(maxTime/60-maxTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ??? ??? ?+(maxTime-maxTime/60*60);
?? ??? ??? ??? ??? ??? ?isBlack=true;
?? ??? ??? ??? ??? ??? ?t.resume();
?? ??? ??? ??? ??? ??? ?//重新繪制棋盤
?? ??? ??? ??? ??? ??? ?this.repaint();
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}catch(NumberFormatException e1){
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this, "請正確輸入信息");
?? ??? ??? ??? ?}
?? ??? ??? ?}
public void run() {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?//判斷是否有時間限制
?? ??? ?if(maxTime>0) {
?? ??? ??? ?while(true) {
?? ??? ??? ??? ?if(isBlack) {
?? ??? ??? ??? ??? ?blackTime--;
?? ??? ??? ??? ??? ?if(blackTime==0) {
?? ??? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"黑方超時,游戲結束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?whiteTime--;
?? ??? ??? ??? ??? ?if(whiteTime==0) {
?? ??? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"白方超時,游戲結束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?blackMessage=blackTime/3600+":"
?? ??? ??? ??? ??? ??? ?+(blackTime/60-blackTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ?+(blackTime-blackTime/60*60);
?? ??? ??? ??? ?whiteMessage=whiteTime/3600+":"+
?? ??? ??? ??? ??? ??? ?(whiteTime/60-whiteTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ?+(whiteTime-whiteTime/60*60);
?? ??? ??? ??? ?//刷新屏幕
?? ??? ??? ??? ?this.repaint();
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?Thread.sleep(1000);
?? ??? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?}
?? ?}

游戲說明:用來說明游戲規(guī)則和操作

認輸: 是某一方放棄游戲
關于 : 作者,版本
退出: 退出游戲

總代碼

public class test {

?? ?public static void main(String[] args) {
?? ??? ?// TODO Auto-generated method stub

?? ??? ?FiveChessFream jj=new FiveChessFream();
?? ?}

}
package FiveChessDome;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FiveChessFream extends JFrame implements MouseListener,Runnable{
?? ?
?? ?int width=Toolkit.getDefaultToolkit().getScreenSize().width;
?? ?int higth=Toolkit.getDefaultToolkit().getScreenSize().height;
?? ?//背景圖片
?? ?BufferedImage bgImage=null;
?? ?//保存旗子的坐標
?? ?int x=0;
?? ?int y=0;
?? ?//保存之前下過的旗子的坐標,其中數(shù)據(jù)內容是0:表示這個點沒有旗子,1:表示是黑子,2:表示的是白子
?? ?int [][] allChess=new int[19][19];
?? ?//標識當前應該是黑棋還是白棋
?? ?Boolean isBlack=true;
?? ?//標識當前游戲是否繼續(xù)進行
?? ?boolean canPlay=true;
?? ?//保存顯示信息
?? ?String message="黑方先行";
?? ?//保存最多擁有多少時間
?? ?int maxTime=0;
?? ?//做倒計時的線程類
?? ?Thread t=new Thread(this);
?? ?//保存黑方與白方的剩余時間
?? ?int blackTime=0;
?? ?int whiteTime=0;
?? ?//保存雙方剩余的時間
?? ?String blackMessage="無限制";
?? ?String whiteMessage="無限制";
?? ?
?? ?
?? ?public FiveChessFream() {
?? ??? ?//標題
?? ??? ?this.setTitle("五子棋");
?? ??? ?//窗體大小
?? ??? ?this.setSize(626, 625);
?? ??? ?//窗體在屏幕的位置
?? ??? ?this.setLocation((width-500)/2,(higth-500)/2);
?? ??? ?//窗體不可變
?? ??? ?this.setResizable(false);
?? ??? ?//窗體關閉
?? ??? ?this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?? ??? ?//為窗體加入監(jiān)聽器
?? ??? ?this.addMouseListener(this);
?? ??? ?//窗體顯示
?? ??? ?this.setVisible(true);
?? ??? ?
?? ??? ?//啟動線程
?? ??? ?t.start();
?? ??? ?t.suspend();
?? ??? ?//刷新屏幕,防止開始游戲時無法顯示屏幕的情況
?? ??? ?this.repaint();
?? ??? ?
?? ??? ?//背景圖的導入
?? ??? ?try {
?? ??? ??? ?bgImage=ImageIO.read(new File("d:/桌面/五子棋2.png"));
?? ??? ?} catch (IOException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}

?? ?public void paint(Graphics g) {
?? ??? ?//雙緩沖技術防止屏幕閃爍
?? ??? ?BufferedImage bi=new BufferedImage(626, 625, BufferedImage.TYPE_INT_ARGB);
?? ??? ?Graphics g2=bi.createGraphics();
?? ??? ?//繪制背景
?? ??? ?g.drawImage(bgImage, 3, 20, this);
?? ??? ?//輸出標題信息
?? ??? ?g.setFont(new Font("黑體",Font.BOLD,20));
?? ??? ?g.drawString("游戲信息:"+message,100, 60);
?? ??? ?//輸出時間信息
?? ??? ?g.setFont(new Font("宋體",10,14));
?? ??? ?g.drawString("黑色的時間:"+blackMessage, 40, 585);
?? ??? ?g.drawString("白色的時間:"+whiteMessage, 330, 585);
?? ??? ?
?? ??? ?
?? ??? ?//繪制棋盤
?? ??? ?for(int i=0;i<19;i++) {
?? ??? ??? ?//橫軸
?? ??? ??? ?g.drawLine(17,89+25*i,467,89+25*i);
?? ??? ??? ?//豎軸
?? ??? ??? ?g.drawLine(17+25*i, 89, 17+25*i, 538);
?? ??? ?}
?? ??? ?
?? ??? ?//標志點位,四個點
?? ??? ?g.fillOval(90, 162,4,4);
?? ??? ?g.fillOval(90, 462,4,4);
?? ??? ?g.fillOval(390, 162,4,4);
?? ??? ?g.fillOval(390,462,4,4);
?? ??? ?
?? ??? ?//繪制全部旗子
?? ??? ?for(int i=0;i<19;i++) {
?? ??? ??? ?for(int j=0;j<19;j++) {
?? ??? ??? ??? ?if(allChess[i][j]==1) {
?? ??? ??? ??? ??? ?//黑子
?? ??? ??? ??? ??? ?int tempx=i*25+17;
?? ??? ??? ??? ??? ?int tempy=j*25+89;
?? ??? ??? ??? ??? ?g.fillOval(tempx-7,tempy-7,14,14);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(allChess[i][j]==2) {
?? ??? ??? ??? ??? ?//白子
?? ??? ??? ??? ??? ?int tempx=i*25+17;
?? ??? ??? ??? ??? ?int tempy=j*25+89;
?? ??? ??? ??? ??? ?g.setColor(Color.WHITE);
?? ??? ??? ??? ??? ?g.fillOval(tempx-7,tempy-7,14,14);
?? ??? ??? ??? ??? ?g.setColor(Color.BLACK);
?? ??? ??? ??? ??? ?g.drawOval(tempx-7,tempy-7,14,14);
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?@Override
?? ?public void mouseClicked(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ?}

?? ?@Override
?? ?public void mousePressed(MouseEvent e) {
?? ??? ?if(canPlay==true) {
?? ??? ? x=e.getX();
?? ??? ? y=e.getY();
?? ??? ?//判斷旗子落在棋盤上
?? ??? ?if(x>17&&x<=467 && y>89&&y<=538) {
?? ??? ??? ?x=(x-17)/25;
?? ??? ??? ?y=(y-89)/25;
?? ??? ??? ?if(allChess[x][y]==0) {
?? ??? ??? ?//判斷當前要下的是什么旗子
?? ??? ??? ??? ?if(isBlack==true) {
?? ??? ??? ??? ??? ?allChess[x][y]=1;
?? ??? ??? ??? ??? ?isBlack=false;
?? ??? ??? ??? ??? ?message="輪到白方";
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?allChess[x][y]=2;
?? ??? ??? ??? ??? ?isBlack=true;
?? ??? ??? ??? ??? ?message="輪到黑方";
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ??? ?//判斷這個棋子是否和其他的棋子連成五個
?? ??? ??? ??? ?boolean winFlag=this.checKwin();
?? ??? ??? ??? ?if(winFlag==true) {
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"游戲結束"
?? ??? ??? ??? ?+(allChess[x][y]==1?"黑色":"白色")+"獲勝");
?? ??? ??? ??? ??? ?canPlay=false;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}else {
?? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"當前位置已經(jīng)有棋子,請重新落子!");
?? ??? ??? ?}
?? ??? ??? ?this.repaint();
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ??? ?//System.out.println(e.getX()+"`````"+e.getY());
?? ??? ?//點擊 游戲開始 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=90 &&e.getY()<=125) {
?? ??? ??? ?int r1=JOptionPane.showConfirmDialog(this,"是否重新開始游戲?");
?? ??? ??? ?if(r1==0) {
?? ??? ??? ??? ?//重新開始游戲1、棋盤清空;allChess==0;2、將游戲信息的顯示改到開始位置;3、將下一步要下棋的改為黑方
?? ??? ??? ??? ?allChess=new int[19][19];
?? ??? ??? ??? ?message="黑方先行";
?? ??? ??? ??? ?isBlack=true;
?? ??? ??? ??? ?//重新繪制棋盤
?? ??? ??? ??? ?this.repaint();
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//點擊 游戲設置 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=154 &&e.getY()<=190) {
?? ??? ??? ?String input=JOptionPane.showInputDialog("請輸入游戲的最大時間(分鐘),輸入0表示沒有時間限制");
?? ??? ??? ?try {
?? ??? ??? ??? ?maxTime=Integer.parseInt(input)*60;
?? ??? ??? ??? ?if(maxTime<0) {
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this, "不允許輸入負數(shù)");
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(maxTime>0){
?? ??? ??? ??? ??? ?int r1=JOptionPane.showConfirmDialog(this,"是否重新開始游戲?");
?? ??? ??? ??? ??? ?if(r1==0) {
?? ??? ??? ??? ??? ??? ?//重新開始游戲1、棋盤清空;allChess==0;2、將游戲信息的顯示改到開始位置;3、將下一步要下棋的改為黑方
?? ??? ??? ??? ??? ??? ?allChess=new int[19][19];
?? ??? ??? ??? ??? ??? ?message="黑方先行";
?? ??? ??? ??? ??? ??? ?blackTime=maxTime;
?? ??? ??? ??? ??? ??? ?whiteTime=maxTime;
?? ??? ??? ??? ??? ??? ?blackMessage=maxTime/3600+":"
?? ??? ??? ??? ??? ??? ??? ??? ?+(maxTime/60-maxTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ??? ??? ?+(maxTime-maxTime/60*60);
?? ??? ??? ??? ??? ??? ?whiteMessage=maxTime/3600+":"+
?? ??? ??? ??? ??? ??? ??? ??? ?(maxTime/60-maxTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ??? ??? ?+(maxTime-maxTime/60*60);
?? ??? ??? ??? ??? ??? ?isBlack=true;
?? ??? ??? ??? ??? ??? ?t.resume();
?? ??? ??? ??? ??? ??? ?//重新繪制棋盤
?? ??? ??? ??? ??? ??? ?this.repaint();
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}catch(NumberFormatException e1){
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this, "請正確輸入信息");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?//點擊 游戲說明 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=214 &&e.getY()<=248) {
?? ??? ??? ?JOptionPane.showMessageDialog(this," 這是一個五子棋游戲,黑白雙方輪流下");
?? ??? ?}
?? ??? ?//點擊 認輸 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=344 &&e.getY()<=378) {
?? ??? ??? ?int result=JOptionPane.showConfirmDialog(this,"是否確認認輸?");
?? ??? ??? ?if(result==0) {
?? ??? ??? ??? ?if(isBlack) {
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"黑方認輸");
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"白方認輸");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//點擊 關于 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=406 &&e.getY()<=438) {
?? ??? ??? ?JOptionPane.showMessageDialog(this,"本游戲由@JiaHao制作,視頻地址https://www.bilibili."
?? ??? ??? ??? ??? ?+ "com/video/BV1kJ411s7zf?p=10&share_source=copy_web");
?? ??? ?}
?? ??? ?//點擊 退出 按鈕
?? ??? ?if(e.getX()>=508 && e.getX()<=595 &&e.getY()>=466 &&e.getY()<=501) {
?? ??? ??? ?JOptionPane.showMessageDialog(this,"退出");
?? ??? ??? ?System.exit(0);
?? ??? ?}
?? ??? ?
?? ?}

?? ?//判斷什么棋子贏
?? ?public boolean checKwin() {
?? ??? ?boolean flag=false;
?? ??? ?//判斷橫向的是否有五個棋子,特點 縱坐標是相同的即allChess[X][Y]中Y值是相同的
?? ??? ?int color=allChess[x][y];
?? ??? ?//保存共有多少相同顏色的棋子
?? ? ? ?int count=1;
?? ??? ?//判斷橫向
?? ? ? ?count=this.checkCount(1, 0, color);
?? ??? ?if(count>=5) {
?? ??? ??? ?flag=true;
?? ??? ?}else {
?? ??? ??? ?//判斷縱向
?? ??? ??? ?count=this.checkCount(0, 1, color);
?? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ?flag=true;
?? ??? ?}else {
?? ??? ??? ?//右下
?? ??? ??? ?count=this.checkCount(1, -1, color);
?? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ?flag=true;
?? ??? ??? ?}else {
?? ??? ??? ??? ?//左上
?? ??? ??? ??? ?count=this.checkCount(-1, 1, color);
?? ??? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ??? ?flag=true;
?? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ?//右上
?? ??? ??? ??? ??? ??? ?count=this.checkCount(1, 1, color);
?? ??? ??? ??? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ??? ??? ??? ?flag=true;
?? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ?//左上
?? ??? ??? ??? ??? ??? ?count=this.checkCount(-1,-1, color);
?? ??? ??? ??? ??? ??? ?if(count>=5) {
?? ??? ??? ??? ??? ??? ??? ?flag=true;
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return flag;
?? ?}
?? ?//判斷棋子連接的數(shù)量
?? ?private int checkCount(int xChange,int yChange,int color) {
?? ??? ?int count =1;
?? ??? ?int tempX=xChange;
?? ??? ?int tempY=yChange;
?? ??? ?while(x+xChange>=0 &&x+xChange<=18 && y+yChange>=0 &&y+yChange<=18 && color==allChess[x+xChange][y+yChange]) {
?? ??? ??? ?count++;
?? ??? ??? ?if(xChange!=0)?
?? ??? ??? ??? ?xChange++;
?? ??? ??? ?if(yChange!=0) {
?? ??? ??? ??? ?if(yChange>0)?
?? ??? ??? ??? ??? ?yChange++;
?? ??? ??? ??? ?else {
?? ??? ??? ??? ??? ?yChange--;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?xChange=tempY;
?? ??? ?yChange=tempX;
?? ??? ?
?? ??? ?while(color==allChess[x-xChange][y-yChange]) {
?? ??? ??? ?count++;
?? ??? ??? ?if(xChange!=0)?
?? ??? ??? ??? ?xChange++;
?? ??? ??? ?if(yChange!=0) {
?? ??? ??? ??? ?if(yChange>0)?
?? ??? ??? ??? ??? ?yChange++;
?? ??? ??? ??? ?else {
?? ??? ??? ??? ??? ?yChange--;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return count;
?? ??? ?
?? ?}
?? ?@Override
?? ?public void mouseReleased(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 run() {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?//判斷是否有時間限制
?? ??? ?if(maxTime>0) {
?? ??? ??? ?while(true) {
?? ??? ??? ??? ?if(isBlack) {
?? ??? ??? ??? ??? ?blackTime--;
?? ??? ??? ??? ??? ?if(blackTime==0) {
?? ??? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"黑方超時,游戲結束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?whiteTime--;
?? ??? ??? ??? ??? ?if(whiteTime==0) {
?? ??? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"白方超時,游戲結束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?blackMessage=blackTime/3600+":"
?? ??? ??? ??? ??? ??? ?+(blackTime/60-blackTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ?+(blackTime-blackTime/60*60);
?? ??? ??? ??? ?whiteMessage=whiteTime/3600+":"+
?? ??? ??? ??? ??? ??? ?(whiteTime/60-whiteTime/3600*60)+":"
?? ??? ??? ??? ??? ??? ?+(whiteTime-whiteTime/60*60);
?? ??? ??? ??? ?//刷新屏幕
?? ??? ??? ??? ?this.repaint();
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?Thread.sleep(1000);
?? ??? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java使用Hutool實現(xiàn)AES、DES加密解密的方法

    Java使用Hutool實現(xiàn)AES、DES加密解密的方法

    本篇文章主要介紹了Java使用Hutool實現(xiàn)AES、DES加密解密的方法,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • spring boot的攔截器簡單使用示例代碼

    spring boot的攔截器簡單使用示例代碼

    這篇文章主要介紹了spring boot的攔截器簡單使用實例代碼,需要的的朋友參考下吧
    2017-04-04
  • 在項目中集成jetty server步驟解析

    在項目中集成jetty server步驟解析

    這篇文章主要介紹了在項目中集成jetty server步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • java多線程編程之向線程傳遞數(shù)據(jù)的三種方法

    java多線程編程之向線程傳遞數(shù)據(jù)的三種方法

    在多線程的異步開發(fā)模式下,數(shù)據(jù)的傳遞和返回和同步開發(fā)模式有很大的區(qū)別。由于線程的運行和結束是不可預料的,因此,在傳遞和返回數(shù)據(jù)時就無法象函數(shù)一樣通過函數(shù)參數(shù)和return語句來返回數(shù)據(jù)
    2014-01-01
  • SpringBoot日志文件的實現(xiàn)示例

    SpringBoot日志文件的實現(xiàn)示例

    日志是程序中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問題,本文主要介紹了SpringBoot日志文件的實現(xiàn)示例,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • Java讀取文件的簡單實現(xiàn)方法

    Java讀取文件的簡單實現(xiàn)方法

    這篇文章主要介紹了Java讀取文件的簡單實現(xiàn)方法,通過一個讀取txt格式的log文件為例,詳細的講述了Java讀取文件的方法及原理,需要的朋友可以參考下
    2014-09-09
  • 基于Java編寫一個粽子大作戰(zhàn)小游戲

    基于Java編寫一個粽子大作戰(zhàn)小游戲

    端午節(jié),又稱龍舟節(jié)、重午節(jié),是中國的傳統(tǒng)節(jié)日之一,每年農歷五月初五慶祝,雖然端午假期已經(jīng)過去了,小編還是用Java編寫了一個粽子大作戰(zhàn)小游戲,感興趣的可以了解一下
    2023-06-06
  • Java常見內存溢出異常分析與解決

    Java常見內存溢出異常分析與解決

    本篇文章主要分析了JAVA程序內存溢出問題原因,較為詳細的說明了java導致程序內存溢出的原因與解決方法,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)

    SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)

    這篇文章主要介紹了SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringMVC表單標簽使用詳解

    SpringMVC表單標簽使用詳解

    這篇文章主要為大家詳細介紹了SpringMVC表單標簽的使用方法,教大家如何用Spring封裝的一系列表單標簽
    2017-03-03

最新評論