javaFX實(shí)現(xiàn)五子棋小游戲
javaFX實(shí)現(xiàn)五子棋游戲,供大家參考,具體內(nèi)容如下
做課程設(shè)計(jì)的時(shí)候做到這個(gè),分享出來(lái)大家參考一下吧,圖片為游戲運(yùn)行過(guò)程
最下的代碼就是整個(gè)實(shí)現(xiàn)整個(gè)需求的
package Version3; import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.stage.Stage; public class Version3 extends Application { private char winer = ' ';//勝者 TextField tf = new TextField(); private char whoseTurn = (int)(Math.random() * 2) == 0 ? 'X' : 'O';//隨機(jī)回合 private int numberOfClick = 0; @Override public void start(Stage primaryStage) { Button bt = new Button("New game"); //按鈕 //TextField tf = new TextField(); Cell [] cell = new Cell[9]; for(int i=0; i<9 ;i++){ cell[i] = new Cell(2,1); } GridPane gpane = new GridPane(); int num =0; for(int i=0; i<3 ;i++){ for(int j=0; j<3 ;j++){ gpane.add(cell[num],j,i); num++; } } tf.setEditable(false);//文本不可編輯 BorderPane pane = new BorderPane(); pane.setTop(bt); pane.setAlignment(bt,Pos.CENTER); pane.setCenter(gpane); pane.setBottom(tf); //按鈕事件 重新開(kāi)始游戲 bt.setOnAction(e ->{ gpane.getChildren().clear(); for (int i = 0; i < 9; i++) { cell[i] = new Cell(2,1); } int k = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { gpane.add(cell[k], j, i); k++; } } whoseTurn = (int)(Math.random() * 2) == 0 ? 'X' : 'O'; tf.setText(whoseTurn == 'X' ? "X's turn" : "O's turn"); setListenerForCells(cell);//調(diào)用單元格的偵聽(tīng)器 winer = ' '; }); // 給底部文本設(shè)置初始情況 tf.setText(whoseTurn == 'X' ? "X's turn" : "O's turn"); // 給每個(gè)面板設(shè)置一個(gè)監(jiān)聽(tīng)器 setListenerForCells(cell); Scene scene = new Scene(pane,495,550); primaryStage.setTitle("version3"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } public void judgeWhoWin(Cell[] cell){ // 判斷行 for (int i = 0; i < 3; i++) { if (cell[i * 3].contain == 'X'&& cell[i * 3 + 1].contain == 'X'&& cell[i * 3 + 2].contain == 'X') { winer = 'X'; } else if (cell[i * 3].contain == 'O'&& cell[i * 3 + 1].contain == 'O'&& cell[i * 3 + 2].contain == 'O') { winer = 'O'; } } // 判斷列 for (int i = 0; i < 3; i++) { if (cell[i].contain == 'X'&& cell[i + 3].contain == 'X'&& cell[i + 6].contain == 'X') { winer = 'X'; } else if (cell[i].contain == 'O'&& cell[i + 3].contain == 'O'&& cell[i + 6].contain == 'O') { winer = 'O'; } } // 判斷主、副對(duì)角線(xiàn) if (cell[0].contain == 'X' && cell[4].contain == 'X' && cell[8].contain == 'X'|| cell[2].contain == 'X' && cell[4].contain == 'X' && cell[6].contain == 'X') { winer = 'X'; } else if (cell[0].contain == 'O' && cell[4].contain == 'O' && cell[8].contain == 'O'|| cell[2].contain == 'O' && cell[4].contain == 'O' && cell[6].contain == 'O') { winer = 'O'; } } //點(diǎn)擊鼠標(biāo) 在#字表格里面顯示一個(gè)隨機(jī)位置的的X or O public void setListenerForCells(Cell[] cell){ numberOfClick = 0;//點(diǎn)擊次數(shù)清零 for (int i = 0; i < cell.length; i++) { Cell temp = cell[i]; temp.setOnMouseClicked(e -> { if (winer == ' ') { if (whoseTurn == 'X' && e.getButton() == MouseButton.PRIMARY && temp.editable) { temp.setContain(1,1); temp.editable = false;//不可編輯 winer = ' '; whoseTurn = 'O';//下一次換回和 judgeWhoWin(cell);//判斷輸贏 if(winer == ' '){ numberOfClick++; if(numberOfClick == 9){ tf.setText("the game is a draw"); } else{ tf.setText(whoseTurn + "'s turn"); } } else{ tf.setText("Game is over, and the winner is "+ winer); } } else if (whoseTurn == 'O' && e.getButton() == MouseButton.PRIMARY && temp.editable) { temp.setContain(1,2); temp.editable = false;//不可編輯 winer = ' '; whoseTurn = 'X';//下一次換回和 judgeWhoWin(cell);//判斷輸贏 if(winer == ' '){ numberOfClick++; if(numberOfClick == 9){ tf.setText("the game is a draw"); } else{ tf.setText(whoseTurn + "'s turn"); } } else{ tf.setText("Game is over, and the winner is "+ winer); } } } }); } } class Cell extends BorderPane{ public char contain =' '; int num1 = 0,num2 = 0; public boolean editable = true; public Cell(int num1,int num2){ super.setPadding(new Insets(5)); super.setStyle("-fx-border-color: black"); super.setPrefSize(2000,2000); this.setContain(num1,num2); } public void setContain(int num1,int num2){ if(num1==1 && editable){ if(num2==1){ //構(gòu)建X面板 Line line1 = new Line(0,0,150,150); Line line2 = new Line(150,0,0,150); StackPane pane1 = new StackPane(); pane1.getChildren().addAll(line1,line2); super.setCenter(pane1); contain = 'X'; } else if(num2==2 && editable){ ///構(gòu)建O面板 Circle circle = new Circle(75);//半徑為75 circle.setFill(Color.WHITE);//填充為白色 circle.setStroke(Color.BLACK);//邊框?yàn)楹谏? StackPane pane2 = new StackPane(); pane2.getChildren().add(circle); super.setCenter(pane2); contain = 'O'; } } } } }
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專(zhuān)題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
multi-catch和try-catch異常處理知識(shí)點(diǎn)詳解
在本篇文章里我們給大家分享了一篇關(guān)于multi-catch和try-catch異常處理知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-11-11java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備
這篇文章主要介紹了java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備!具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Druid監(jiān)控分布式實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Druid監(jiān)控分布式實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java編程用兩個(gè)棧實(shí)現(xiàn)隊(duì)列代碼分享
這篇文章主要介紹了Java編程用兩個(gè)棧實(shí)現(xiàn)隊(duì)列代碼分享,具有一定參考價(jià)值,這里給大家分享下,供需要的朋友了解。2017-10-10運(yùn)行Jar包出現(xiàn)提示xxx中沒(méi)有主清單屬性報(bào)錯(cuò)問(wèn)題解決方法
這篇文章主要介紹了運(yùn)行Jar包出現(xiàn):xxx中沒(méi)有主清單屬性報(bào)錯(cuò),當(dāng)出現(xiàn)報(bào)錯(cuò):xxx中沒(méi)有主清單屬性,解決方法也很簡(jiǎn)單,在pom.xml配置中,加上相應(yīng)配置即可,需要的朋友可以參考下2023-08-08Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解
這篇文章主要為大家介紹了Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Java?axios與spring前后端分離傳參規(guī)范總結(jié)
這篇文章主要介紹了Java?axios與spring前后端分離傳參規(guī)范總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08如何使用Spring AOP預(yù)處理Controller的參數(shù)
這篇文章主要介紹了如何使用Spring AOP預(yù)處理Controller的參數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08