I'm making a turn-based fighting game that uses javafx for its GUI, but it keeps freezing when I run the fight menu. When I run the fight, I want to run through a list of all the characters that are in play and, while the player or the computer still have a living character, loop the fight. The fight is a check for whether or not the player is the character in that position of the list of all the characters (and also checks to make sure the player doesn't move multiple times in a row if the character is a repeat) if it is, then the GUI should wait for user input, and if not then the computer moves. However, no matter what I try to do, the GUI just ends up freezing once the menu loads. I'm using a separate class to switch scenes around and all of the menus are in classes of their own.
Here is the driver, the main class that switches around all of the scenes (keep in mind this is not fully done so there are some cases that are just empty)
package runner;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import menus.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import Misc.Character;
import Misc.Menu;
import Misc.Move;
public class Driver extends Application implements EventHandler<ActionEvent>{
public static Stage stg;
public Stage fightStg;
private Menu currMenu;
public MainMenu home;
public SinglePlayerMenu sp;
public MultiplayerMenu1 mpm1;
public MultiplayerMenu2 mpm2;
public AchievementsMenu am;
public EditRosterMenu er;
public ChooseOpponentMenu cp;
public FightMenuPVC fmpvc;
public FightMenuPVP fmpvp;
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage){
stg = stage;
stg.setTitle("Faction Fighters");
stg.setResizable(false);
stg.setWidth(1000);
stg.setHeight(750);
home = new MainMenu(this);
stg.setScene(home.getScene());
currMenu = home;
stg.show();
}
//Used to switch between scenes
@Override
public void handle(ActionEvent event){
Button button = (Button)event.getSource();
switch(button.getText()){
case "Single Player":
if(sp == null) {
sp = new SinglePlayerMenu(this);
}
stg.setScene(sp.getScene());
currMenu = sp;
break;
case "Multiplayer":
if(mpm1 == null) {
mpm1 = new MultiplayerMenu1(this);
}
stg.setScene(mpm1.getScene());
currMenu = mpm1;
break;
case "Finish":
if(mpm2 == null) {
mpm2 = new MultiplayerMenu2(this);
}
stg.setScene(mpm2.getScene());
currMenu = mpm2;
break;
case "Achievements":
if(am == null) {
am = new AchievementsMenu(this);
}
stg.setScene(am.getScene());
currMenu = am;
break;
case "Edit Roster":
if(er == null){
er = new EditRosterMenu(this);
}
stg.setScene(er.getScene());
currMenu = er;
break;
case "Choose Opponent":
if(cp == null){
cp = new ChooseOpponentMenu(this);
}
stg.setScene(cp.getScene());
currMenu = cp;
break;
case "Fight!": //PvC fight menu
if(fmpvc == null){
fmpvc = new FightMenuPVC(this);
}
break;
case "FIGHT": //PvP fight menu
if(fmpvp == null){
fmpvp = new FightMenuPVP(this);
}
stg.setScene(fmpvp.getScene());
currMenu = fmpvp;
break;
case "Continue":
currMenu = currMenu.getParent();
stg.setScene(currMenu.getScene());
stg.show();
break;
case "Claim Rewards":
break;
case "Back to Main Menu":
stg.setScene(home.getScene());
currMenu = home;
break;
case "Back":
currMenu = currMenu.getParent();
stg.setScene(currMenu.getScene());
break;
case "Quit":
stg.close();
break;
}
}
public Menu getCurrMenu() {
return currMenu;
}
}
And this is the code for the menu I'm having trouble with:
package menus;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import Misc.Character;
import Misc.Menu;
import Misc.Move;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import runner.Driver;
public class FightMenuPVC implements Menu {
public Scene sc;
public Menu par;
public static EventHandler<ActionEvent> handler;
public GridPane men;
public VBox everything;
public ScrollPane battleLog;
public TextArea bLog;
public static Text pTeamLab;
public static Text cpuLab;
public static HBox plyrBar;
public static HBox cpuBar;
public static Text moveLab;
public static TextField moveInput;
public static Button mInput;
public static GridPane UI;
public static ImageView f1;
public static ImageView f2;
public static ImageView f3;
public static ImageView f4;
public static ArrayList<ImageView> f = new ArrayList<>();
public static HBox fTeam;
public static ImageView e1;
public static ImageView e2;
public static ImageView e3;
public static ImageView e4;
public static ArrayList<ImageView> e = new ArrayList<>();
public static HBox eTeam;
public static ArrayList<String> pTeam = new ArrayList<>();
public static ArrayList<Character> playerTeam = new ArrayList<>();
public static ArrayList<String> cTeam = new ArrayList<>();
public static ArrayList<Character> cpuTeam = new ArrayList<>();
public static File doc = new File("res/curTeam.txt");
public static ArrayList<Character> roster = new ArrayList<>();
public static ArrayList<Move> allMoves = new ArrayList<>();
public static ArrayList<Move> burstMoves = new ArrayList<>();
public static ArrayList<Move> hitzeldMoves = new ArrayList<>();
public static ArrayList<Move> ignisMoves = new ArrayList<>();
public static ArrayList<Move> erholenMoves = new ArrayList<>();
public static ArrayList<Move> aquilusMoves = new ArrayList<>();
public static ArrayList<Move> douseMoves = new ArrayList<>();
public static ArrayList<Move> glacieaMoves = new ArrayList<>();
public static ArrayList<Move> dropMoves = new ArrayList<>();
public static ArrayList<Move> roseMoves = new ArrayList<>();
public static ArrayList<Move> fillipaMoves = new ArrayList<>();
public static ArrayList<Move> demetraMoves = new ArrayList<>();
public static ArrayList<Move> floraMoves = new ArrayList<>();
public static ArrayList<Move> raitoMoves = new ArrayList<>();
public static ArrayList<Move> borutoMoves = new ArrayList<>();
public static ArrayList<Move> thunderMoves = new ArrayList<>();
public static ArrayList<Move> shockMoves = new ArrayList<>();
public static Button forfeit;
public static HBox moveStuff;
public Character gettingMove;
public static Stage finScreen;
public static Scene finScn;
public static GridPane fin;
public Text winLab;
public static Button rematch;
public static Button cont;
public Stage fightStg;
public Scene getScene() {
return sc;
}
public Menu getParent() {
return par;
}
public FightMenuPVC(Driver d) {
// Establishes parent
par = d.getCurrMenu();
handler = d;
// Creates all of the moves
allMoves.add(new Move("Fire Strike", 50, 90, "Fire"));
allMoves.add(new Move("Wisp Whip", 60, 80, "Fire"));
allMoves.add(new Move("Ignite", 0, 90, "Normal")); // 10HP DoT
allMoves.add(new Move("Tackle", 50, 85, "Normal"));
allMoves.add(new Move("Erupt", 90, 70, "Fire")); // takes 40% to self if it works
allMoves.add(new Move("Heat Up", 0, 90, "Normal")); // increase self speed by 20
allMoves.add(new Move("Body Slam", 50, 80, "Normal"));
allMoves.add(new Move("Explosion", 70, 70, "Fire"));
allMoves.add(new Move("Flame Shield", 0, 90, "Normal")); // buff team defense by 30%
allMoves.add(new Move("Spirit Strike", 60, 85, "Normal"));
allMoves.add(new Move("Fireball", 50, 90, "Fire"));
allMoves.add(new Move("Invigorate", 0, 90, "Normal")); // heal team 20% and buff speed by 10
allMoves.add(new Move("Water Strike", 50, 90, "Water"));
allMoves.add(new Move("Geyser", 70, 80, "Water"));
allMoves.add(new Move("Flash Freeze", 0, 90, "Normal")); // debuff enemy speed by 10
allMoves.add(new Move("Power Punch", 50, 90, "Normal"));
allMoves.add(new Move("Hydro Gun", 70, 85, "Water"));
allMoves.add(new Move("Cool Down", 0, 90, "Normal")); // 10% heal for team
allMoves.add(new Move("Shoulder Charge", 60, 85, "Normal"));
allMoves.add(new Move("Ice Spike", 70, 80, "Water"));
allMoves.add(new Move("Ice Wall", 0, 90, "Normal")); // buff team defense by 15
allMoves.add(new Move("Icicle Shower", 55, 85, "Water"));
allMoves.add(new Move("Health Drop", 0, 90, "Normal")); // heal 25% health of target
allMoves.add(new Move("Healing Rain", 0, 90, "Normal")); // heal team for 20% health
allMoves.add(new Move("Thorn Whip", 50, 90, "Plant"));
allMoves.add(new Move("Petal Strike", 70, 80, "Plant"));
allMoves.add(new Move("Photosynthesis", 0, 90, "Normal")); // buff team speed by 10
allMoves.add(new Move("Thump", 50, 90, "Normal"));
allMoves.add(new Move("Leaf Charge", 75, 80, "Plant"));
allMoves.add(new Move("Ingrain", 50, 90, "Plant")); // heal 35 health if it works
allMoves.add(new Move("Clobber", 60, 90, "Normal"));
allMoves.add(new Move("Earth Power", 80, 80, "Plant"));
allMoves.add(new Move("Earth Barrier", 0, 90, "Normal")); // buff team defense by 5
allMoves.add(new Move("Stem Whack", 50, 90, "Plant"));
allMoves.add(new Move("Convalesce", 0, 90, "Normal")); // heal 25% of someone
allMoves.add(new Move("Earth's Blessing", 0, 90, "Normal")); // heal 20% and buff speed by 5 for team
allMoves.add(new Move("Zap", 50, 90, "Electric"));
allMoves.add(new Move("Thunder Strike", 70, 80, "Electric"));
allMoves.add(new Move("Charge Up", 0, 90, "Normal")); // buff team speed by 5
allMoves.add(new Move("Quick Chop", 50, 90, "Normal"));
allMoves.add(new Move("Lightning Chop", 70, 85, "Electric"));
allMoves.add(new Move("Reenergize", 0, 90, "Normal")); // heal self for 20%
allMoves.add(new Move("Battle Ram", 60, 90, "Normal"));
allMoves.add(new Move("Lightning Charge", 80, 85, "Electric"));
allMoves.add(new Move("Thunder Storm", 0, 25, "Normal")); // instakill if it works
allMoves.add(new Move("Strike Rune", 70, 85, "Normal"));
allMoves.add(new Move("Health Rune", 0, 90, "Normal")); // heal 30% health of target
allMoves.add(new Move("Revive Rune", 0, 70, "Normal")); // rez target
// Movesets for all characters
makeMoveSet("Fire Strike", "Wisp Whip", "Ignite", burstMoves);
makeMoveSet("Tackle", "Erupt", "Heat Up", hitzeldMoves);
makeMoveSet("Body Slam", "Time Bomb", "Flame Shield", ignisMoves);
makeMoveSet("Spirit Strike", "Fireball", "Invigorate", erholenMoves);
makeMoveSet("Water Strike", "Geyser", "Flash Freeze", aquilusMoves);
makeMoveSet("Power Punch", "Hydro Gun", "Cool Down", douseMoves);
makeMoveSet("Shoulder Charge", "Ice Spike", "Ice Wall", glacieaMoves);
makeMoveSet("Icicle Shower", "Health Drop", "Healing Rain", dropMoves);
makeMoveSet("Thorn Whip", "Petal Strike", "Photosynthesis", roseMoves);
makeMoveSet("Thump", "Leaf Charge", "Ingain", fillipaMoves);
makeMoveSet("Clobber", "Earth Power", "Earth Barrier", demetraMoves);
makeMoveSet("Stem Whack", "Convalesce", "Earth's Blessing", floraMoves);
makeMoveSet("Zap", "Thunder Strike", "Charge Up", raitoMoves);
makeMoveSet("Quick Chop", "Lightning Chop", "Reenergize", borutoMoves);
makeMoveSet("Battle Ram", "Lightning Charge", "Thunder Storm", thunderMoves);
makeMoveSet("Strike Rune", "Health Rune", "Revive Rune", shockMoves);
// Adds all of the roster
roster.add(new Character("Burst", 1, 250, 250, 90, 45, 70, 0, "Fire", burstMoves));
roster.add(new Character("Hitzeld", 1, 350, 350, 50, 60, 50, 0, "Fire", hitzeldMoves));
roster.add(new Character("Ignis", 1, 450, 450, 60, 80, 35, 0, "Fire", ignisMoves));
roster.add(new Character("Erholen", 1, 300, 300, 65, 50, 65, 0, "Fire", erholenMoves));
roster.add(new Character("Aquilus", 1, 300, 300, 80, 60, 65, 0, "Water", aquilusMoves));
roster.add(new Character("Douse", 1, 375, 375, 50, 60, 40, 0, "Water", douseMoves));
roster.add(new Character("Glaciea", 1, 400, 400, 40, 90, 30, 0, "Water", glacieaMoves));
roster.add(new Character("Drop", 1, 350, 350, 50, 70, 60, 0, "Water", dropMoves));
roster.add(new Character("Rose", 1, 200, 200, 80, 40, 80, 0, "Plant", roseMoves));
roster.add(new Character("Fillipa", 1, 350, 350, 50, 70, 60, 0, "Plant", fillipaMoves));
roster.add(new Character("Demetra", 1, 500, 500, 30, 75, 45, 0, "Plant", demetraMoves));
roster.add(new Character("Flora", 1, 300, 300, 60, 50, 70, 0, "Plant", floraMoves));
roster.add(new Character("Raito", 1, 350, 350, 75, 30, 75, 0, "Electric", raitoMoves));
roster.add(new Character("Boruto", 1, 400, 400, 60, 55, 55, 0, "Electric", borutoMoves));
roster.add(new Character("Thunder", 1, 500, 500, 40, 75, 20, 0, "Electric", thunderMoves));
roster.add(new Character("Shock", 1, 400, 400, 50, 60, 50, 0, "Electric", shockMoves));
// Creates the Player's team
try {
String line = "";
BufferedReader teamGet = new BufferedReader(new FileReader(doc));
while ((line = teamGet.readLine()) != null) {
pTeam.add(line);
}
teamGet.close();
} catch (FileNotFoundException ex) {
System.out.println("Cannot open file: " + doc.getName());
} catch (IOException ex) {
System.out.println("Error reading file: " + doc.getName());
}
for (int i = 0; i < pTeam.size(); i++) {
for (int j = 0; j < roster.size(); j++) {
if (pTeam.get(i).equalsIgnoreCase(roster.get(j).getName())) {
playerTeam.add(roster.get(j));
}
}
}
// Creates the Opponent's Team
File dct = new File("res/opponent.txt");
try {
String line = "";
BufferedReader teamGet = new BufferedReader(new FileReader(dct));
while ((line = teamGet.readLine()) != null) {
cTeam.add(line);
}
teamGet.close();
} catch (FileNotFoundException ex) {
System.out.println("Cannot open file: " + dct.getName());
} catch (IOException ex) {
System.out.println("Error reading file: " + dct.getName());
}
for (int i = 0; i < cTeam.size(); i++) {
for (int j = 0; j < roster.size(); j++) {
if (cTeam.get(i).equalsIgnoreCase(roster.get(j).getName())) {
cpuTeam.add(roster.get(j));
}
}
}
// Creates GUI
// Sets up menu
men = new GridPane();
men.setAlignment(Pos.CENTER);
men.setStyle("-fx-background-color: maroon");
// Gets player's sprites
for (String s : pTeam) {
f.add(new ImageView(new Image("file:res/" + s + ".png")));
}
f1 = f.get(0);
f1.setFitWidth(100);
f1.setPreserveRatio(true);
f2 = f.get(1);
f2.setFitWidth(100);
f2.setPreserveRatio(true);
f3 = f.get(2);
f3.setFitWidth(100);
f3.setPreserveRatio(true);
f4 = f.get(3);
f4.setFitWidth(100);
f4.setPreserveRatio(true);
fTeam = new HBox(10);
fTeam.getChildren().add(f1);
fTeam.getChildren().add(f2);
fTeam.getChildren().add(f3);
fTeam.getChildren().add(f4);
// Player bar
pTeamLab = new Text("Player: ");
pTeamLab.setFont(Font.font("Times New Roman", FontWeight.NORMAL, 20));
pTeamLab.setFill(Color.GOLD);
plyrBar = new HBox(10);
plyrBar.getChildren().add(pTeamLab);
plyrBar.getChildren().add(fTeam);
// Gets enemy sprites
for (String s : cTeam) {
e.add(new ImageView(new Image("file:res/" + s + ".png")));
}
e1 = e.get(0);
e1.setFitWidth(100);
e1.setPreserveRatio(true);
e2 = e.get(1);
e2.setFitWidth(100);
e2.setPreserveRatio(true);
e3 = e.get(2);
e3.setFitWidth(100);
e3.setPreserveRatio(true);
e4 = e.get(3);
e4.setFitWidth(100);
e4.setPreserveRatio(true);
eTeam = new HBox(10);
eTeam.getChildren().add(e1);
eTeam.getChildren().add(e2);
eTeam.getChildren().add(e3);
eTeam.getChildren().add(e4);
// Computer bar
cpuLab = new Text("Computer: ");
cpuLab.setFont(Font.font("Times New Roman", FontWeight.NORMAL, 20));
cpuLab.setFill(Color.GOLD);
cpuBar = new HBox(10);
cpuBar.getChildren().add(cpuLab);
cpuBar.getChildren().add(eTeam);
// Creates the battle log
bLog = new TextArea();
bLog.setEditable(false);
bLog.setPrefSize(545, 345);
battleLog = new ScrollPane(bLog);
battleLog.setStyle("-fx-background-color: maroon");
battleLog.setPrefSize(550, 350);
// Sets up UI
UI = new GridPane();
UI.setAlignment(Pos.CENTER);
UI.setStyle("-fx-background-color: maroon");
//Stuff for move input
moveLab = new Text("Enter the move you want here: ");
moveLab.setFill(Color.GOLD);
moveLab.setFont(Font.font("Times New Roman", FontWeight.NORMAL, 16));
moveInput = new TextField();
mInput = new Button("Submit");
mInput.setPrefSize(125, 50);
// Grid for anything move related
moveStuff = new HBox(20);
moveStuff.setAlignment(Pos.CENTER);
moveStuff.getChildren().add(moveLab);
moveStuff.getChildren().add(moveInput);
moveStuff.getChildren().add(mInput);
// Add UI elements into UI
UI.add(moveStuff, 0, 0);
UI.add(plyrBar, 0, 1);
UI.add(cpuBar, 0, 2);
// Forfeit button
forfeit = new Button("Forfeit");
forfeit.setPrefSize(100, 50);
forfeit.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
endScreen("You Lose!");
}
});
// Adds everything into VBox
everything = new VBox(20);
everything.setAlignment(Pos.CENTER);
everything.getChildren().add(battleLog);
everything.getChildren().add(UI);
everything.getChildren().add(forfeit);
// Adds VBox into menu pane
men.add(everything, 0, 0);
// Adds menu into scene
sc = new Scene(men);
//Shows stage
fightStg = new Stage();
fightStg.setResizable(false);
fightStg.setWidth(1250);
fightStg.setHeight(1000);
//Fight after showing
pvcFight();
}
// Fight Related Methods
private int damage(int attack, int defense, int power) {
int num = (attack) + ((attack) * (power / 100)) - (defense);
return num;
}
private void makeMoveSet(String x, String y, String z, ArrayList<Move> moves) {
for (Move m : allMoves) {
if (m.getName().equals(x) || m.getName().equals(y) || m.getName().equals(z)) {
moves.add(m);
}
}
}
private void setFightOrder(ArrayList<Character> chars) {
boolean loop = true;
Character temp;
while (loop) {
loop = false;
for (int i = 0; i < chars.size() - 1; i++) {
if (chars.get(i).getSpeed() < chars.get(i + 1).getSpeed()) {
temp = chars.get(i);
chars.set(i, chars.get(i + 1));
chars.set(i + 1, temp);
loop = true;
}
}
}
}
private boolean isPlyr(Character c) {
boolean val = false;
for (Character cht : playerTeam) {
if (cht.equals(c)) {
val = true;
}
}
return val;
}
private boolean pLive() {
boolean val = true;
int cnt = 0;
for (Character c : playerTeam) {
if (c.getHealth() <= 0) {
cnt++;
}
}
if (cnt != playerTeam.size()) {
val = true;
} else {
val = false;
}
return val;
}
private boolean cpuLive() {
boolean val = true;
int cnt = 0;
for (Character c : cpuTeam) {
if (c.getHealth() <= 0) {
cnt++;
}
}
if (cnt != cpuTeam.size()) {
val = true;
} else {
val = false;
}
return val;
}
private String getCharMove(Character c, int mNum) {
ArrayList<Move> charMoves = c.getMoves();
return charMoves.get(mNum).getName();
}
private boolean isWeak(Character c, String type) {
String cType = c.getType();
boolean weak = false;
if (cType.equalsIgnoreCase("Fire") && type.equalsIgnoreCase("Water")) {
weak = true;
}
if (cType.equalsIgnoreCase("Water") && type.equalsIgnoreCase("Electricity")) {
weak = true;
}
if (cType.equalsIgnoreCase("Electricity") && type.equalsIgnoreCase("Plant")) {
weak = true;
}
if (cType.equalsIgnoreCase("Plant") && type.equalsIgnoreCase("Fire")) {
weak = true;
}
return weak;
}
private int round(double d) {
double result = d - (int) (d);
if (result < .5) {
return (int) (d);
} else {
return (int) (d + 1);
}
}
private void makeGenericMove(Character acting, Character receive, Move m) {
int rando = 0;
Random randy = new Random();
double dmg = 0;
rando = randy.nextInt(101);
if (rando <= allMoves.get(0).getAccuracy()) {
dmg = damage(acting.getAttack(), receive.getDefense(), allMoves.get(0).getPower());
if (isWeak(receive, allMoves.get(0).getType())) {
dmg = dmg * 1.5;
}
receive.setHealth(receive.getHealth() - round(dmg));
bLog.appendText("\n" + receive.getName() + " lost " + round(dmg) + " health!");
} else {
bLog.appendText("\n" + acting.getName() + " missed!");
}
}
private void doMove(Character acting, Character receive, String moveName) {
//Performs move on person
}
/*
* Make it wait for player input
*
* Make player wait for input from text field http://stackoverflow.com/questions/7229788/how-to-wait-for-input-in-a-text-field
*
*/
Object waiting = new Object();
public String input;
public void pvcFight() {
Driver.stg.hide();
fightStg = new Stage();
fightStg.setTitle("Fight!");
fightStg.setResizable(false);
fightStg.setWidth(1000);
fightStg.setHeight(750);
ArrayList<Character> allChars = new ArrayList<>();
int randoMve = 0;
int randoChr = 0;
Random randy = new Random();
int i = 0;
bLog.appendText("START FIGHT!");
// Puts all characters in play in an array list
for (Character c : playerTeam) {
allChars.add(c);
}
for (Character c : cpuTeam) {
allChars.add(c);
}
// Sets fight order
setFightOrder(allChars);
synchronized(waiting){
while ((pLive() && cpuLive())){
fightStg.setScene(sc);
fightStg.show();
// Checks each character
if (isPlyr(allChars.get(i)) && allChars.get(i) != allChars.get((i + 1) % allChars.size())) { // check player's character
gettingMove = null;
bLog.appendText("\nYour " + allChars.get(i).getName() + "'s turn.");
bLog.appendText("\nWhat move will you perform:");
for(int j = 0; j < allChars.get(i).getMoves().size(); j++){ // prints out the list of moves that can be performed
bLog.appendText("\n\n" + allChars.get(i).getMoves().get(j).getName());
}
mInput.setOnAction(new EventHandler<ActionEvent>(){
@Override public void handle(ActionEvent e){
input = moveInput.getText();
synchronized(waiting){
waiting.notify();
}
}
});
try {
synchronized(waiting){
waiting.wait();
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else { // cpu moves
randoMve = randy.nextInt(3);
randoChr = randy.nextInt(4);
bLog.appendText("\nEnemy " + allChars.get(i).getName() + "'s Turn");
bLog.appendText("\nEnemy " + allChars.get(i).getName() + " performed " + getCharMove(allChars.get(i), randoMve));
doMove(allChars.get(i), playerTeam.get(randoChr), getCharMove(allChars.get(i), randoMve));
fightStg.setScene(sc);
fightStg.show();
}
i++;
if (i == allChars.size()) {
i = 0;
}
}
// Displays screen when someone loses
if (pLive() == false) {
endScreen("You Lose!");
}
if (cpuLive() == false) {
endScreen("You Win!");
}
fightStg.setScene(sc);
fightStg.show();
}
}
public void endScreen(String txt) {
finScreen = new Stage();
finScreen.setTitle("");
finScreen.setResizable(false);
finScreen.setWidth(500);
finScreen.setHeight(325);
fin = new GridPane();
fin.setStyle("-fx-background-color: maroon");
fin.setAlignment(Pos.CENTER);
winLab = new Text(txt);
winLab.setFont(Font.font("Times New Roman", FontWeight.NORMAL, 20));
winLab.setFill(Color.GOLD);
rematch = new Button("Rematch");
rematch.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
bLog.setText(null);
pvcFight();
}
});
cont = new Button("Continue");
cont.setOnAction(handler);
fin.add(winLab, 0, 0);
fin.add(rematch, 0, 1);
fin.add(cont, 0, 2);
finScn = new Scene(fin);
finScreen.setScene(finScn);
finScreen.show();
}
}