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

Java實現(xiàn)簡易五子棋小游戲

 更新時間:2022年05月04日 15:23:16   作者:小饅頭程序人生  
這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java實現(xiàn)簡易五子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下

五子棋是一個簡單小游戲,首先我們先想想五子棋都有什么東西,棋子,棋盤;

首先我們可以定義一個棋子類,棋子類里有棋子的坐標,半徑和顏色;還有棋子的構(gòu)造函數(shù);

import java.awt.Color;
/*
?* 棋子類
?*/
public class Chess {
?? ?private int x;//棋子的x坐標索引
?? ?private int y;//棋子的y坐標索引
?? ?private Color color;//棋子顏色
?? ?public static ? int DIAMETER=30;//直徑
?? ?public Chess(int x,int y,Color color){//棋子構(gòu)造函數(shù)
?? ??? ?this.x=x;
?? ??? ?this.y=y;
?? ??? ?this.color=color;
?? ?}
?? ?public int getX() {
?? ??? ?return x;
?? ?}
?? ?public int getY() {
?? ??? ?return y;
?? ?}
?? ?public Color getColor() {
?? ??? ?return color;
?? ?}
?? ?
}

接下來我們定義一個主框架,在主框架里有面板對象和三個按鈕對象,分別是重新開始游戲按鈕,悔棋按鈕和退出游戲按鈕;還設(shè)置一個按鈕事件類,用來監(jiān)聽三個按鈕,并作出相應(yīng)的動作;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
?
import javax.swing.*;
/*
?* 五子棋主框架
?*/
public class ChessJFrame extends JFrame {
?? ?private ChessBord chessbord;//聲明一個棋盤對象
?? ?private Panel tool;?? ??? ??? ?//聲明一個面板對象
?? ?private Button StartButton;//聲明開始按鈕
?? ?private Button BackButton;//聲明悔棋按鈕
?? ?private Button exitButton;//聲明退出按鈕
?? ?public ChessJFrame() {//構(gòu)造函數(shù)
?? ??? ?setTitle("單機版五子棋");//設(shè)置標題
?? ??? ?MyButtonLister mb=new MyButtonLister();//按鈕事件處理對象
?? ??? ?tool=new Panel();//面板對象
?? ??? ?chessbord=new ChessBord();//棋盤對象
?? ??? ?StartButton=new Button("重新開始");//設(shè)置開始按鈕
?? ??? ?BackButton=new Button("悔棋");//設(shè)置悔棋按鈕
?? ??? ?exitButton=new Button("退出游戲");//設(shè)置退出游戲按鈕
?? ??? ?tool.setLayout(new FlowLayout(FlowLayout.CENTER ));//流式布局
?? ??? ?tool.add(StartButton);
?? ??? ?tool.add(BackButton);
?? ??? ?tool.add(exitButton);//將三個按鈕添加到面板對象
?? ??? ?StartButton.addActionListener(mb);
?? ??? ?BackButton.addActionListener(mb);
?? ??? ?exitButton.addActionListener(mb);//將三個按鈕添加到事件監(jiān)聽
?? ??? ?add(tool,BorderLayout.SOUTH);//按鈕所在的位置
?? ??? ?add(chessbord);//添加棋盤對象
?? ??? ?setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置關(guān)閉
?? ??? ?pack();//自適應(yīng)
?? ??? ?
?? ?}
?? ?private class MyButtonLister implements ActionListener{
?? ??? ?//按鈕處理事件類
?? ??? ?@Override
?? ??? ?public void actionPerformed(ActionEvent e) {
?? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ?Object obj=e.getSource();//獲取事件源
?? ??? ??? ?if(obj==StartButton) {//事件源是重新開始按鈕
?? ??? ??? ??? ?System.out.println("重新開始");
?? ??? ??? ??? ?chessbord.restartGame();
?? ??? ??? ?}
?? ??? ??? ?else if(obj==BackButton) {//事件源是悔棋按鈕
?? ??? ??? ??? ?System.out.println("悔棋!");
?? ??? ??? ??? ?chessbord.goback();
?? ??? ??? ?}
?? ??? ??? ?else if(obj==exitButton) {//事件源是退出按鈕
?? ??? ??? ??? ?System.exit(0);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ?}
?? ?
?? ?
?? ?public static void main(String[] args) {
?? ??? ?ChessJFrame jf=new ChessJFrame();//聲明框架對象
?? ??? ?jf.setLocationRelativeTo(null);//居中顯示
?? ??? ?jf.setVisible(true);//設(shè)置為可見
?? ?}
?? ?
}

最后一個類是棋盤類,我們要對棋盤的邊距,網(wǎng)格的距離進行賦值,設(shè)定棋盤的初始狀態(tài),如默認黑子先下,定義一個棋子類數(shù)組,來保存棋子對象,再定義一個字符串二維數(shù)組函數(shù)來保存的顏色,用來判斷輸贏,用匿名內(nèi)部類來處理當棋子在面板上移動時的一些狀態(tài);

代碼如下:

public static int MARGIN=30;//定義邊距
?? ?public static int ROWS=15;//定義行數(shù)
?? ?public static int COLS=15;//定義列數(shù)
?? ?public static int GRID_SPAN=35;//網(wǎng)格間距
?? ?Chess[] chessList=new Chess[(ROWS+1)*(COLS+1)];//定義一個棋子數(shù)組
?? ?String[][] board=new String[MARGIN*2+GRID_SPAN*COLS][MARGIN*2+GRID_SPAN*COLS];//聲明一個字符串數(shù)組,用來判斷輸贏
?? ?int chessCount;//棋子數(shù)目
?? ?int xindex,yindex;//棋子的坐標索引
?? ?boolean start=true;//開始默認黑子先下
?? ?boolean GameOver=false;//定義是否游戲結(jié)束
?? ?public ChessBord() {//棋盤類構(gòu)造函數(shù)
?? ??? ?setBackground(Color.LIGHT_GRAY);//設(shè)置背景顏色
?? ??? ?addMouseListener(this);//將棋盤類添加到鼠標事件監(jiān)聽器
?? ??? ?addMouseMotionListener(new MouseMotionListener() {//匿名內(nèi)部類
?? ??? ??? ?
?? ??? ??? ?@Override
?? ??? ??? ?public void mouseMoved(MouseEvent e) {//根據(jù)鼠標的移動所在的坐標來設(shè)置鼠標光標形狀
?? ??? ??? ??? ?int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對鼠標光標的x坐標進行轉(zhuǎn)換
?? ??? ??? ??? ?int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對鼠標光標的y坐標進行轉(zhuǎn)換
?? ??? ??? ??? ?if(x1<0||x1>ROWS||y1<0||y1>COLS||GameOver||findchess(x1, y1)) {
?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//設(shè)置鼠標光標為默認形狀
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.HAND_CURSOR));//設(shè)置鼠標光標為手型
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ??? ?@Override
?? ??? ??? ?public void mouseDragged(MouseEvent e) {
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?});
?? ??? ?for(int i=0;i<MARGIN*2+GRID_SPAN*COLS;i++) {//對board[][]賦初值
?? ??? ??? ?for (int j = 0; j < MARGIN*2+GRID_SPAN*COLS; j++) {
?? ??? ??? ??? ?board[i][j]="0";
?? ??? ??? ?}
?? ??? ?}
?? ?}

我們再對下棋時鼠標按下時的動作事件類進行解析,當在網(wǎng)格上下棋時,判斷是否在棋盤內(nèi)和判斷網(wǎng)格上有沒有棋子,當棋子在棋盤內(nèi)并且網(wǎng)格上沒有棋子,我們就開始畫棋子,將棋子對象和顏色保存,接下來判斷是否勝利,判斷棋盤是否下滿,如果沒有繼續(xù)下棋;

代碼如下;

?public void mousePressed(MouseEvent e) {//鼠標點擊事件
?? ??? ?if(GameOver)//游戲結(jié)束,不能按
?? ??? ??? ?return ;
?? ??? ?String colorName=start?"黑棋":"白棋";//判斷是什么顏色的棋子
?? ??? ?xindex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子x坐標
?? ??? ?yindex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子y坐標
?? ??? ?board[xindex][yindex]=colorName;//以棋子x坐標y坐標做索引將棋子的顏色添加到board中
?? ??? ?if(xindex<0||xindex>ROWS||yindex<0||yindex>COLS) {//棋子在棋盤外不能下,
?? ??? ??? ?return ;
?? ??? ?}else if(findchess( xindex, yindex)) {//所下位置已有棋子,不能下
?? ??? ??? ?return ;
?? ??? ?}
?? ??? ?Chess po=new Chess(xindex,yindex,start?Color.black:Color.WHITE);//對棋子對象進行初始化
?? ??? ?chessList[chessCount++]=po;//將棋子對象添加到棋子數(shù)組中
?? ??? ?repaint();//重畫圖型
?? ??? ?if(win( xindex,yindex,start)) {//判斷是否勝利
?? ??? ??? ?String msg=String.format("恭喜 %s贏了",colorName);
?? ??? ??? ?JOptionPane.showMessageDialog(this, msg);
?? ??? ??? ?//gameOver=true;
?? ??? ??? ?GameOver=true;
?? ??? ?}else if(chessCount==(COLS+1)*(ROWS+1)) {//判斷是否全部下滿
?? ??? ?String msg=String.format("恭喜 %s贏了",colorName);
?? ??? ?JOptionPane.showMessageDialog(this, msg);
?? ??? ?GameOver=true;
?? ??? ?}
?? ??? ?start=!start;//改變棋子先下棋狀態(tài)
?? ?}

函數(shù)paintComponent來對棋盤和棋子進行畫圖,對棋子進行繪圖時,將最后一個棋子設(shè)為紅色;

代碼如下;

protected void paintComponent(Graphics g) {//畫棋盤和棋子
?? ??? ?super.paintComponent(g);
?? ??? ?for(int i=0;i<=ROWS;i++) {//畫橫線
?? ??? ?g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN);
?? ??? ?}
?? ??? ?for(int j=0;j<=COLS;j++) {//畫豎線
?? ??? ??? ?g.drawLine(MARGIN+j*GRID_SPAN, MARGIN, MARGIN+j*GRID_SPAN, MARGIN+ROWS*GRID_SPAN);
?? ??? ?}
?? ??? ?for(int i=0;i<chessCount;i++) {//畫棋子
?? ??? ??? ?int xpos=chessList[i].getX()*GRID_SPAN+MARGIN;//得到棋子x坐標
?? ??? ??? ?int ypos=chessList[i].getY()*GRID_SPAN+MARGIN;//得到棋子y坐標
?? ??? ??? ?g.setColor(chessList[i].getColor());//設(shè)置棋子顏色
?? ??? ??? ?g.fillOval(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER);//畫棋子
?? ??? ??? ?if(i==chessCount-1){
?? ??? ??? ??? ?g.setColor(Color.red);//標記最后一個棋子為紅色
?? ??? ??? ? ? ?g.drawRect(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ?}

最后就是判斷棋子輸贏的函數(shù),用字符串數(shù)組保存的棋子的顏色來進行判斷所在行和列有沒有五個棋子相連,判斷撇和捺行的棋子有沒有五個相連的,如果有則某位棋子勝利;

代碼如下;

private?? ?boolean win(int x,int y,boolean start) {//對棋子輸贏的判斷
?? ??? ?String str=start?"黑棋":"白棋";
?? ??? ?//棋子所在行和列是否有五子相連的情況
?? ??? ?for(int i=0;i<16;i++){
?? ??? ??? ?if((board[x][i].equals(str)&&board[x][i+1].equals(str)&&board[x][i+2].equals(str)&&board[x][i+3].equals(str)&&board[x][i+4].equals(str))||(board[i][y].equals(str)&&board[i+1][y].equals(str)&&board[i+2][y].equals(str)&&board[i+3][y].equals(str)&&board[i+4][y].equals(str)))
?? ??? ??? ??? ?return true;
?? ??? ?}
?? ??? ?//棋子所在撇行是否有五子相連的情況
?? ??? ?if(x+y>=4&&x+y<=30){
?? ??? ??? ?int i=(x+y<=19)?x+y:x+y-20;
?? ??? ??? ?if(x+y<=19){
?? ??? ??? ??? ?for(int k=0;k<=i-4;k++){
?? ??? ??? ??? ??? ?if(board[k][i-k].equals(str)&&board[k+1][i-k-1].equals(str)&&board[k+2][i-k-2].equals(str)&&board[k+3][i-k-3].equals(str)&&board[k+4][i-k-4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;?? ??? ?
?? ??? ??? ??? ?}
?? ??? ??? ?}else{
?? ??? ??? ??? ?for(int k=i;k<=15;k++){
?? ??? ??? ??? ??? ?if(board[k][20-k].equals(str)&&board[k+1][20-k-1].equals(str)&&board[k+2][20-k-2].equals(str)&&board[k+3][20-k-3].equals(str)&&board[k+4][20-k-4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//棋子所在捺行是否有五子相連的情況
?? ??? ?if(y-x<=15&&x-y<=15){
?? ??? ??? ?int i=(x<y)?y-x:x-y;
?? ??? ??? ?if(x<y){
?? ??? ??? ??? ?for(int k=0;k<=19-4-i;k++){
?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}else{
?? ??? ??? ??? ?for(int k=i;k<=15;k++){
?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return false;?? ?
?
?? ?}

最后我就將完整的棋盤類代碼貼出來,寫五子棋代碼時參考了很多其他人的想法,有相同的請不要見怪;

棋盤類完整代碼如下:

import java.awt.*;
import java.awt.event.*;
?
import javax.swing.*;
/*
?* 五子棋的棋盤類
?*/
?
public class ChessBord extends JPanel implements MouseListener{//繼承面板類和鼠標事件接口
?? ?public static int MARGIN=30;//定義邊距
?? ?public static int ROWS=15;//定義行數(shù)
?? ?public static int COLS=15;//定義列數(shù)
?? ?public static int GRID_SPAN=35;//網(wǎng)格間距
?? ?Chess[] chessList=new Chess[(ROWS+1)*(COLS+1)];//定義一個棋子數(shù)組
?? ?String[][] board=new String[MARGIN*2+GRID_SPAN*COLS][MARGIN*2+GRID_SPAN*COLS];//聲明一個字符串數(shù)組,用來判斷輸贏
?? ?int chessCount;//棋子數(shù)目
?? ?int xindex,yindex;//棋子的坐標索引
?? ?boolean start=true;//開始默認黑子先下
?? ?boolean GameOver=false;//定義是否游戲結(jié)束
?? ?public ChessBord() {//棋盤類構(gòu)造函數(shù)
?? ??? ?setBackground(Color.LIGHT_GRAY);//設(shè)置背景顏色
?? ??? ?addMouseListener(this);//將棋盤類添加到鼠標事件監(jiān)聽器
?? ??? ?addMouseMotionListener(new MouseMotionListener() {//匿名內(nèi)部類
?? ??? ??? ?
?? ??? ??? ?@Override
?? ??? ??? ?public void mouseMoved(MouseEvent e) {//根據(jù)鼠標的移動所在的坐標來設(shè)置鼠標光標形狀
?? ??? ??? ??? ?int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對鼠標光標的x坐標進行轉(zhuǎn)換
?? ??? ??? ??? ?int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對鼠標光標的y坐標進行轉(zhuǎn)換
?? ??? ??? ??? ?if(x1<0||x1>ROWS||y1<0||y1>COLS||GameOver||findchess(x1, y1)) {
?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//設(shè)置鼠標光標為默認形狀
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.HAND_CURSOR));//設(shè)置鼠標光標為手型
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ??? ?@Override
?? ??? ??? ?public void mouseDragged(MouseEvent e) {
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?});
?? ??? ?for(int i=0;i<MARGIN*2+GRID_SPAN*COLS;i++) {//對board[][]賦初值
?? ??? ??? ?for (int j = 0; j < MARGIN*2+GRID_SPAN*COLS; j++) {
?? ??? ??? ??? ?board[i][j]="0";
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?
?? ?@Override
?? ?public void mouseClicked(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ?}
?
?? ?@Override
?? ?public void mousePressed(MouseEvent e) {//鼠標點擊事件
?? ??? ?if(GameOver)//游戲結(jié)束,不能按
?? ??? ??? ?return ;
?? ??? ?String colorName=start?"黑棋":"白棋";//判斷是什么顏色的棋子
?? ??? ?xindex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子x坐標
?? ??? ?yindex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子y坐標
?? ??? ?board[xindex][yindex]=colorName;//以棋子x坐標y坐標做索引將棋子的顏色添加到board中
?? ??? ?if(xindex<0||xindex>ROWS||yindex<0||yindex>COLS) {//棋子在棋盤外不能下,
?? ??? ??? ?return ;
?? ??? ?}else if(findchess( xindex, yindex)) {//所下位置已有棋子,不能下
?? ??? ??? ?return ;
?? ??? ?}
?? ??? ?Chess po=new Chess(xindex,yindex,start?Color.black:Color.WHITE);//對棋子對象進行初始化
?? ??? ?chessList[chessCount++]=po;//將棋子對象添加到棋子數(shù)組中
?? ??? ?repaint();//重畫圖型
?? ??? ?if(win( xindex,yindex,start)) {//判斷是否勝利
?? ??? ??? ?String msg=String.format("恭喜 %s贏了",colorName);
?? ??? ??? ?JOptionPane.showMessageDialog(this, msg);
?? ??? ??? ?//gameOver=true;
?? ??? ??? ?GameOver=true;
?? ??? ?}else if(chessCount==(COLS+1)*(ROWS+1)) {//判斷是否全部下滿
?? ??? ?String msg=String.format("恭喜 %s贏了",colorName);
?? ??? ?JOptionPane.showMessageDialog(this, msg);
?? ??? ?GameOver=true;
?? ??? ?}
?? ??? ?start=!start;//改變棋子先下棋狀態(tài)
?? ?}
?
?? ?@Override
?? ?public void mouseReleased(MouseEvent e) {
?? ??? ?
?? ?}
?
?? ?@Override
?? ?public void mouseEntered(MouseEvent e) {
?? ??? ?
?? ?}
?
?? ?@Override
?? ?public void mouseExited(MouseEvent e) {
?? ??? ?
?? ?}
?? ?
?? ?@Override
?? ?protected void paintComponent(Graphics g) {//畫棋盤和棋子
?? ??? ?super.paintComponent(g);
?? ??? ?for(int i=0;i<=ROWS;i++) {//畫橫線
?? ??? ?g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN);
?? ??? ?}
?? ??? ?for(int j=0;j<=COLS;j++) {//畫豎線
?? ??? ??? ?g.drawLine(MARGIN+j*GRID_SPAN, MARGIN, MARGIN+j*GRID_SPAN, MARGIN+ROWS*GRID_SPAN);
?? ??? ?}
?? ??? ?for(int i=0;i<chessCount;i++) {//畫棋子
?? ??? ??? ?int xpos=chessList[i].getX()*GRID_SPAN+MARGIN;//得到棋子x坐標
?? ??? ??? ?int ypos=chessList[i].getY()*GRID_SPAN+MARGIN;//得到棋子y坐標
?? ??? ??? ?g.setColor(chessList[i].getColor());//設(shè)置棋子顏色
?? ??? ??? ?g.fillOval(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER);//畫棋子
?? ??? ??? ?if(i==chessCount-1){
?? ??? ??? ??? ?g.setColor(Color.red);//標記最后一個棋子為紅色
?? ??? ??? ? ? ?g.drawRect(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ?}
?? ?private?? ?boolean findchess(int index,int yindex) {//查找所在位置是否有棋子
?? ??? ?for (Chess c : chessList) {
?? ??? ??? ?if(c!=null&&c.getX()==xindex&&c.getY()==yindex)
?? ??? ??? ??? ?return true;
?? ??? ?}
?? ??? ?return false;
?? ?}
?? ?private?? ?boolean win(int x,int y,boolean start) {//對棋子輸贏的判斷
?? ??? ?String str=start?"黑棋":"白棋";
?? ??? ?//棋子所在行和列是否有五子相連的情況
?? ??? ?for(int i=0;i<16;i++){
?? ??? ??? ?if((board[x][i].equals(str)&&board[x][i+1].equals(str)&&board[x][i+2].equals(str)&&board[x][i+3].equals(str)&&board[x][i+4].equals(str))||(board[i][y].equals(str)&&board[i+1][y].equals(str)&&board[i+2][y].equals(str)&&board[i+3][y].equals(str)&&board[i+4][y].equals(str)))
?? ??? ??? ??? ?return true;
?? ??? ?}
?? ??? ?//棋子所在撇行是否有五子相連的情況
?? ??? ?if(x+y>=4&&x+y<=30){
?? ??? ??? ?int i=(x+y<=19)?x+y:x+y-20;
?? ??? ??? ?if(x+y<=19){
?? ??? ??? ??? ?for(int k=0;k<=i-4;k++){
?? ??? ??? ??? ??? ?if(board[k][i-k].equals(str)&&board[k+1][i-k-1].equals(str)&&board[k+2][i-k-2].equals(str)&&board[k+3][i-k-3].equals(str)&&board[k+4][i-k-4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;?? ??? ?
?? ??? ??? ??? ?}
?? ??? ??? ?}else{
?? ??? ??? ??? ?for(int k=i;k<=15;k++){
?? ??? ??? ??? ??? ?if(board[k][20-k].equals(str)&&board[k+1][20-k-1].equals(str)&&board[k+2][20-k-2].equals(str)&&board[k+3][20-k-3].equals(str)&&board[k+4][20-k-4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//棋子所在捺行是否有五子相連的情況
?? ??? ?if(y-x<=15&&x-y<=15){
?? ??? ??? ?int i=(x<y)?y-x:x-y;
?? ??? ??? ?if(x<y){
?? ??? ??? ??? ?for(int k=0;k<=19-4-i;k++){
?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}else{
?? ??? ??? ??? ?for(int k=i;k<=15;k++){
?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
?? ??? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return false;?? ?
?
?? ?}
?? ?public void goback() {//悔棋函數(shù)
?? ??? ?if(chessCount==0) {
?? ??? ??? ?return ;
?? ??? ?}
?? ??? ?chessList[chessCount-1]=null;
?? ??? ?chessCount--;
?? ??? ?if(chessCount>0) {
?? ??? ??? ?xindex=chessList[chessCount-1].getX();
?? ??? ??? ?yindex=chessList[chessCount-1].getY();
?? ??? ?}
?? ??? ?start=!start;
?? ??? ?repaint();
?? ?}
?? ?public void restartGame() {//重新開始函數(shù)
?? ??? ?for(int i=0;i<chessList.length;i++)//設(shè)置為初始狀態(tài)
?? ??? ??? ?chessList[i]=null;
?? ??? ?for(int i=0;i<MARGIN*2+GRID_SPAN*COLS;i++) {
?? ??? ??? ?for (int j = 0; j < MARGIN*2+GRID_SPAN*COLS; j++) {
?? ??? ??? ??? ?board[i][j]="0";
?? ??? ??? ?}
?? ??? ?}
?? ??? ?start=true;
?? ??? ?GameOver=false;
?? ??? ?chessCount=0;
?? ??? ?repaint();
?? ?}
?
?? ?public Dimension getPreferredSize(){//畫矩形
?? ??? ?return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2+GRID_SPAN*ROWS);
}?
?? ?
}

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

相關(guān)文章

  • SpringMVC @ResponseBody 415錯誤處理方式

    SpringMVC @ResponseBody 415錯誤處理方式

    這篇文章主要介紹了SpringMVC @ResponseBody 415錯誤處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot中Jackson用法詳解

    Springboot中Jackson用法詳解

    Springboot自帶默認json解析Jackson,可以在不引入其他json解析包情況下,解析json字段,下面我們就來聊聊Springboot中Jackson的用法吧
    2025-01-01
  • springboot2學習世界著名程序springboot開發(fā)體驗

    springboot2學習世界著名程序springboot開發(fā)體驗

    這篇文章主要為大家介紹了世界著名程序springboot開發(fā)體驗,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • SpringBoot日志框架如何使用

    SpringBoot日志框架如何使用

    這篇文章主要介紹了SpringBoot日志框架如何使用,幫助大家更好的理解和使用springboot日志框架,感興趣的朋友可以了解下
    2021-01-01
  • 關(guān)于JDK8中的字符串拼接示例詳解

    關(guān)于JDK8中的字符串拼接示例詳解

    字符串拼接問題應(yīng)該是每個Java程序員都熟知的事情了,幾乎每個Java程序員都讀過關(guān)于StringBuffer/StringBuilder來拼接字符串。下面這篇文章主要給大家介紹了關(guān)于JDK8中的字符串拼接的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • java獲取系統(tǒng)路徑字體、得到某個目錄下的所有文件名、獲取當前路徑

    java獲取系統(tǒng)路徑字體、得到某個目錄下的所有文件名、獲取當前路徑

    這篇文章主要介紹了java獲取系統(tǒng)路徑字體、得到某個目錄下的所有文件名、獲取當前路徑,需要的朋友可以參考下
    2014-04-04
  • java多線程實現(xiàn)服務(wù)器端與多客戶端之間的通信

    java多線程實現(xiàn)服務(wù)器端與多客戶端之間的通信

    本篇文章主要介紹了java多線程實現(xiàn)服務(wù)器端與多客戶端之間的通信,介紹了多線程來實現(xiàn)服務(wù)器與多線程之間的通信的基本步驟,有需要的小伙伴可以參考下。
    2016-10-10
  • Java自定義比較器實現(xiàn)中文排序

    Java自定義比較器實現(xiàn)中文排序

    這篇文章主要介紹了Java自定義比較器實現(xiàn)中文排序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 詳解Java實踐之建造者模式

    詳解Java實踐之建造者模式

    建造者模式是將一個復雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。它隱藏了復雜對象的創(chuàng)建過程,它把復雜對象的創(chuàng)建過程加以抽象,通過子類繼承或者重載的方式,動態(tài)的創(chuàng)建具有復合屬性的對象
    2021-06-06
  • Idea插件安裝和管理方式

    Idea插件安裝和管理方式

    這篇文章主要介紹了Idea插件安裝和管理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

韩城市| 孟州市| 嵩明县| 封丘县| 枣强县| 同德县| 郎溪县| 五家渠市| 商河县| 比如县| 宕昌县| 花莲县| 松桃| 和田市| 久治县| 刚察县| 隆子县| 十堰市| 云梦县| 宁都县| 富锦市| 文安县| 富川| 龙里县| 丽水市| 阿拉善左旗| 道孚县| 苍山县| 浮山县| 蒙山县| 江都市| 皋兰县| 阳山县| 商都县| 府谷县| 上蔡县| 泽州县| 三门峡市| 黄骅市| 凤冈县| 琼中|