亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java實現五子棋小游戲

2019-11-26 15:14:20
字體:
來源:轉載
供稿:網友

java實現五子棋小游戲

package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame;  public class GomokuFrame extends JFrame {  //定義一個操作面板  OperatorPane op=null;     public GomokuFrame()  {    //設置名稱    this.setTitle("五子棋");    //設置窗口大小    this.setSize(510,510);    //設置窗口位置      //取得電腦屏幕大小    int computer_width=Toolkit.getDefaultToolkit().getScreenSize().width;    int computer_height=Toolkit.getDefaultToolkit().getScreenSize().height;    System.out.println("電腦屏幕的寬度:/n"+computer_width+"/n電腦屏幕的高度:/n"+computer_height);        //居中    this.setLocation((computer_width-510)/2, (computer_height-510)/2);             //實例化幕布    op=new OperatorPane();    //導入幕布    this.add(op);    //添加鼠標監聽    this.addMouseListener(op);         //設置窗口的顯示    this.setVisible(true);    //設置窗口的正常關閉    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  }      //執行測試  public static void main(String[] args)   {    new GomokuFrame();  }     }   
package Gomoku;  import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;   import java.awt.image.BufferedImage;import java.awt.image.BufferedImageFilter; import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel; public class OperatorPane extends JPanel implements MouseListener,Runnable{  //定義背景圖片對象  Image imageBackground = null;  //定義棋盤的格子的行數  int boardrows=18;  //定義棋盤的格子的列數  int boardcols=18;  //定義棋盤的格子的大小  int boardsize=20;  //保存棋子坐標  int x=0,y=0;  //保存之前下過的全部棋子坐標  // 其中數據內容 0: 表示這個點并沒有棋子, 1: 表示這個點是黑子, 2:表示這個點是白子  int allchess[][]=new int [19][19];  //標記下一步下黑棋還是白棋  boolean isBlack=true;  //判斷游戲是否能夠繼續  boolean canPlay=true;  //保存顯示信息  String message="黑方先行";  // 保存最多擁有多少時間(秒)  int maxTime = 0;  // 做倒計時的線程類  Thread t = new Thread(this);  // 保存黑方與白方的剩余時間  int blackTime = 0;  int whiteTime = 0;  // 保存雙方剩余時間的顯示信息  String blackMessage = "無限制";  String whiteMessage = "無限制";        @SuppressWarnings("deprecation")  public OperatorPane()  {     t.start();    t.suspend();          imageBackground=new ImageIcon("image/background.jpg").getImage();  }     public void paint(Graphics g)   {    //雙緩沖技術    BufferedImage b1=new BufferedImage(495,475,BufferedImage.TYPE_INT_ARGB);    Graphics g2=b1.createGraphics();         // 畫出背景圖片    g2.drawImage(imageBackground, 0, 0,495,475,null);              //畫出棋盤線    Color c=g2.getColor();    g2.setColor(Color.BLACK);    for(int i=0;i<=boardrows;i++)    {      g2.drawLine(10,50+boardsize*i,10+boardsize*boardrows,50+boardsize*i);    }    for(int i=0;i<=boardcols;i++)    {      g2.drawLine(10+boardsize*i,50,10+boardsize*i,50+boardsize*boardcols);    }         //畫出三三位置    g2.fillOval(67, 107, 6, 6);    g2.fillOval(67, 347, 6, 6);    g2.fillOval(307, 107, 6, 6);    g2.fillOval(307, 347, 6, 6);    //畫出附點    g2.fillOval(67, 227, 6, 6);    g2.fillOval(307, 227, 6, 6);    g2.fillOval(187, 107, 6, 6);    g2.fillOval(187, 347, 6, 6);         //畫出天元    g2.fillOval(187, 227, 6, 6);                        //畫出文字提示    /*Font f=new Font("黑體", Font.BOLD, 24);    g.setFont(f);*/    g2.setFont(new Font("黑體", Font.BOLD, 20));    g2.setColor(Color.BLACK);    g2.drawString("游戲信息:"+message, 130, 40);    g2.setFont(new Font("宋體", Font.ITALIC, 15));    g2.drawString("黑方時間:"+blackMessage,25, 445);    g2.drawString("白方時間:"+whiteMessage,245, 445);        //繪制全部棋子    for(int i=0;i<=boardrows;i++)    {      for(int j=0;j<=boardcols;j++)      {        //存儲黑棋        if(allchess[i][j]==1)        {          int tempX=i*20-10;          int tempY=j*20+30;          //畫出黑棋          g2.setColor(Color.BLACK);          g2.fillOval(tempX+12, tempY+13, 15, 15);        }                 //存儲白棋        if(allchess[i][j]==2)        {          int tempX=i*20-10;          int tempY=j*20+30;          //畫出白棋          g2.setColor(Color.BLACK);          g2.drawOval(tempX+12, tempY+13, 15, 15);          g2.setColor(Color.WHITE);          g2.fillOval(tempX+12, tempY+13, 15, 15);        }      }     }       g2.setColor(c);         g.drawImage(b1,0,0,this);  }        private boolean checkWin()  {    boolean flag=false;         int color = allchess[x][y];         /*// 保存共有相同顏色多少棋子相連    int count1=1;    int count2=1;    int count3=1;    int count4=1;         // 判斷橫向是否有5個棋子相連,特點 縱坐標 是相同, 即allChess[x][y]中y值是相同    // 通過循環來做棋子相連的判斷          int i = 1;    while (color == allchess[x+i][y])     {      count1++;       i++;     }    //將i值復位    i = 1;    while (color == allchess[x-i][y])    {       count1++;       i++;     }    if(count1 >= 5)    {       flag = true;     }              //判斷縱向 ,即allChess[x][y]中x值是相同    int j = 1;    while (color == allchess[x][y+j])     {      count2++;       j++;     }    //將j值復位    j = 1;    while (color == allchess[x][y-j])    {       count2++;       j++;     }    if(count2>= 5)    {       flag = true;     }         //判斷斜向"/"    int m1=1;    int n1=1;    while (color == allchess[x+m1][y+n1])     {      count3++;       m1++;       n1++;    }    m1=1;    n1=1;    while (color == allchess[x-m1][y-n1])     {      count3++;       m1++;       n1++;    }    if(count3>= 5)    {       flag = true;     }         //判斷斜向"/"    int m2=1;    int n2=1;    while (color == allchess[x+m2][y-n2])     {      count4++;       m2++;       n2++;    }    m2=1;    n2=1;    while (color == allchess[x-m2][y+n2])     {      count4++;       m2++;       n2++;    }    if(count4>= 5)    {       flag = true;     }     */    int count;    //橫向判斷    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;           }        }      }    }                   return flag;  }     private int checkCount(int xChange,int yChange,int color)  {    int count=1;    int tempX=xChange;    int tempY=yChange;         while (color==allchess[x+xChange][y+yChange])     {      count++;      if(xChange!=0)      {        xChange++;       }      if(yChange!=0)      {        if(yChange<0)        {          yChange--;        }          else          {          yChange++;          }               }           }    //復位    xChange=tempX;    yChange=tempY;    while (color==allchess[x-xChange][y-yChange])     {      count++;      if(xChange!=0)      {        xChange++;       }      if(yChange!=0)      {        if(yChange<0)        {          yChange--;        }          else        {          yChange++;        }      }      }    return count;   }             public void mouseClicked(MouseEvent e)   {         System.out.println("x:"+e.getX()+"y:"+e.getY());    x=e.getX();    y=e.getY();    if(x>=10&&x<=(10+boardsize*boardrows+20)&&y>=50&&y<=(50+boardsize*boardcols+40))    {      //System.out.println("點在棋盤內。");      x=(x-10)/20;      y=(y-50-20)/20;                    if(canPlay==true)      {        //判斷當前要下什么顏色        if(allchess[x][y]==0)        {          if(isBlack==true)          {            allchess[x][y]=1;            isBlack=false;            message="輪到白方";          }          else          {            allchess[x][y]=2;            isBlack=true;            message="輪到黑方";          }           // 判斷這個棋子是否和其他的棋子連成5連,即判斷游戲是否結束          boolean winFlag=this.checkWin();          if(winFlag==true)          {             JOptionPane.showMessageDialog(this,"游戲結束!"+                (allchess[x][y]==1?"黑方":"白方")+"獲勝。");            canPlay=false;          }        }        else        {          JOptionPane.showMessageDialog(this,"當前位置已經有棋子,請重新落子!");        }      }      this.repaint();    }              //點擊,游戲開始按鈕        //重新開始新的游戲    if(e.getX()>=400&&e.getX()<=470&&e.getY()>=80&&e.getY()<=110)    {      int result=JOptionPane.showConfirmDialog(this, "設置完成,是否重新開始游戲?");      if(result==0)      {        //重新開始的操作,allchess[][]數組中的信息全部為0        //清空棋盤        for (int i = 0; i < 19; i++)         {          for (int j = 0; j < 19; j++)           {            allchess[i][j] = 0;          }        }        //另一種方式 allChess = new int[19][19];        blackTime = maxTime;        whiteTime = maxTime;        if (maxTime > 0)         {          blackMessage = maxTime / 3600 + ":"              + (maxTime / 60 - maxTime / 3600 * 60) + ":"              + (maxTime - maxTime / 60 * 60);          whiteMessage = maxTime / 3600 + ":"              + (maxTime / 60 - maxTime / 3600 * 60) + ":"              + (maxTime - maxTime / 60 * 60);          t.resume();        }         else        {          blackMessage = "無限制";          whiteMessage = "無限制";        }        message = "黑方先行";        isBlack = true;        this.canPlay = true;         this.repaint();      }    }         //點擊 游戲設置按鈕    if(e.getX()>=400&&e.getX()<=470&&e.getY()>=130&&e.getY()<=160)    {      String input = JOptionPane          .showInputDialog("請輸入游戲的最大時間(單位:分鐘),如果輸入0,表示沒有時間限制:");      try {        maxTime = Integer.parseInt(input) * 60;        if (maxTime < 0)         {          JOptionPane.showMessageDialog(this, "請輸入正確信息,不允許輸入負數!");        }        if (maxTime == 0)         {          int result = JOptionPane.showConfirmDialog(this,              "設置完成,是否重新開始游戲?");          if (result == 0)           {            for (int i = 0; i < 19; i++)             {              for (int j = 0; j < 19; j++)               {                allchess[i][j] = 0;              }            }            // 另一種方式 allChess = new int[19][19];            message = "黑方先行";            isBlack = true;            blackTime = maxTime;            whiteTime = maxTime;            blackMessage = "無限制";            whiteMessage = "無限制";            this.canPlay = true;             this.repaint();          }        }        if (maxTime > 0)        {          int result = JOptionPane.showConfirmDialog(this,              "設置完成,是否重新開始游戲?");          if (result == 0)           {            for (int i = 0; i < 19; i++)            {              for (int j = 0; j < 19; j++)               {                allchess[i][j] = 0;              }            }            // 另一種方式 allChess = new int[19][19];            message = "黑方先行";            isBlack = true;            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);            t.resume();            this.canPlay = true;             this.repaint();          }        }      }      catch (NumberFormatException e1)       {        // TODO Auto-generated catch block        JOptionPane.showMessageDialog(this, "請正確輸入信息!");      }    }         //點擊 游戲說明按鈕    if(e.getX()>=400&&e.getX()<=470&&e.getY()>=180&&e.getY()<=210)    {      JOptionPane.showMessageDialog(this,"這個一個五子棋游戲程序,黑白雙方輪流下棋,當某一方連到五子時,游戲結束。");    }         //點擊 認輸按鈕    if(e.getX()>=400&&e.getX()<=470&&e.getY()>=280&&e.getY()<=310)    {      int result=JOptionPane.showConfirmDialog(this,"是否確定認輸?");      if (result == 0)       {        if (isBlack)        {          JOptionPane.showMessageDialog(this, "黑方已經認輸,游戲結束!");        }         else        {          JOptionPane.showMessageDialog(this, "白方已經認輸,游戲結束!");        }        canPlay = false;      }    }         //點擊 關于按鈕    if(e.getX()>=400&&e.getX()<=470&&e.getY()>=330&&e.getY()<=360)    {      JOptionPane.showMessageDialog(this,"本游戲由南木工作室制作,有相關問題可以訪問www.yiyiinformation.com");    }         //點擊 退出按鈕    if(e.getX()>=400&&e.getX()<=470&&e.getY()>=380&&e.getY()<=410)    {      JOptionPane.showMessageDialog(this, "游戲結束");      System.exit(0);    }       }           //************************//  @Override  public void mouseEntered(MouseEvent arg0)  {    // TODO Auto-generated method stub       }   @Override  public void mouseExited(MouseEvent arg0)   {    // TODO Auto-generated method stub       }   @Override  public void mousePressed(MouseEvent arg0)   {    // TODO Auto-generated method stub       }   @Override  public void mouseReleased(MouseEvent arg0) {    // TODO Auto-generated method stub       }   @Override  public void run()   {    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();        }        System.out.println(blackTime + " -- " + whiteTime);      }    }  }     }         

演示圖:

以上所述就是本文的全部內容了,希望能夠對大家熟練掌握java有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲精品福利线在观看| 亚洲国产成人精品久久| 日本精品久久久| 国产日韩欧美91| 国产精品久久久久久久9999| 中文字幕在线观看亚洲| 精品国产乱码久久久久酒店| 中文字幕在线成人| 亚洲自拍高清视频网站| 国产精品老女人精品视频| 国产性色av一区二区| 欧美成人中文字幕| 亚洲黄色成人网| 欧美国产日韩一区二区三区| 欧美在线一级视频| 亚洲欧美一区二区精品久久久| 亚洲国产精品网站| 成人自拍性视频| 最近2019中文字幕一页二页| 国产丝袜一区二区三区| 久久久国产精品一区| 日韩在线小视频| 欧美日韩美女在线观看| 亚洲综合成人婷婷小说| 亚洲人成网站色ww在线| 欧美在线视频一二三| 久久人人97超碰精品888| 91理论片午午论夜理片久久| 欧美裸体xxxx极品少妇软件| 亚洲欧美日韩在线一区| 国产三级精品网站| 国产精品久久久久久久电影| 欧美性感美女h网站在线观看免费| 亚洲性生活视频在线观看| 欧美综合国产精品久久丁香| 亚洲iv一区二区三区| 欧美成人精品在线观看| 91久久久久久| 亚洲男人天堂2019| 97香蕉超级碰碰久久免费的优势| 国产欧美日韩精品专区| 在线观看欧美成人| 九九热精品视频| 日韩免费中文字幕| 久久久久久久999精品视频| 亚洲精品久久久久中文字幕欢迎你| 国产丝袜一区二区三区免费视频| 欧美男插女视频| 久久国产精品久久久久| 亚洲天堂网站在线观看视频| 国产精品激情av在线播放| 91精品久久久久久久久| 国产精品成人在线| 精品久久久中文| 亚洲精品国产综合区久久久久久久| 91亚洲精品久久久久久久久久久久| 日韩av三级在线观看| 88国产精品欧美一区二区三区| 8050国产精品久久久久久| 日韩中文字幕在线| 日韩高清免费在线| 中国日韩欧美久久久久久久久| 亚洲激情视频在线| 精品久久久久久国产91| 2019日本中文字幕| 91av网站在线播放| 岛国av一区二区在线在线观看| 欧美精品激情blacked18| 国产亚洲免费的视频看| 日韩欧美精品网站| 中日韩午夜理伦电影免费| 国产精品在线看| 欧美性videos高清精品| 亚洲国产成人久久| 国产精品都在这里| 久久亚洲成人精品| 精品久久久久久中文字幕大豆网| 国产91网红主播在线观看| 欧美激情综合色| 国产精品狼人色视频一区| 亚洲深夜福利在线| 九九热在线精品视频| 亚洲国产日韩欧美在线图片| 黄网站色欧美视频| 国产欧美日韩综合精品| 日韩av在线网站| 亚洲美女视频网站| 国产不卡精品视男人的天堂| 日韩免费不卡av| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品久久久久久久久久久久久| 欧美成人午夜剧场免费观看| 91精品国产高清久久久久久91| 国产人妖伪娘一区91| 91久久嫩草影院一区二区| 国产成人啪精品视频免费网| 91精品国产乱码久久久久久蜜臀| 九九精品视频在线| 亚洲第一视频在线观看| 国产成人精品国内自产拍免费看| 黄色成人av在线| 97久久国产精品| 欧美精品久久久久久久| 成人女保姆的销魂服务| 久久亚洲私人国产精品va| 91美女高潮出水| 成人免费在线网址| 在线观看欧美日韩| 欧美综合在线第二页| 欧美专区中文字幕| 国产精品视频地址| 欧美日韩一区二区三区在线免费观看| 最近2019免费中文字幕视频三| 91久热免费在线视频| 亚洲天堂av网| 57pao国产成人免费| 亚洲视频在线播放| 国内精品模特av私拍在线观看| 亚洲综合一区二区不卡| 91精品国产色综合久久不卡98口| 亚洲一区二区三区四区视频| 精品福利在线看| 欧美激情一区二区三区久久久| 亚洲国产高清自拍| 一本色道久久88综合亚洲精品ⅰ| 91久热免费在线视频| 亚洲第一级黄色片| 亚洲天堂色网站| 亲子乱一区二区三区电影| 亚洲japanese制服美女| 亚洲男人av在线| 亚洲区bt下载| 国产国语videosex另类| 亚洲福利视频网站| 91人人爽人人爽人人精88v| 91黄色8090| 国产成人精品久久亚洲高清不卡| 一区二区三欧美| 91久久国产综合久久91精品网站| 欧美成人免费播放| 国产精品欧美在线| 欧美在线亚洲在线| 伊人久久久久久久久久久久久| 精品视频9999| 亚洲成人在线视频播放| 欧美电影免费观看大全| 久热精品视频在线| 亚洲天堂精品在线| 亚洲综合中文字幕68页| 日韩av手机在线观看| 日日骚av一区| 欧美激情亚洲另类| 亚洲第一精品自拍| 2019中文字幕在线| 亚洲国产日韩欧美在线99| 日韩av手机在线| 欧美视频在线观看免费网址| 视频在线观看99| 国产精品久久久精品| 亚洲成人xxx| 日韩在线观看视频免费| 性日韩欧美在线视频| www国产91| 日韩精品丝袜在线|