2017-04-05 85 views
0

我制作了使用javafx的井字游戏。我是新来的java,我试图让胜利或抽签结束比赛。没有必要检查输赢是什么。当您无法继续播放时,我想让该文本结束。我尝试使用数组,但我不知道该怎么做。如何结束我的Javafx tic-tac-toe?

这是我的代码:

import java.util.ArrayList; 
    import javafx.application.Application; 
    import javafx.scene.Scene; 
    import javafx.scene.control.Button; 
    import javafx.scene.control.Label; 
    import javafx.scene.layout.BorderPane; 
    import javafx.scene.layout.GridPane; 
    import javafx.scene.text.Font; 
    import javafx.stage.Stage; 

    public class ticTacToe extends Application { 

private boolean turn; 
private int[][] locations; 

public RistinollaSovellus() { 
    turn = true; 
    locations = new int[3][3]; 

} 

public static void main(String[] args) { 
    launch(ticTacToe.class); 
} 

@Override 
public void start(Stage window) throws Exception { 
    boolean endGame = false; 

    BorderPane layout = new BorderPane(); 

    Label text = new Label("Turn: X"); 
    text.setFont(Font.font("Monospaced", 40)); 
    layout.setTop(text); 

    GridPane array = new GridPane(); 
    if (!endGame) { 

     for (int x = 1; x <= 3; x++) { 
      for (int y = 1; y <= 3; y++) { 
       Button btn = new Button(" "); 
       btn.setFont(Font.font("Monospaced", 40)); 
       array.add(nappi, x, y); 
       locations[x][y] = 0; 

       btn.setOnAction((event) -> { 
        if (btn.getText().equals(" ")) { 

         if (turn) { 
          btn.setText("X"); 
          text.setText("Turn: O"); 
          turn = false; 

         } else if (!turn) { 
          btn.setText("O"); 
          text.setText("Turn: X"); 
          turn = true; 
         } 

        } 
       }); 
      } 
     } 
    } 

    layout.setCenter(array); 

    Scene showing = new Scene(layout); 

    window.setScene(showing); 
    window.show(); 
} 

    } 
+0

使用一个计数器来跟上做出动作的次数。一旦移动发数量到达9比赛结束 – Sedrick

+0

@SedrickJefferson,如果有人连续得到3使用了所有9圈之前会发生什么? – Jonah

+0

您可以使用for循环,因为您知道游戏拥有的最大移动次数。你也可以使用while循环。在任何胜利条件下打破循环。 – Sedrick

回答

0

传递给btn.setOnAction()的参数是一个事件监听器和它的逻辑是每次用户点击该按钮时执行。

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ButtonBase.html#setOnAction-javafx.event.EventHandler-

上的按钮,单击要检查网格包含一个有效的井字棋配置。为此,您需要展开侦听器并使用location阵列检查网格上所有按钮的当前状态。

一旦细胞的有效组合被发现,你叫Platform.exit()停止该应用程序。

编辑:xy循环变量应该从0开始,上升到2,否则,则抛出ArrayIndexOutOfBoundsException。数组的第一个指数是0,而不是1

-1

我不知道你的意思,但我认为,如果你实现了游戏这么远一样,如果它的工作,因为它应该那么这将是很容易为你想出如何结束它。

看到你在这里可以做很多事情,如果任何玩家获胜,你可以只显示一个提示,说明玩家x赢了,并给出一个选项,要么退出或重新启动应用程序,如果一条领带可以做同样的事情。

技术上调用stop()方法来停止所有进程并结束游戏

+0

只需调用'停止()'是不行的,因为_Application#stop_包含一个空的身体,什么都不做,但希望您的应用程序覆盖它。 –