186 lines
3.8 KiB
Java
186 lines
3.8 KiB
Java
package fr.ynerant.tarot;
|
|
|
|
import android.preference.PreferenceManager;
|
|
import android.util.SparseArray;
|
|
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.concurrent.Executors;
|
|
|
|
public class Game {
|
|
private static final SparseArray<Game> GAMES = new SparseArray<>();
|
|
|
|
public int id;
|
|
public GameType type;
|
|
public Set<Player> players;
|
|
public Bet bet;
|
|
public Player attacker;
|
|
public Player follower;
|
|
public int attackScore;
|
|
// public boolean little, twenty_one, excuse;
|
|
public int ends;
|
|
public int handle;
|
|
public Map<Player, Boolean> miseries;
|
|
public boolean littleForAttacker, littleForDefenser;
|
|
public boolean chelemAnnounced, chelemRealized;
|
|
|
|
public int getId() {
|
|
return id;
|
|
}
|
|
|
|
public GameType getType() {
|
|
return type;
|
|
}
|
|
|
|
public Set<Player> getPlayers() {
|
|
return players;
|
|
}
|
|
|
|
public Bet getBet() {
|
|
return bet;
|
|
}
|
|
|
|
public Player getAttacker() {
|
|
return attacker;
|
|
}
|
|
|
|
public Player getFollower() {
|
|
return follower;
|
|
}
|
|
|
|
public int getAttackScore() {
|
|
return attackScore;
|
|
}
|
|
|
|
public int getEnds() {
|
|
return ends;
|
|
}
|
|
|
|
public int getHandle() {
|
|
return handle;
|
|
}
|
|
|
|
public Map<Player, Boolean> getMiseries() {
|
|
return miseries;
|
|
}
|
|
|
|
public boolean isLittleForAttacker() {
|
|
return littleForAttacker;
|
|
}
|
|
|
|
public boolean isLittleForDefenser() {
|
|
return littleForDefenser;
|
|
}
|
|
|
|
public boolean isChelemAnnounced() {
|
|
return chelemAnnounced;
|
|
}
|
|
|
|
public boolean isChelemRealized() {
|
|
return chelemRealized;
|
|
}
|
|
|
|
public int calculateScore() {
|
|
// int ends = (little ? 1 : 0) + (twenty_one ? 1 : 0) + (excuse ? 1 : 0);
|
|
int bound = ends == 0 ? 56 : ends == 1 ? 51 : ends == 2 ? 41 : 36;
|
|
boolean win = attackScore >= bound;
|
|
int gain = Math.abs(attackScore - bound);
|
|
int score = 25;
|
|
score += gain;
|
|
|
|
score *= bet.getMultiplier();
|
|
|
|
if (handle != 0)
|
|
score += 10 * (Math.abs(handle) + 1);
|
|
|
|
if (!win)
|
|
score = -score;
|
|
|
|
if (littleForAttacker)
|
|
score += 10;
|
|
else if (littleForDefenser)
|
|
score -= 10;
|
|
|
|
if (chelemAnnounced) {
|
|
if (chelemRealized)
|
|
score += 400;
|
|
else
|
|
score -= 200;
|
|
}
|
|
else if (chelemRealized)
|
|
score += 200;
|
|
|
|
return score;
|
|
}
|
|
|
|
public enum GameType {
|
|
THREE_PLAYERS, FOUR_PLAYERS, FIVE_PLAYERS, SIX_PLAYERS;
|
|
|
|
public int getNbPlayers() {
|
|
return ordinal() + 3;
|
|
}
|
|
|
|
public static GameType getGameType(int players) {
|
|
switch (players) {
|
|
case 3:
|
|
return THREE_PLAYERS;
|
|
case 4:
|
|
return FOUR_PLAYERS;
|
|
case 5:
|
|
return FIVE_PLAYERS;
|
|
case 6:
|
|
return SIX_PLAYERS;
|
|
default:
|
|
throw new IllegalArgumentException("A game must have between 3 and 6 players");
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum Bet {
|
|
SMALL(1), GUARD(2), GUARD_WITHOUT(4), GUARD_AGAINST(6);
|
|
|
|
private final int multiplier;
|
|
|
|
Bet(int multiplier) {
|
|
this.multiplier = multiplier;
|
|
}
|
|
|
|
public int getMultiplier() {
|
|
return multiplier;
|
|
}
|
|
}
|
|
|
|
public static void updateGames() {
|
|
Executors.newSingleThreadExecutor().execute(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
URL url = new URL("http://galaxyoyo.com/tarot/game.php");
|
|
final HttpURLConnection co = (HttpURLConnection) url.openConnection();
|
|
co.setRequestMethod("POST");
|
|
co.setRequestProperty("token", PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getString("token", null));
|
|
co.connect();
|
|
|
|
final List<Game> games = new Gson().fromJson(new InputStreamReader(co.getInputStream()), new TypeToken<ArrayList<Game>>(){}.getType());
|
|
GAMES.clear();
|
|
for (Game g : games) {
|
|
GAMES.put(g.getId(), g);
|
|
}
|
|
}
|
|
catch (IOException ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|