diff --git a/src/main/java/views/MainFrame.java b/src/main/java/views/MainFrame.java index 4b24ea1..ddc4797 100644 --- a/src/main/java/views/MainFrame.java +++ b/src/main/java/views/MainFrame.java @@ -13,8 +13,7 @@ public MainFrame() { super("Algolike"); - stepScheduler = new StepScheduler(); - var mainPanel = new MainPanel(stepScheduler, new Algo()); + var mainPanel = new MainPanel(new Algo()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainPanel.setVisible(true); diff --git a/src/main/java/views/MainPanel.java b/src/main/java/views/MainPanel.java index 9da7a1b..5901ecb 100644 --- a/src/main/java/views/MainPanel.java +++ b/src/main/java/views/MainPanel.java @@ -1,9 +1,6 @@ package views; -import controls.BotIntelligence; -import controls.StepScheduler; -import controls.TurnBot; -import controls.TurnPlayer; +import controls.*; import interfaces.IAttack; import resources.Algo; @@ -31,7 +28,7 @@ JPanel opponentButtonsPanel; JPanel opponentAttackerPanel; JPanel opponentPanel; - + AbstractGameState abstractGameState; TurnPlayer turnPlayer; TurnBot turnBot; /** @@ -45,7 +42,7 @@ int indexForOpponent = 0; private JPanel deckButtonPanel; - public MainPanel(StepScheduler stepScheduler, Algo algo) { + public MainPanel(Algo algo) { super(new BorderLayout()); myHandButtons = new ArrayList<>(); opponentHandButtons = new ArrayList<>(); @@ -69,8 +66,9 @@ turnPlayer = new TurnPlayer(algo); turnBot = new TurnBot(algo); + abstractGameState= turnPlayer; - if (!turnPlayer.isDeckLess()) { //デッキが存在する場合 + if (!abstractGameState.isDeckLess()) { //デッキが存在する場合 var cardButton = new JButton("deck"); cardButton.setPreferredSize(new Dimension(CARD_HEIGHT, CARD_WIDTH)); deckButtonPanel.add(cardButton); @@ -94,13 +92,15 @@ } void botBehave() { - turnBot.updateTurn(); + abstractGameState = turnBot; + abstractGameState.updateTurn(); + var bot = new BotIntelligence(turnBot); JOptionPane.showMessageDialog(null, "Botのターンです。"); var selectText = ""; var atk = 0; - if (!turnBot.isDeckLess()) { //デッキにカードが存在するとき + if (!abstractGameState.isDeckLess()) { //デッキにカードが存在するとき paintDrawCard();//デッキから引いたカードを描画する selectText = "Botはカードをドローしました。"; } else { @@ -119,8 +119,8 @@ var dec = bot.declareNumber(tar); JOptionPane.showMessageDialog(null, "Botは\"" + dec + "\"を宣言しました。"); - turnBot.attack(dec, atk, tar); - boolean isSucceed = turnBot.isSucceedLatestAttack(); + abstractGameState.attack(dec, atk, tar); + boolean isSucceed = abstractGameState.isSucceedLatestAttack(); String resultMessage = "Botのアタックは "; resultMessage += isSucceed ? "成功しました。" : "失敗しました。"; @@ -132,24 +132,24 @@ finishGame(); return; } - turnPlayer.updateTurn(); + abstractGameState.updateTurn(); playerBehave(); } void paintDrawCard() { - var deckTopCard = turnPlayer.getTopCard(); + var deckTopCard = abstractGameState.getTopCard(); - if (!turnPlayer.isDeckLess()) { //デッキが存在する場合にデッキトップのカードを表示する処理 + if (!abstractGameState.isDeckLess()) { //デッキが存在する場合にデッキトップのカードを表示する処理 var cardButton = new CardButton(deckTopCard.getKey().toString()); cardButton.setBounds(0, 100, CARD_WIDTH, CARD_HEIGHT); - if (turnPlayer.isATurn()) { + if (abstractGameState.isATurn()) { myHandAttackerPanel.add(cardButton); isDecidedAttacker = true; } else { cardButton.setText(CLOSED_SYMBOL); opponentAttackerPanel.add(cardButton); } - if (turnPlayer.getDeckNumber() == 1) { + if (abstractGameState.getDeckNumber() == 1) { deckButtonPanel.removeAll(); } } @@ -160,8 +160,8 @@ void repaintField() { - var myHands = turnPlayer.getMyHands(); - var opponentHands = turnBot.getOpponentHands(); + var myHands = abstractGameState.getMyHands(); + var opponentHands = abstractGameState.getOpponentHands(); /** * 初期化処理(する必要があるのかどうかは知らない) @@ -189,7 +189,7 @@ cardButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (!turnPlayer.isDeckLess()) return;//デッキがあるときは何も反応しないように + if (!abstractGameState.isDeckLess()) return;//デッキがあるときは何も反応しないように for (var my : myHandButtons) my.setEnabledSelection(false); cardButton.setEnabledSelection(true); var option = JOptionPane.showConfirmDialog(null, "このカードを使ってアタックをしますか?", "confirmation", 2); @@ -219,7 +219,7 @@ final int index = indexForOpponent; public void actionPerformed(ActionEvent e) { - if (!turnBot.isDeckLess()) isDecidedAttacker = true; + if (!abstractGameState.isDeckLess()) isDecidedAttacker = true; if (!isDecidedAttacker) { JOptionPane.showMessageDialog(null, "あなたの手札からアタックに使用するカードを選んでください. ", "Warn", JOptionPane.WARNING_MESSAGE); @@ -249,9 +249,9 @@ if (getDeclaredNumber != null) { //数字を宣言して、承認したとき guess = Integer.parseInt(getDeclaredNumber); var g = Integer.parseInt(getDeclaredNumber); - turnPlayer.attack(g, attacker, t); + abstractGameState.attack(g, attacker, t); - boolean isSucceed = turnPlayer.isSucceedLatestAttack(); + boolean isSucceed = abstractGameState.isSucceedLatestAttack(); String resultMessage = "あなたのアタックは"; resultMessage += isSucceed ? "成功しました。" : "失敗しました。"; @@ -287,12 +287,13 @@ } public void playerBehave() { + abstractGameState = turnPlayer; isDecidedAttacker = false; JOptionPane.showMessageDialog(null, "あなたのターンです。"); var selectText = ""; var atk = 0; - if (!turnPlayer.isDeckLess()) { //デッキにカードが存在するとき - selectText = "あなたは数字\"" + turnPlayer.getTopCard().getKey() + "\"のカードをドローしました。"; + if (!abstractGameState.isDeckLess()) { //デッキにカードが存在するとき + selectText = "あなたは数字\"" + abstractGameState.getTopCard().getKey() + "\"のカードをドローしました。"; } else { selectText = "アタックに使用するカードを手札から選んでください。"; } @@ -300,7 +301,7 @@ JOptionPane.showMessageDialog(null, selectText); - if (!turnPlayer.isDeckLess()) JOptionPane.showMessageDialog(null, "アタックする対象を相手の手札から選んでください。"); + if (!abstractGameState.isDeckLess()) JOptionPane.showMessageDialog(null, "アタックする対象を相手の手札から選んでください。"); } @@ -310,9 +311,9 @@ * */ boolean isGameOver() { - if (turnPlayer.isALose()) { + if (abstractGameState.isALose()) { return true; - } else if (turnPlayer.isBLose()) { + } else if (abstractGameState.isBLose()) { return true; } @@ -320,8 +321,8 @@ } void finishGame() { - var myHands = turnPlayer.getMyHands(); - var opponentHands = turnBot.getOpponentHands(); + var myHands = abstractGameState.getMyHands(); + var opponentHands = abstractGameState.getOpponentHands(); /** * 初期化処理(する必要があるのかどうかは知らない) @@ -361,9 +362,9 @@ //ここまでが相手のカードに関する処理 validate(); repaint(); - if (turnPlayer.isALose()) { + if (abstractGameState.isALose()) { JOptionPane.showMessageDialog(null, "Botが勝利しました。"); - } else if (turnBot.isBLose()) { + } else if (abstractGameState.isBLose()) { JOptionPane.showMessageDialog(null, "あなたが勝利しました。"); }