最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

知識點

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

1、 Swing的概念

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

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

JFrame是Swing的基礎(chǔ)類之一

JOptionPane類

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

MouseListener類

MouseListener的使用方法,調(diào)用JFremain的addMouseListener方法加入監(jiān)聽。
mouseClicked():監(jiān)聽鼠標點擊事件
mousePressed():監(jiān)聽鼠標進去事件的操作(窗體內(nèi)部)
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():設(shè)置畫筆的顏色
setFont():設(shè)置文字的字體

功能

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

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)各個按鈕的功能

開始游戲:重新開始

游戲設(shè)置:設(shè)置倒計時

線程實現(xiàn)

//點擊 游戲設(shè)置 按鈕
?? ??? ?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,"黑方超時,游戲結(jié)束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?whiteTime--;
?? ??? ??? ??? ??? ?if(whiteTime==0) {
?? ??? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"白方超時,游戲結(jié)束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?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ī)則和操作

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

總代碼

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ù)內(nèi)容是0:表示這個點沒有旗子,1:表示是黑子,2:表示的是白子
?? ?int [][] allChess=new int[19][19];
?? ?//標識當前應(yīng)該是黑棋還是白棋
?? ?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);
?? ??? ?//窗體關(guān)閉
?? ??? ?this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?? ??? ?//為窗體加入監(jiān)聽器
?? ??? ?this.addMouseListener(this);
?? ??? ?//窗體顯示
?? ??? ?this.setVisible(true);
?? ??? ?
?? ??? ?//啟動線程
?? ??? ?t.start();
?? ??? ?t.suspend();
?? ??? ?//刷新屏幕,防止開始游戲時無法顯示屏幕的情況
?? ??? ?this.repaint();
?? ??? ?
?? ??? ?//背景圖的導(dǎo)入
?? ??? ?try {
?? ??? ??? ?bgImage=ImageIO.read(new File("d:/桌面/五子棋2.png"));
?? ??? ?} catch (IOException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}

?? ?public void paint(Graphics g) {
?? ??? ?//雙緩沖技術(shù)防止屏幕閃爍
?? ??? ?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,"游戲結(jié)束"
?? ??? ??? ??? ?+(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();
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//點擊 游戲設(shè)置 按鈕
?? ??? ?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,"白方認輸");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//點擊 關(guān)于 按鈕
?? ??? ?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,"黑方超時,游戲結(jié)束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?whiteTime--;
?? ??? ??? ??? ??? ?if(whiteTime==0) {
?? ??? ??? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"白方超時,游戲結(jié)束");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?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();
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot CommandLineRunner應(yīng)用啟動后執(zhí)行代碼實例

    SpringBoot CommandLineRunner應(yīng)用啟動后執(zhí)行代碼實例

    本文將深入探討CommandLineRunner的工作原理、使用場景及最佳實踐,幫助開發(fā)者充分利用這一功能,構(gòu)建更加健壯的Spring Boot應(yīng)用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • ManyToMany單向、雙向:@JoinTable的使用

    ManyToMany單向、雙向:@JoinTable的使用

    這篇文章主要介紹了ManyToMany單向、雙向:@JoinTable的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫詳解

    Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫詳解

    最近用到了Java解析Html的一個庫Jsoup,所以下面這篇文章主要給大家介紹了關(guān)于Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式

    Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式

    這篇文章主要介紹了Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring Boot多模塊化后,服務(wù)間調(diào)用的坑及解決

    Spring Boot多模塊化后,服務(wù)間調(diào)用的坑及解決

    這篇文章主要介紹了Spring Boot多模塊化后,服務(wù)間調(diào)用的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • maven中自定義MavenArchetype的實現(xiàn)

    maven中自定義MavenArchetype的實現(xiàn)

    Maven自身提供了許多Archetype來方便用戶創(chuàng)建Project,為了避免在創(chuàng)建project時重復(fù)的拷貝和修改,我們通過自定義Archetype來規(guī)范顯得還蠻有必要,下面就來介紹一下,感興趣的可以了解一下
    2025-01-01
  • java實現(xiàn)簡單的客戶信息管理系統(tǒng)

    java實現(xiàn)簡單的客戶信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的客戶信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java接入微信支付超級詳細保姆級教程

    Java接入微信支付超級詳細保姆級教程

    這篇文章主要給大家介紹了關(guān)于Java接入微信支付的相關(guān)資料,包括l 準備開發(fā)所需的賬號和配置信息、準備環(huán)境、設(shè)置開發(fā)參數(shù)以及實現(xiàn)支付接口,回調(diào)地址的設(shè)置和異步回調(diào)通知的處理也是文章的重點內(nèi)容,需要的朋友可以參考下
    2024-12-12
  • 詳解Spring Boot2 Webflux的全局異常處理

    詳解Spring Boot2 Webflux的全局異常處理

    這篇文章主要介紹了詳解Spring Boot2 Webflux的全局異常處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Spring更簡單的存儲方式與獲取方式詳解

    Spring更簡單的存儲方式與獲取方式詳解

    Spring是一個輕量級的IoC和AOP容器框架,是為Java應(yīng)用程序提供基礎(chǔ)性服務(wù)的一套框架,目的是用于簡化企業(yè)應(yīng)用程序的開發(fā),它使得開發(fā)者只需要關(guān)心業(yè)務(wù)需求,下面這篇文章主要給大家介紹了關(guān)于Spring更簡單的存儲方式與獲取方式的相關(guān)資料,需要的朋友可以參考下
    2022-06-06

最新評論

遵义市| 越西县| 苗栗市| 泸水县| 沧州市| 肥西县| 伊金霍洛旗| 方城县| 迁安市| 云南省| 古丈县| 沙河市| 化德县| 永福县| 淮阳县| 雷波县| 防城港市| 新乐市| 昌吉市| 醴陵市| 东乡族自治县| 四川省| 宜良县| 两当县| 越西县| 德保县| 开远市| 张家川| 长治县| 讷河市| 清苑县| 鄱阳县| 肥乡县| 静宁县| 湘阴县| 桓台县| 滨海县| 华坪县| 开封市| 武穴市| 邵武市|