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> cartes; List> defausses; int alivePlayers; Random shuffler; public static void main(String[] args) { Componentizer c = new GameManager(2,2).game(); List 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 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 winners = new ArrayList<>(); Set 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); } }