📄 gameai.java
字号:
/** * AI Player * * @author Sam Cavenagh * @version 5/12/02 * * Website: http://home.pacific.net.au/~cavenagh/SH/ * Email: cavenaghweb@hotmail.com */public class GameAI{ boolean seven; boolean nine; public GameAI(boolean seven, boolean nine) { this.seven = seven; this.nine = nine; } public String basicMove(Hand hand, Card[] pile, int pilelength) { //determining top card Card top; if(pile[0] == null){ return playlowest(hand, 15, null); }else if(nine == true && pile[0].getValue() == 9){ int topcount = 0; for(int i = 0; i < 52; i++){ if(pile[i] == null){ return playlowest(hand, 15, null); } if(pile[i].getValue() == 9) topcount++; else break; } top = pile[topcount]; }else top = pile[0]; if(seven == true && top.getValue() == 7){ return playlowest(hand, 6, top); }else{//normal play return playhigherthan(hand, top); } } private String playlowest(Hand hand, int lowest, Card card) { //System.out.println("PlayLowest - lower than:" + lowest); int lowestcount = 0;//number of cards with lowest value int tencount = 0; int twocount = 0; int ninecount = 0; if(hand.length() > 1){//if cards in hand //determining which card to play for(int n = 0; n < hand.length() - 1; n++){ if(nine == true && hand.getCard(n).getValue() == 9){ ninecount++; }else if(hand.getCard(n).getValue() == 10){ tencount++; }else if(hand.getCard(n).getValue() == 2){ twocount++; }else if(hand.getCard(n).getValue() < lowest){ lowest = hand.getCard(n).getValue(); lowestcount = 1; }else if(hand.getCard(n).getValue() == lowest){ lowestcount++; } } //playing card selected if(lowestcount == 0){//no card other than 10, 2 and 9 (if nine is true) or player must pickup if(twocount != 0) return commandcreator("turn:", hand, 2, twocount); else if(ninecount != 0) return commandcreator("turn:", hand, 9, ninecount); else if(tencount != 0) return commandcreator("turn:", hand, 10, tencount); else return ("turn:pickup:"); }else{//play as many as there is of the lowest card return commandcreator("turn:", hand, lowest, lowestcount); } }else if(hand.isFaceUp()){ //determining which card to play for(int n = 0; n < 3; n++){ if(hand.getFaceUp(n) != null){ if(nine == true && hand.getFaceUp(n).getValue() == 9){ ninecount++; }else if(hand.getFaceUp(n).getValue() == 10){ tencount++; }else if(hand.getFaceUp(n).getValue() == 2){ twocount++; }else if(hand.getFaceUp(n).getValue() < lowest){ lowest = hand.getFaceUp(n).getValue(); lowestcount = 1; }else if(hand.getFaceUp(n).getValue() == lowest){ lowestcount++; } } } //playing card selected if(lowestcount == 0){//no card other than 10, 2 and 9 (if nine is true) or player must pickup if(twocount != 0) return commandcreatorFU("turn:faceup:", hand, 2, twocount); else if(ninecount != 0) return commandcreatorFU("turn:faceup:", hand, 9, ninecount); else if(tencount != 0) return commandcreatorFU("turn:faceup:", hand, 10, tencount); else return ("turn:pickup:"); }else{//play as many as there is of the lowest card return commandcreatorFU("turn:faceup:", hand, lowest, lowestcount); } }else return facedown(hand, card); } private String playhigherthan(Hand hand, Card card) { //System.out.println("Play higher than: " + card.getValue()); int lowest = 15; int lowestcount = 0;//number of cards with lowest value int tencount = 0; int twocount = 0; int ninecount = 0; if(hand.length() > 1){//if cards in hand //determining which card to play for(int n = 0; n < hand.length() - 1; n++){ //System.out.println("Card " + n + " = " + hand.getCard(n).getValue()); if(nine == true && hand.getCard(n).getValue() == 9){ ninecount++; }else if(hand.getCard(n).getValue() == 10){ tencount++; }else if(hand.getCard(n).getValue() == 2){ twocount++; }else if(hand.getCard(n).getValue() < lowest && hand.getCard(n).getValue() >= card.getValue()){ lowest = hand.getCard(n).getValue(); lowestcount = 1; }else if(hand.getCard(n).getValue() == lowest){ lowestcount++; } } //playing card selected if(lowestcount == 0){//no card other than 10, 2 and 9 (if nine is true) or player must pickup if(twocount != 0) return commandcreator("turn:", hand, 2, twocount); else if(ninecount != 0) return commandcreator("turn:", hand, 9, ninecount); else if(tencount != 0) return commandcreator("turn:", hand, 10, tencount); else return ("turn:pickup:"); }else{//play as many as there is of the lowest card return commandcreator("turn:", hand, lowest, lowestcount); } }else if(hand.isFaceUp()){ //determining which card to play for(int n = 0; n < 3; n++){ if(hand.getFaceUp(n) != null){ if(nine == true && hand.getFaceUp(n).getValue() == 9){ ninecount++; }else if(hand.getFaceUp(n).getValue() == 10){ tencount++; }else if(hand.getFaceUp(n).getValue() == 2){ twocount++; }else if(hand.getFaceUp(n).getValue() < lowest && hand.getFaceUp(n).getValue() >= card.getValue()){ lowest = hand.getFaceUp(n).getValue(); lowestcount = 1; }else if(hand.getFaceUp(n).getValue() == lowest){ lowestcount++; } } } //playing card selected if(lowestcount == 0){//no card other than 10, 2 and 9 (if nine is true) or player must pickup if(twocount != 0) return commandcreatorFU("turn:faceup:", hand, 2, twocount); else if(ninecount != 0) return commandcreatorFU("turn:faceup:", hand, 9, ninecount); else if(tencount != 0) return commandcreatorFU("turn:faceup:", hand, 10, tencount); else return ("turn:pickup:"); }else{//play as many as there is of the lowest card return commandcreatorFU("turn:faceup:", hand, lowest, lowestcount); } }else return facedown(hand, card); } private String commandcreator(String command, Hand hand, int value, int number) { if(number == 0) return(command.concat("pickup:")); if(number > 1) command = command.concat("multi:" + number + ":"); int addedcount = 0; for(int i = 0; i < hand.length() - 1; i++) if(hand.getCard(i).getValue() == value){ addedcount++; command = command.concat( hand.getCard(i).getNumber() +":"); if(addedcount == number) break; } return command; } //FU for Face Up private String commandcreatorFU(String command, Hand hand, int value, int number) { if(number == 0) return(command.concat("pickup:")); if(number > 1) command = command.concat("multi:" + number + ":"); int addedcount = 0; for(int i = 0; i < 3; i++) if(hand.getFaceUp(i) != null) if(hand.getFaceUp(i).getValue() == value){ addedcount++; command = command.concat( hand.getFaceUp(i).getNumber() +":"); if(addedcount == number) break; } return command; } private String facedown(Hand hand, Card card) { String command; for(int n = 0; n < 3; n++) if(hand.getFaceDown(n) != null){ if(card == null){ command = "turn:facedown:" + hand.getFaceDown(n).getNumber() + ":"; return command; }else if(seven == true && card.getValue() == 7){ if(hand.getFaceDown(n).getValue() < 7){ command = "turn:facedown:" + hand.getFaceDown(n).getNumber() + ":"; return command; }else{ command = "turn:facedown:pickup:" + hand.getFaceDown(n).getNumber() + ":"; return command; } }else if(hand.getFaceDown(n).getValue() == 9 && nine){ command = "turn:facedown:" + hand.getFaceDown(n).getNumber() + ":"; return command; }else if(hand.getFaceDown(n).getValue() == 2 || hand.getFaceDown(n).getValue() == 10){ command = "turn:facedown:" + hand.getFaceDown(n).getNumber() + ":"; return command; }else if(hand.getFaceDown(n).getValue() >= card.getValue()){ command = "turn:facedown:" + hand.getFaceDown(n).getNumber() + ":"; return command; }else{ command = "turn:facedown:pickup:" + hand.getFaceDown(n).getNumber() + ":"; return command; } } return "error"; } public String swap(Hand hand, boolean nine) { //Stores all cards that can be swapped Card canbeswapped[] = new Card[6]; //placing cards into canbeswapped in acending order int count = 0;//counts how many cards have already been added to canbeswapped Card card = hand.getCard(0); int cardvalue = 0; for(int f = 0; f < 6; f++){ if(f < 3)//adding cards from in hand card = hand.getCard(f); if(f >= 3)//adding faceup cards card = hand.getFaceUp(5 - f); for(int n = 0; n < 6; n++){ if(card == null) return "error"; cardvalue = card.getValue(); //resetting value for important cards like 2's and 10's if(cardvalue == 2) cardvalue = 15; if(cardvalue == 9 && nine) cardvalue = 16; if(cardvalue == 10) cardvalue = 16; if(canbeswapped[n] == null){ canbeswapped[n] = card; break; }else if(canbeswapped[n].getValue() >= cardvalue){ Card temp = canbeswapped[n]; canbeswapped[n] = card; for(int s = count; s >= n + 1 ; s--) if(s + 1 < 6) canbeswapped[s + 1] = canbeswapped[s]; canbeswapped[n + 1] = temp; break; } } count++; } //creating command string String command = "swap:"; for(int n = 0; n < 6; n++) command = command.concat( canbeswapped[n].getNumber() + ":"); return command; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -