diff --git a/src/main/java/controls/StepScheduler.java b/src/main/java/controls/StepScheduler.java index d6a3424..2800ffc 100644 --- a/src/main/java/controls/StepScheduler.java +++ b/src/main/java/controls/StepScheduler.java @@ -47,7 +47,8 @@ @Override public Map.Entry getTopCard() { - return null; + if(isDeckLess())return null; + return algo.getDeck().get(0); } public boolean isDeckLess(){ diff --git a/src/main/java/views/CardButton.java b/src/main/java/views/CardButton.java index 939a5f3..3f96a32 100644 --- a/src/main/java/views/CardButton.java +++ b/src/main/java/views/CardButton.java @@ -30,13 +30,16 @@ switch (status){ case OPEN -> { this.setBackground(OPEN_COLOR); + this.setForeground(CLOSED_COLOR); } case CLOSED -> { this.setBackground(CLOSED_COLOR); + this.setForeground(OPEN_COLOR); } case MY_CLOSED -> { this.setContentAreaFilled(false); this.setFocusPainted(false); // used for demonstration + this.setForeground(OPEN_COLOR); } } } diff --git a/src/main/java/views/Constants.java b/src/main/java/views/Constants.java index b720729..1b31c7f 100644 --- a/src/main/java/views/Constants.java +++ b/src/main/java/views/Constants.java @@ -18,8 +18,9 @@ OpponentConfirm } public static String CLOSED_SYMBOL="?"; - public static int DECK_COUNT=11; + public static int DECK_COUNT=4; public static Color SELECTED_COLOR=Color.CYAN; + public static Color ATTACKER_COLOR=Color.RED; public static Color UNSELECTED_COLOR=Color.BLACK; public static Color OPEN_COLOR=Color.WHITE; public static Color CLOSED_COLOR=Color.BLACK; diff --git a/src/main/java/views/MainPanel.java b/src/main/java/views/MainPanel.java index 233bd65..c7c7ae1 100644 --- a/src/main/java/views/MainPanel.java +++ b/src/main/java/views/MainPanel.java @@ -25,9 +25,14 @@ Constants.Step currentStep; JPanel myHandButtonsPanel; JPanel opponentButtonsPanel; + /** + * アタックで使用するカードが既に決定しているか + */ + boolean isDecidedAttacker; int guess; int attacker; int target; + int indexForMyHands=0; int indexForOpponent =0; private JPanel deckButtonPanel; @@ -41,27 +46,42 @@ } void setButtons(IAttack stepScheduler) { + deckButtonPanel = new JPanel(); myHandButtonsPanel = new JPanel(); opponentButtonsPanel = new JPanel(); + // myHandButtonsPanel.setLayout(new BorderLayout()); + // myHandButtonsPanel.setLayout(null); var deckTopCard=stepScheduler.getTopCard(); var myHands = stepScheduler.getMyHands(); var opponentHands = stepScheduler.getOpponentHands(); + isDecidedAttacker=false; + + if(!stepScheduler.isDeckLess()){ //デッキが存在する場合にデッキトップのカードを引く処理 + + var cardButton =new CardButton(deckTopCard.getKey().toString()); + cardButton.setBounds(0,100,CARD_WIDTH,CARD_HEIGHT); + myHandButtons.add(cardButton); + myHandButtonsPanel.add(cardButton, BorderLayout.WEST); + isDecidedAttacker=true; + }else{ //デッキが存在しない場合、アタックに使用するカードを選択する処理 + + } if(!stepScheduler.isDeckLess()){ //デッキが存在する場合 + var top=stepScheduler.getTopCard(); - - var cardButton =new JButton("deck"); cardButton.setPreferredSize(new Dimension(CARD_HEIGHT,CARD_WIDTH)); deckButtonPanel.add(cardButton); }else { - var option = JOptionPane.showConfirmDialog(null, "Select This Card?", "confirmation", 2); + } + indexForMyHands=0; //選択可能な自分のカードのキーを取得 selectableMyHandKeys = myHands.stream(). - filter(x -> !x.getValue()).//非公開のカードを抽出 + filter(x -> !x.getValue()).//その中から非公開のカードを抽出 map(x -> x.getKey()).toList();//カードのリストからキーのリストへ変換 for (var i : myHands) { var cardButton = new CardButton(i.getKey().toString()); @@ -69,15 +89,22 @@ // if (!selectableMyHandKeys.contains(i.getKey())) cardButton.setEnabled(false); myHandButtons.add(cardButton); myHandButtonsPanel.add(cardButton, BorderLayout.WEST); + final var a=indexForMyHands;//actionPerformedの中に書くと、クリックされて初めて、回しきったindexForMyHandsを参照してしまうため、ここで一時変数に格納する cardButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //if(currentStep!=Step.SelectMyHands)return; cardButton.setEnabledSelection(true); var option = JOptionPane.showConfirmDialog(null, "Attack with This Card?", "confirmation", 2); + cardButton.setEnabledSelection(false); + if (option == JOptionPane.YES_OPTION){ + attacker=a; + isDecidedAttacker=true; + } } }); + indexForMyHands++; } //相手のカードに関する処理 @@ -89,7 +116,11 @@ cardButton.addActionListener(new ActionListener() { final int index=indexForOpponent; public void actionPerformed(ActionEvent e) { - + if(!isDecidedAttacker){ + JOptionPane.showMessageDialog(null, "Select Attacker from Your Hands. ", "Warn", + JOptionPane.WARNING_MESSAGE); + return; + } var baseColor= cardButton.getBackground(); // cardButton.setBackground(SELECTED_COLOR); cardButton.setEnabledSelection(true); @@ -110,7 +141,7 @@ null, optionsToChoose, optionsToChoose[0]); - if(getDeclaredNumber!=null) { + if(getDeclaredNumber!=null) { //数字を宣言して、承認したとき guess = Integer.parseInt(getDeclaredNumber); var g= Integer.parseInt(getDeclaredNumber); stepScheduler.Attack(g, attacker, t); @@ -139,9 +170,17 @@ add(deckButtonPanel,BorderLayout.WEST); + //add(myHandButtonsPanel, BorderLayout.SOUTH); add(myHandButtonsPanel, BorderLayout.SOUTH); + add(opponentButtonsPanel, BorderLayout.NORTH); setStep(Step.SelectOpponentHands); + + //試行錯誤用 ->やりたいことはできた +// myHandButtonsPanel.removeAll(); +// for(var mh : myHandButtons){ +// myHandButtonsPanel.add(mh); +// } } void setStep(Step step) { @@ -166,6 +205,27 @@ } } void update(IAttack iAttack){ + myHandButtonsPanel.removeAll(); + //選択可能な自分のカードのキーを取得 + selectableMyHandKeys = iAttack.getMyHands().stream(). + filter(x -> !x.getValue()).//その中から非公開のカードを抽出 + map(x -> x.getKey()).toList();//カードのリストからキーのリストへ変換 + for (var i : iAttack.getMyHands()) { + var cardButton = new CardButton(i.getKey().toString()); + cardButton.setStatus(i.getValue()? CardButton.Status.OPEN: CardButton.Status.MY_CLOSED); + // if (!selectableMyHandKeys.contains(i.getKey())) cardButton.setEnabled(false); + myHandButtons.add(cardButton); + myHandButtonsPanel.add(cardButton, BorderLayout.WEST); + cardButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //if(currentStep!=Step.SelectMyHands)return; + cardButton.setEnabledSelection(true); + var option = JOptionPane.showConfirmDialog(null, "Attack with This Card?", "confirmation", 2); + cardButton.setEnabledSelection(false); + } + }); + } myHandButtons.stream().forEach(x -> { // x.setEnabled(false);