001 package jagafa.scores;
002
003 import jagafa.rule.CoiffeurRules;
004 import jagafa.rule.ObenRules;
005 import jagafa.rule.RuleSet;
006 import jagafa.rule.UntenRules;
007
008 import java.util.Iterator;
009 import java.util.LinkedHashMap;
010 import java.util.Map;
011
012 public class SchieberScoreTable extends AbstractScoreTable implements ScoreTable {
013
014 private static final Integer SINGLE = new Integer(1);
015
016 private static final Integer DOUBLE = new Integer(2);
017
018 private int winningScore_;
019
020 private Map<RuleSet, Integer> rlist;
021
022 public SchieberScoreTable(int winningScore) {
023 super();
024 this.setCanChangePlayer(true);
025 this.winningScore_ = winningScore;
026 rlist = new LinkedHashMap<RuleSet, Integer>();
027 rlist.put(new ObenRules(), SINGLE);
028 rlist.put(new UntenRules(), SINGLE);
029 /*rlist.put(new TrumpfRules(0), SINGLE);
030 rlist.put(new TrumpfRules(1), SINGLE);
031 rlist.put(new TrumpfRules(2), SINGLE);
032 rlist.put(new TrumpfRules(3), SINGLE);*/
033 //rlist.put(new SlalomObenStartRules(),SINGLE);
034 rlist.put(new CoiffeurRules(), SINGLE);
035 Iterator<RuleSet> ruleIter = rlist.keySet().iterator();
036
037 while (ruleIter.hasNext()) {
038 this.activateRule(ruleIter.next());
039 }
040 this.choosingPlayer_ = this.getStartPlayer();
041 }
042
043 @Override
044 public void addScores(int[] scores, RuleSet rules) {
045 if (rules==null) {
046 return;
047 }
048 /* TODO: Add functionality for MATCH score */
049 int mult = this.getMultiplier(rules);
050
051 for (int i = 0; i < scores.length; i++) {
052 scores[i] *= mult;
053 }
054 super.addScores(scores, rules);
055 this.setCanChangePlayer(true);
056 int roundsPlayed = this.roundsPlayed();
057
058 while (roundsPlayed>=4) {
059 roundsPlayed-=4;
060 }
061 this.setStartPlayer(roundsPlayed);
062
063 }
064
065 public boolean isGameOver() {
066 int scores[] = this.getScores();
067
068 int scoreTeam1 = scores[0] + scores[2];
069 int scoreTeam2 = scores[1] + scores[3];
070
071 if (scoreTeam1 >= this.winningScore_) {
072 this.setCanChangePlayer(true);
073 return true;
074 }
075 if (scoreTeam2 >= this.winningScore_) {
076 this.setCanChangePlayer(true);
077 return true;
078 }
079 return false;
080 }
081
082 public int getMultiplier(RuleSet rule) {
083 return (Integer) this.rlist.get(rule);
084 }
085
086
087 /**
088 * Schieben, falls noch möglich
089 */
090 public boolean changeChoosingPlayer() {
091
092 if (this.canChangeChoosingPlayer()) {
093 int starter = this.getStartPlayer();
094
095
096 starter += 2;
097 while (starter>=4) {
098 starter -= 4;
099 }
100
101 this.setChoosingPlayer(starter);
102 this.setStartPlayer(starter);
103 this.setCanChangePlayer(false);
104 System.out.println("Hand over!");
105 return true;
106 } else {
107 return false;
108 }
109
110 }
111
112
113
114
115 public int getChoosingPlayer() {
116 if (this.choosingPlayer_==-1) {
117 this.choosingPlayer_ = this.getStartPlayer();
118 }
119
120 return this.choosingPlayer_;
121 }
122
123
124 public int getStartPlayer() {
125 if (!this.canChangeChoosingPlayer()) {
126 return this.getChoosingPlayer();
127 }
128
129 return super.getStartPlayer();
130 }
131
132 public int getWinningScore() {
133 return this.winningScore_;
134 }
135
136 }