160 lines
4.4 KiB
Java
160 lines
4.4 KiB
Java
package com.bernard.bataille;
|
|
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.HashSet;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Queue;
|
|
import java.util.Random;
|
|
import java.util.Set;
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
public class GameManager {
|
|
List<Queue<Integer>> cartes;
|
|
List<List<Integer>> defausses;
|
|
int alivePlayers;
|
|
Random shuffler;
|
|
|
|
public static void main(String[] args) {
|
|
Componentizer c = new GameManager(2,2).game();
|
|
List<Renderable> l = c.getRenderables();
|
|
BufferedImage bg = Componentizer.getBackgroundPictureImage();
|
|
try {
|
|
for (int i = 0; i < l.size(); i++) {
|
|
System.out.println(l.get(i));
|
|
if(l.get(i) instanceof Componentizer.CardsBackGetter)continue;
|
|
BufferedImage[] imgs = l.get(i).render(bg, 10);
|
|
System.out.println(Arrays.toString(imgs));
|
|
for (int j = 0; j < imgs.length; j++) {
|
|
ImageIO.write(imgs[j], "png", new File("/tmp/bataille/","img_"+i+"_"+j+".png"));
|
|
}
|
|
bg = imgs[imgs.length-1];
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public GameManager(int playerCount,int packetCount) {
|
|
this.alivePlayers = playerCount;
|
|
shuffler = new Random();
|
|
cartes = new ArrayList<>();
|
|
defausses = new ArrayList<>();
|
|
for (int i = 0; i < playerCount; i++) {
|
|
cartes.add(new LinkedList<>());
|
|
defausses.add(new LinkedList<>());
|
|
}
|
|
List<Integer> pioche = new ArrayList<>();
|
|
for(int i = 0;i<13*4;i++)pioche.addAll(Collections.nCopies(packetCount, i));
|
|
Collections.shuffle(pioche, shuffler);
|
|
for (int i = 0; i < pioche.size(); i++)
|
|
cartes.get(i%playerCount).add(pioche.get(i));
|
|
|
|
}
|
|
|
|
public Componentizer game() {
|
|
Componentizer componentizer = new Componentizer(alivePlayers,50,78);
|
|
while(alivePlayers > 1) {
|
|
|
|
int[] upTable = new int[alivePlayers];
|
|
List<Integer> winners = new ArrayList<>();
|
|
Set<Integer> pot = new HashSet<>();
|
|
Integer highest = 0;
|
|
boolean flipped = false;
|
|
|
|
while(winners.size() != 1) {// Tant que bataille
|
|
|
|
if(alivePlayers == 1) break;
|
|
|
|
//Fix dead people
|
|
fixCards();
|
|
for (int i = 0; i < alivePlayers; i++) {
|
|
if(cartes.get(i).isEmpty()) {
|
|
System.out.println("Le joueur "+i+" nous a quitté ... tout le monde s'en faut de toute façon !");
|
|
componentizer.playerDead(i);
|
|
alivePlayers--;
|
|
int[] oldUpTable = upTable;
|
|
upTable = new int[alivePlayers];
|
|
System.arraycopy(oldUpTable, 0, upTable, 0, i);
|
|
System.arraycopy(oldUpTable, i+1, upTable, i, alivePlayers-i);
|
|
cartes.remove(i);
|
|
defausses.remove(i);
|
|
}
|
|
}
|
|
|
|
highest = 0;
|
|
for (int i = 0; i < upTable.length; i++) {
|
|
upTable[i] = cartes.get(i).poll();
|
|
pot.add(upTable[i]);
|
|
highest = (highest > upTable[i]%13)?highest:upTable[i]%13;
|
|
}
|
|
System.out.println(alivePlayers+" joueurs jouent : "+cardArrayToString(upTable) + (flipped?" (caché)":""));
|
|
componentizer.turn(upTable, flipped);
|
|
winners.clear();
|
|
if(!flipped)
|
|
for (int i = 0; i < upTable.length; i++)
|
|
if(upTable[i]%13==highest)winners.add(i);
|
|
|
|
|
|
flipped = !flipped;
|
|
}
|
|
if(alivePlayers > 1) {
|
|
componentizer.endOfTurn();
|
|
System.out.println("GG au joueur "+winners.get(0));
|
|
defausses.get(winners.get(0)).addAll(pot);
|
|
}
|
|
}
|
|
return componentizer;
|
|
}
|
|
|
|
public void fixCards() {
|
|
for (int i = 0; i < alivePlayers; i++) {
|
|
if(cartes.get(i).isEmpty()) {
|
|
Collections.shuffle(defausses.get(i), shuffler);
|
|
cartes.get(i).addAll(defausses.get(i));
|
|
defausses.get(i).clear();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static final String cardToString(int i) {
|
|
String color = "";
|
|
switch(i/13) {
|
|
case 0:color="♠";break;
|
|
case 1:color="♣";break;
|
|
case 2:color="♥";break;
|
|
case 3:color="♦";break;
|
|
}
|
|
switch(i%13) {
|
|
case 0 : return "2"+color;
|
|
case 1 : return "3"+color;
|
|
case 2 : return "4"+color;
|
|
case 3 : return "5"+color;
|
|
case 4 : return "6"+color;
|
|
case 5 : return "7"+color;
|
|
case 6 : return "8"+color;
|
|
case 7 : return "9"+color;
|
|
case 8 : return "X"+color;
|
|
case 9 : return "V"+color;
|
|
case 10 : return "D"+color;
|
|
case 11 : return "R"+color;
|
|
case 12 : return "A"+color;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static final String cardArrayToString(int[] cards) {
|
|
String out = "";
|
|
for (int i : cards)
|
|
out+="|"+cardToString(i);
|
|
return out.substring(1);
|
|
}
|
|
|
|
}
|