2

私はJavaカードゲームを作っていますが、今はコンピュータープレーヤーの「頭脳」を作ろうとしています。条件:

  • テーブルには 3 枚のカードがあります (値のみで、スーツではありません)。

  • コンピューター プレーヤー (CP) には 6 枚のカードがあります。

  • ラウンドに勝つには、CP がテーブルで少なくとも 2 枚のカード
    を倒すか、1 枚のカードを倒して別の 2 枚のカードでドローする必要があります。

  • もちろん、カードセットは最適でなければなりません。

例: テーブルには値 1、2、3 のカードがあります。CP には値 1、1、3、2、5、6 のカードがあります。値 3 のカードを選択するよりも、値 2 のカードを選択してカード 1 を倒す必要があります。 Card2 を打ち負かし、値 1 のカードを選択します。これは、すでに 2 枚のカードを打ち負かしているためです。今、次のコードを書きましたが、正しく動作しないか、まったく動作しません。

for (i = 0, j = i++, k = j++; i < oppHand.size() - 2 && j < oppHand.size() - 1 && k < oppHand.size(); i++) {

a = oppHand.get(i).getPower(); //value of card1 from CP hand
b = oppHand.get(j).getPower(); //value of card2 from CP hand
c = oppHand.get(k).getPower(); //value of card3 from CP hand

x = oppHand.indexOf(i);        //position of card1 in a CP hand
y = oppHand.indexOf(j);        //position of card2 in a CP hand
z = oppHand.indexOf(k);        //position of card3 in a CP hand

if (a > Score1 && b > Score2 ||  a> Score1 && c > Score3) {    //Score - value of the cards on the table
choice1 = x;
choice2 = y;
choice3 = z;}

else if (a > Score1 && b > Score3 || a > Score1 && c > Score2) {
choice1 = x;
choice2 = z;
choice3 = y;} ........

// moving cards from the CP hand to the table with assignment values to the piles
    validPower5 = oppHand.get(choice1).getPower();  
    discardPile5.add(0, oppHand.get(choice1));
    oppHand.remove(choice1);

    validPower6 = oppHand.get(choice2).getPower();  
    discardPile6.add(0, oppHand.get(choice2));
    oppHand.remove(choice2);

    validPower7 = oppHand.get(choice3).getPower();  
    discardPile7.add(0, oppHand.get(choice3));
    oppHand.remove(choice3);
                    }
4

2 に答える 2

0

このようなものは役に立ちますか?

sortCardsOnTable();//now Score1 <= Score2 <= Score2
sortOpponentCards();
boolean beatScore1 = false;
boolean beatScore2 = false;
int indexFirst = 0;
int indexSecond = 0;
int indexThird = 0;

for(int i = 0;i < oppHand.size();i++){
   Card c = oppHand.get(i);
   if(!beatScore1 && c.getPower() > Score1){
      indexFirst = i;
      beatScore1 = true;
   }
   else if(beatScore1 && c.getPower() > Score2){
      indexSecond = i;
      beatScore2 = true;
      indexThird = 1;//here compare with indexFirst so you dont pull the first card twice, just pull the first available card
   }
}

計算を簡単にするために、カードリストをソートする必要があります

于 2013-10-14T08:28:25.730 に答える