我正在制作一个Java纸牌游戏,现在我尝试为电脑玩家创造一个“大脑”。条件:
有3张牌(只有价值,不适合);
计算机播放器(CP)有6张卡;
赢得一轮CP必须击败桌上至少2张牌,或者它 必须击败1张牌并与另外2张牌进行平局;
当然,卡片组必须是最佳的。
实施例: 在桌子上是值为1,2,3的卡.CP具有值为1,1,3,2,5,6的卡。它必须选择值为2的卡来击败Card1,而不是选择值为3的卡来击败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);
}
答案 0 :(得分: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
}
}
你应该对你的Cardlist进行排序,以简化计算
答案 1 :(得分:0)
我认为你是否还需要正确的条件..
不确定但请检查此代码。
if (a > Score1)
{ //Score - value of the cards on the table
if (b > Score2 || c > Score3) {
choice1 = x;
choice2 = y;
choice3 = z; }
else if (b > Score3 || c > Score2) {
choice1 = x;
choice2 = y;
choice3 = z; }
}
我认为这应该有用......