国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java swing 雙人五子棋源代碼

2019-11-14 22:04:59
字體:
來源:轉載
供稿:網友
java swing 雙人五子棋源代碼
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 javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveChessFrame extends JFrame implements Runnable,MouseListener{/** *  */PRivate static final long serialVersionUID = 1L;//游戲界面大小int width=Toolkit.getDefaultToolkit().getScreenSize().width;int height=Toolkit.getDefaultToolkit().getScreenSize().height;int x,y;  //鼠標坐標int[][]allChess=new int[15][15];  //保存棋盤,0表示無子,1表示黑子,2表示白字Boolean isblack=true; //當前下子是黑子還是白字,true代表黑子,false代表白子Boolean canPlay=true;  //標始當前游戲是否結束String message="黑方先行";String blackMessage="無限制";String whiteMessage="無限制";//保存棋譜,記錄雙方每一步落子的位置int[]chessX=new int[255]; int[]chessY=new int[255]; int countX,countY;//默認設置無時間限制int maxTime=0; //保存最大時間int blackTime=0;int whiteTime=0; //保存黑白方所剩余的時間Thread timer=new Thread(this); public FiveChessFrame(){this.setTitle("五子棋游戲");this.setSize(500, 500);this.setLocation((width - 500) / 2, (height - 500) / 2);        this.setResizable(false);        this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);        this.setVisible(true);        this.repaint();        this.addMouseListener(this);                timer.start();  //開啟計時線程        timer.suspend();}//畫棋盤界面public void paint(Graphics g){//雙緩沖技術BufferedImage buf=new BufferedImage(500,500,BufferedImage.TYPE_INT_RGB);Graphics g1=buf.createGraphics();  //創建畫筆g1.setColor(new Color(0,169,158));  //設置畫筆顏色g1.fill3DRect(43,60,375,375,true);for(int i=0;i<=15;i++){g1.setColor(Color.WHITE);g1.drawLine(43,60+i*25,375+43,60+i*25);//畫棋盤橫線g1.drawLine(43+i*25,60,43+i*25,375+60); //畫棋盤豎線}g1.setFont(new Font("黑體",Font.BOLD,20));g1.drawString("游戲信息: "+message,50,50);g1.drawRect(30,440,180,40);g1.drawRect(250,440,180,40);  //畫黑方時間與白方時間字符串的邊框g1.setFont(new Font("宋體",0,12));g1.drawString("黑方時間: "+blackMessage,40,465);g1.drawString("白方時間: "+whiteMessage,260,465);g1.drawRect(428,66,54,20);g1.drawString("重新開始",432,80); //重新開始按鈕g1.drawRect(428,106,54,20);g1.drawString("游戲設置",432,120); //游戲設置按鈕        g1.drawRect(428, 146, 54, 20);        g1.drawString("游戲說明", 432, 160); // 游戲說明按鈕         g1.drawRect(428, 186, 54, 20);        g1.drawString("退出游戲", 432, 200);  // 退出游戲按鈕         g1.drawRect(428, 246, 54, 20);        g1.drawString("悔棋", 442, 260);  // 悔棋         g1.drawRect(428, 286, 54, 20);        g1.drawString("認輸", 442, 300);  // 認輸                for(int i=0;i<15;i++){        for(int j=0;j<15;j++){        //畫實心黑子        if(allChess[i][j]==1){        int tempX=i*25+47;        int tempY=j*25+64;        g1.setColor(Color.BLACK);        g1.fillOval(tempX,tempY,16,16);        g1.setColor(Color.BLACK);        g1.drawOval(tempX,tempY,16,16);        }                //畫實心白子        if(allChess[i][j]==2){        int tempX=i*25+47;        int tempY=j*25+64;        g1.setColor(Color.WHITE);        g1.fillOval(tempX, tempY, 16, 16);        g1.setColor(Color.BLACK);        g1.drawOval(tempX, tempY, 16, 16);        }        }        }g.drawImage(buf, 0, 0,this);}@Overridepublic void mousePressed(MouseEvent e){if(canPlay){x=e.getX();y=e.getY(); //獲得鼠標坐標if(x>=55 && x<=405 && y>=72 && y<=420){//使x,y在0-15的范圍if((x-55)%25>12){x=(x-55)/25+1;}else{x=(x-55)/25;}if((y-72)%25>12){y=(y-72)/25+1;}else{y=(y-72)/25;}//落子if(allChess[x][y]==0){chessX[countX++]=x;chessY[countY++]=y;if(isblack){allChess[x][y]=1;isblack=false;message="白方下子";}else{allChess[x][y]=2;isblack=true;message="黑方下子";}this.repaint();if(this.isWin()){if(allChess[x][y]==1){JOptionPane.showMessageDialog(this, "游戲結束,黑方勝利");}else{JOptionPane.showMessageDialog(this, "游戲結束,白方勝利");}this.canPlay=false; //標識游戲結束}}}}//重新開始游戲if(e.getX()>=428 && e.getY()<=(428+54) && e.getY()>=66 && e.getY()<=(66+20)){int result=JOptionPane.showConfirmDialog(this,"是否重新開始游戲?"); //0表示重新開始if(result==0){restartGame();}}//游戲倒計時設置if (e.getX()>=428 && e.getX()<=(428+54) && e.getY()>= 106 && e.getY()<=(106+20)) {String time=JOptionPane.showInputDialog("請輸入游戲的最大時間(單位:分鐘),如果輸入0,表示沒有時間限制:");maxTime=Integer.parseInt(time)*60;  //將分鐘轉換為秒,以便后面計算if(maxTime<0){JOptionPane.showMessageDialog(this,"輸入的游戲時間有誤,請重新設置!");}else if(maxTime==0){int result=JOptionPane.showConfirmDialog(this,"游戲時間設置成功,是否重新開始游戲?");//重新開始if(result==0){restartGame();timer.suspend(); //掛起線程,以便之后重新啟動}}else if(maxTime>0){int result = JOptionPane.showConfirmDialog(this,"游戲時間設置成功,是否重新開始游戲?");if(result==0){for(int i=0;i<15;i++){for(int j=0;j<15;j++){allChess[i][j]=0;}}for(int i=0;i<15;i++){chessX[i]=-1;chessY[i]=-1;}countX=0;countY=0;message="黑方先行";isblack=true;blackMessage=maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60);whiteMessage = maxTime/3600 + ":" + (maxTime/60-maxTime/3600*60) + ":"+ (maxTime-maxTime/60*60);blackTime=maxTime;  whiteTime=maxTime;timer.resume();this.canPlay=true; this.repaint();}}}//游戲說明if(e.getX()>=428 && e.getY()<=(428+54) && e.getY()>=146 && e.getY()<=(146+20)){JOptionPane.showMessageDialog(this,"規則:橫豎斜先連成五子者獲勝!");}//退出游戲 if(e.getX()>=428 && e.getX()<=(428+54) && e.getY()>=186 && e.getY()<=(186+20)) { int result=JOptionPane.showConfirmDialog(this,"是否退出游戲?"); if(result==0){ System.exit(0); } }  //悔棋 if(e.getX()>=428 && e.getX()<=(428+54) && e.getY()>=246 && e.getY()<=(246+20)){ int result=JOptionPane.showConfirmDialog(this,(isblack==true?"白方悔棋,黑方是否同意?" : "黑方悔棋,白方是否同意?")); //result=0為悔棋 if(result==0){ allChess[chessX[--countX]][chessY[--countY]]=0; if(isblack==true){ isblack=false; } else{ isblack=true; }  this.repaint(); //重繪棋盤 } }  //認輸 if(e.getX()>=428 && e.getX()<=(428+54) && e.getY()>=286 && e.getY()<=(286+20)){ int result=JOptionPane.showConfirmDialog(this, "是否認輸?"); if(result==0){ JOptionPane.showMessageDialog(this,"游戲結束,"+(isblack==true ? "黑方認輸,白方獲勝!" : "白方認輸,黑方獲勝!")); } } }//計時@Overridepublic void run() {if(this.maxTime>0){while(true){if(isblack){blackTime--;if(blackTime==0){JOptionPane.showMessageDialog(this,"黑方超時,游戲結束");restartGame();timer.suspend();}}else{whiteTime--;if(whiteTime==0){JOptionPane.showMessageDialog(this,"白方超時,游戲結束");restartGame();timer.suspend();}}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);  //設置與時鐘同步,1秒鐘記一次} catch (InterruptedException e) {e.printStackTrace();}}}}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}public void restartGame(){for(int i=0;i<15;i++){for(int j=0;j<15;j++){allChess[i][j]=0;  //清空棋盤的棋子}}//清空下棋棋子坐標(x,y)的記錄for(int i=0;i<15;i++){chessX[i]=0;chessY[i]=0;}countX=0;countY=0;message="黑方先行";blackMessage="無限制";whiteMessage="無限制";blackTime=maxTime;whiteTime=maxTime;isblack=true;canPlay=true;this.repaint();}public boolean isWin(){boolean flag=false;  //定義一標志位int count=1;  //保存共有相同顏色多少棋子相連,初始值為1int color=allChess[x][y]; //color=1(黑子).color=2(白子)//判斷橫向是否有5個棋子相連,特點:縱坐標是相同,即allChess[x][y]中y值是相同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;}public int checkCount(int xChange,int yChange,int color){int count=1;int tempX=xChange;int tempY=yChange; //保存初始值//全局變量x,y最初為鼠標點擊的坐標,經下棋方法已經將x,y的范圍變成0-15(遍歷整個棋盤,尋找相同顏色的棋子)while(x+xChange>=0 && x+xChange<15 && y+yChange>=0 && y+yChange<15 && color==allChess[x+xChange][y+yChange]){count++;if(xChange!=0) xChange++;if(yChange!=0){if(yChange!=0){if(yChange>0) yChange++;else {yChange--;}}}}xChange=tempX;yChange=tempY;while(x-xChange>=0 && x-xChange<15 && y-yChange>=0 && y-yChange<15 && color==allChess[x-xChange][y-yChange]){count++;if(xChange!=0){xChange++;}if(yChange!=0){if(yChange>0) yChange++;else{yChange--;}}}return count;}public static void main(String[] args) {new FiveChessFrame();}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 革吉县| 青铜峡市| 防城港市| 景泰县| 丹寨县| 洛宁县| 井研县| 左权县| 开封市| 山丹县| 耒阳市| 岫岩| 循化| 砀山县| 景德镇市| 德昌县| 贡嘎县| 佛冈县| 沾化县| 铅山县| 康乐县| 洛扎县| 邹平县| 泾川县| 牙克石市| 天等县| 高尔夫| 云和县| 越西县| 凯里市| 泰兴市| 白朗县| 清镇市| 卓尼县| 图们市| 英山县| 宣化县| 长白| 都安| 镇宁| 闸北区|