Hachaisse le site

24 décembre 2013

Let’s play Hearts of Iron III (8)

Classé dans : Article, Let's Play — Mots-clefs : — admin @ 8 h 00 min

Partie 8 : Tout dans l’Etat, rien hors de l’Etat, rien contre l’Etat

Partie précédente : http://raphp.fr/blog/?p=397

Juillet 1937

La vie continue paisiblement dans le Royaume d’Italie…

Les 3 prochaines technologies à développer permettent de compléter les techs 1937 de nos sous-marins.

Image

Notre programme de construction avance gentiment, les améliorations des provinces sont terminées pour le moment, et nous pouvons mettre à jour les dernières brigades de milice qui nous restent:

Image

Nous pouvons former des troupes du génie depuis peu, il est donc temps d’en profiter.

De nouvelles techs sont choisies:

Image

L’équipement arctique est d’une utilité limitée, a priori, mais nous ne pouvons exclure de nous retrouver dans des coins perdus d’Union Soviétique, donc par perfectionnisme, on recherchera cette tech (dans l’absolu, elle aurait dû être laissée de côté, mais je tends parfois à être trop perfectionniste).
Nous recherchons également les Marines. La flotte italienne n’est pas insignifiante et pourrait être amenée à opérer des débarquements, notamment dans quelques îles et positions choisies de Méditerranée.

Août 1937

Après un mois de guerre en Asie:

Image

Le Japon progresse, mais lentement, à travers les provinces de la faction Shaanxi. Pékin devrait tomber d’ici peu, ouvrant la voie vers les parties utiles, riches et populeuses du pays.

Sur ce, un autre évènement secoue le pays:

Image

Le ministre de la Sécurité saute. Le seul remplaçant disponible est un chauve du nom de Benito M., accessoirement chef du gouvernement. Par chance, il a le même bonus de +5% en leadership, qu’il aurait été fort regrettable de perdre.

Septembre 1937

Les recherches du moment:

Image

Deux doctrines militaires qui permettront de débloquer des technologies à bonus spéciaux lorsque nous aurons atteint le lvl 3 (donc vers 1939/40). Et une doctrine navale qui booste l’efficacité de nos ports – autrement dit, qui permettent avant tout d’augmenter le nombre de supplies qu’un port peut importer. Si nous opérons hors d’Italie, il vaut mieux que les quelques ports que nous contrôlons arrivent à gérer le flot logistique qui y transitera, faute de quoi nos troupes seront bloquées en rase campagne, sans ravitaillement.


Novembre 1937


Enfin, notre première brigade du génie est disponible:

Image

Nous allons en équiper la plupart des divisions basées à la frontière française, car les provinces frontalières bénéficient non seulement du bonus défensif de montagne, mais sont toutes équipées de fortifications – le bonus d’ingénieur sera particulièrement précieux lorsque nous tenterons de les prendre d’assaut.

Alors que nous avons envoyé le maximum d’espions à Londres et Paris, nous en avons à nouveau 10 en réserve:

Image

Cette fois, ils iront à Moscou infiltrer le vil régime stalinien – et notre future cible ultime.

Enfin, une dernière précaution à prendre suffisamment à l’avance:

Image

Nous construisons des convois et des navires d‘escorte en réserve. En effet, dès que la guerre commencera, nos convois seront ciblés par les flottes ennemies, principalement la flotte anglaise. Si nous n’avons pas de navires de remplacement, tout notre ravitaillement risque d’être bloqué, et les ressources diverses tirées de nos colonies et conquêtes d’outre-mer ne pourront plus alimenter notre industrie de guerre en métropole.

L’Italie découvre les calculateurs mécaniques, réduisant la durée des recherches futures:

Image

La prochaine tech date de 1940; nous sommes donc largement en avance, comme nous l’indique l’icône d’alerte rouge.
Nous remplaçons cette tech par la recherche de Large front, niveau 2. Le principal intérêt de cette technologie est qu’elle débloquera, au niveau 3, Human Wave, qui améliore les compétences de nos troupes au combat.

Nos réserves d’espions sont à nouveau bien remplies:

Image

Nous en déchargeons une cargaison à Washington – 10 d’un coup, comme d’habitude. Et nous allons profiter du fait que nos espions en URSS ont liquidé le contre-espionnage local pour leur assigner la mission de saboter la production locale. L’URSS a une recherche relativement médiocre comparée aux Occidentaux, mais dispose d’une masse d’unités impressionnante; il semble donc préférable de saboter la production de troupes supplémentaires, vu que l’Allemagne les surpassera de toute manière au niveau technologique.

A noter qu’avec 10 espions actifs chez 4 de nos futurs ennemis, nous atteignons le maximum de notre efficacité dans cette partie. A partir de maintenant, les contre-espionnages ennemis vont entrer en action et lentement débusquer nos espions infiltrés, grignotant toute réserve que nous pourrions constituer à l’avenir.

Décembre 1937

Une nouvelle volée de technologies est découverte. Lançons la suite:

Image

Pour la forme, nous allons rechercher les techs de 1918. Operational level organisation se révèlera particulièrement utile à terme; en effet, après chaque bataille, les troupes ne peuvent plus attaquer pendant de longs jours – bien qu’elles puissent se déplacer -, et cette tech permet de réduire le délai d’attente avant de pouvoir lancer un nouvel assaut. La tech Mechanised offensive boostera quelque peu nos quelques brigades motorisées et de cavalerie; elle permettra également de débloquer à terme Combined Warfare, qui offre un bonus à certaines divisions.

Notre recherche nous a permis d’obtenir une nouvelle unité d’infanterie, les marines. Leur principale utilité réside dans les débarquements et autres assauts amphibies, et certaines stats sont supérieures à celles de l’infanterie de base.
Pour la forme, nous allons en créer une division.

La fenêtre de Production industrielle permet de créer soit des brigades isolées soit des divisions entières. La production de brigade nous montre le détail de toutes les unités:

Image

La production de divisions nous permet de choisir la composition exacte desdites divisions:

Image

En règle générale, on inclut une brigade de support par division – celles-ci n’ayant qu’un rôle d’appoint, elles comprennent 1′000 hommes au lieu de 3′000, leur principal intérêt étant de fournir des bonus spécifiques à toute la division.


1938

Le début d’une nouvelle année, c’est généralement le moment de réorienter sa recherche en fonction des technologies qu’on peut rechercher sans malus.
L’Italie n’est pas en guerre, donc les techs militaires de 1938, notamment l’infanterie, peuvent attendre. Par contre, nos ressources sont toujours très limitées; c’est donc là que nous allons mettre le paquet:

Image

Les stocks de pétrole étant au plus bas, nous allons rechercher en bloc les 3 technologies qui y sont liées – production d’énergie, de pétrole et d’essence. Les autres technologies améliorant la production de ressources suivront un peu plus tard.

Février 1938

Un nouvel évènement mineur frappe l’Italie:

Le choix est vite fait. La seconde option a un coût substantiel en capacité industrielle, alors que la première a un coût similaire, mais booste notre leadership.

Nous mettons à profit cette hausse temporaire (moins d’un mois) pour lancer une recherche supplémentaire:

Image

L’équipement adapté au désert réduit de moitié l‘attrition de base de ces provinces. Nous perdrons donc moins d’hommes exposés à cet environnement hostile.
Comme le Duce prévoit une campagne dans les déserts d’Afrique du Nord dès l’entrée en guerre de l’Italie, il est évident que c’est un équipement spécialisé que nous devons développer en priorité.

En Extrême-Orient, le Japon arrive enfin au bout de la première phase de son expansion:

Image

Le Shanxi est annexé. Restent l’enclave montagneuse de la Chine communiste, la clique du Xibei San Ma (en gros, la Mongolie Intérieure) et le très gros morceau de la Chine nationaliste.
Les troupes japonaises ont également opéré un débarquement sur la côte de la Chine nationaliste, dans le but évident de s’emparer de Shanghai puis de Nankin.

Mars 1938

Le Japon décide de créer un nouveau satellite en Chine:

Image

Le Mengkukuo, vassal mongol équivalent au Mandchukuo en Mandchourie.

L’expansionnisme et l’annexion de voisins faibles n’est pas une spécialité japonaise. Les choses sérieuses commencent en Europe…

Image

L’Italie gagne un nouveau voisin au nord. Voisin quelque peu encombrant et fort remuant…
Adolf annexe l’Autriche, et le monde se rapproche d’une conflagration planétaire.

L’Italie, encore indépendante et hors-alliance, a tout intérêt à se faire bien voir du grand voisin germanique.

Image

En toute logique, lorsque celui-ci nous fait une offre qu’on ne peut pas refuser, nous acceptons.
Il faut dire que nous produisons de légers surplus de matériaux rares, et que gagner un peu de Reichsmarks facilement n’est pas une mauvaise idée.

Avril 1938

En Asie, les conquêtes japonaises continuent, lentement mais sûrement.

Image

Après avoir occupé quelques provinces du Xibei San Ma, il peut en faire profiter son satellite.

L’inexorable marche vers la conflagration ne fait que commencer; bien des évènements marquants et des surprises nous attendent au prochain épisode (dont une significative que l’on peut deviner sur le tout dernier screenshot).

Pour discuter de l’article, c’est ici : http://raphp.fr/fofo/viewtopic.php?f=2&t=2335

23 décembre 2013

Critique littéraire : Les Gauches françaises, de Jacques Julliard

Classé dans : Article, Littérature, Politique — admin @ 18 h 12 min

Un plaidoyer pour la deuxième gauche

Un épais volume de 943 pages, visant à retracer l’évolution de la gauche à travers les âges,  paru en 2012 peu après la victoire du candidat socialiste à la présidentielle ? Voilà qui a de quoi susciter l’intérêt. Plusieurs des principaux journaux ont d’ailleurs salué l’ouvrage en tant que nouvelle référence sur l’histoire des gauches, l’équivalent pour celle-ci de La droite en France de René Rémond. Qu’en est-il vraiment ?

Dans un premier temps, on reconnaîtra que le livre couvre bien son sujet, parfois davantage que bon nombre d’autres ouvrages sur la question : son étude commence en 1762, avant-même la Révolution Française, s’interroge sur la filiation de la gauche vis-à-vis des philosophes des Lumières, du jansénisme ou encore des jésuites ; et s’achève sur des observations contemporaines. L’approche adoptée constitue simultanément son intérêt et l’un de ses points faibles : il délaisse les partis politiques comme principal objet d’étude pour se concentrer sur les « familles » idéologiques qui les traversent, oubliant au passage les contextes économiques et sociaux. Le résultat en est d’une part une classification originale et agréablement plus cohérente des gauches que chez beaucoup d’autres auteurs, et d’autre part une nette herméticité à la lecture.

Deux défauts grèvent en effet ces Gauches Françaises : le premier vient de cette focalisation sur un aspect des gauches, au détriment de l’explication du reste, et notamment du contexte. Celui qui voudrait s’essayer à la lecture de l’ouvrage ferait bien de disposer d’une bonne base de connaissances sur la (longue) période traitée, car les sujets défilent sans même être présentés au-delà de l’effet produit sur les gauches – une phrase symbolisant bien ce souci est l’affirmation que le progrès selon Condorcet représenterait une « revanche tardive de l’hérésie pélagienne sur l’augustinisme » (page 46), sans plus de précisions.

L’autre faiblesse du livre relève du parti pris de son auteur. Libéral-libertaire, adepte de la « seconde gauche » de Rocard, J. Julliard affiche tout du long une préférence pour son camp : les girondins contre les jacobins, Voltaire contre Rousseau (pré-totalitaire), Danton contre Robespierre (un horrible dictateur), Blum contre Thorez (un humaniste contre un stalinien vendu au totalitarisme), Mitterrand contre Marchais (un fin tacticien contre un « esprit médiocre et âme basse » !)… De là, une tendance permanente dans le livre à critiquer toute politique radicale, à admirer le « réalisme » et la « modération », à vomir le communisme (un totalitarisme – le mot revient souvent – mis au même niveau que le nazisme) en se passant le plus souvent d’explications (il ne faut pas s’attendre ici à une étude poussée du PCF et de son idéologie, les périodes où celui-ci dépassait le SFIO étant globalement éludées) et à valoriser la décentralisation, la politique de l’offre, l’Europe, l’alliance avec la bourgeoisie plutôt que la lutte des classes… et ce jusqu’à des proportions presque caricaturales pour ce qui se veut un propos d’historien neutre (« la gauche qui pense large » [europhile et favorable à la mondialisation] par rapport  à « la gauche qui pense étroit » [la gauche jacobine, donc nationaliste, donc la gauche de la guerre], ou encore un naïf couplet sur le « capitalisme à visage humain »).

Or, pareilles positions ne se retrouvent pas que dans les commentaires de l’auteur : ce sont malheureusement l’approche du livre, ses raisonnements et ses sources qui reposent sur des poncifs et des partis pris contestables. Ainsi en est-il des sources employées – de François Furet, historien libéral et anti-jacobin qu’il couvre de louanges, à Stéphane Courtois et Marc Lazar, comptant parmi les auteurs de l’inepte Livre Noir du Communisme. Inversement, on cherchera avec peine les Mathiez, Soboul…

Mais au-delà de ce militantisme à moitié assumé, le livre, on l’a dit, a ses forces. Malgré la présence de clichés vétustes, il renferme des analyses intéressantes et qui méritent qu’on s’y arrête. Alors que la classification des différents segments de la gauche est souvent poussive et inconsistante d’un auteur à l’autre, celle de Julliard évite le piège de la catégorisation par organisation. Parmi la gauche, depuis sa fondation, il distingue quatre grands courants :

- La gauche libérale : c’est celle de Thiers ou Benjamin Constant. Favorable au libre marché et à l’individualisme, la gauche libérale se distingue de la droite libérale par son rapport aux institutions : là où les seconds estiment que la liberté du commerce entraîne mécaniquement les libertés politiques, les libéraux de gauche considèrent que l’un ne va pas sans l’autre – ils sont donc démocrates.

- La gauche jacobine : la gauche de Robespierre ou Chevènement, c’est la gauche de l’Etat-nation. Sa finalité dernière est le bien de l’individu, et son moyen d’action est l’Etat. Elle défend la centralisation, les institutions, la nation une et indivisible (donc sa souveraineté), l’intervention publique, la laïcité… – en un mot la République telle qu’on la définit en France.

- La gauche collectiviste : la gauche de Guesde ou des premières années du Parti Communiste. Elle valorise le collectif, l’égalité concrète, la propriété commune – l’auteur en dresse un portrait sombre, de gauche totalitaire uniquement préoccupé des rapports entre le collectif et l’Etat.

- La gauche libertaire : la gauche de Proudhon ou de Bakounine. Comme les libéraux, ils placent la liberté avant l’égalité, mais rejettent pour ce faire l’autorité en général, pas seulement celle de l’Etat. Ils peuvent rejoindre les collectivistes sur la question de la propriété – mais s’opposent à eux sur l’essentiel.

Ces quatre courants peuvent se manifester sous une forme « pure », mais se croisent et s’hybrident le plus souvent : la gauche opportuniste et radicale de la IIIème République fut à la fois libérale en économie et jacobine sur la question institutionnelle et laïque, des collectivistes comme Jaurès ou le Parti Communiste de l’après-guerre parvinrent à allier le drapeau rouge et le drapeau tricolore en se faisant aussi jacobin qu’ils pouvaient l’être. D’autres encore comme Daniel Cohn-Bendit se revendiquent libéraux et libertaires. Certains croisements fonctionnent mieux que d’autres : jacobins et collectivistes se rejoignent aisément, tout comme les libéraux et les libertaires ; tandis que des alliances jacobine/libérale, collectiviste/libertaire sont plus difficiles ; et que d’autres enfin, relèvent de l’impossible (imagine-t-on un collectiviste libéral ou un jacobin libertaire ?).

Que retenir, en définitive, de ces Gauches Françaises ? Qu’il s’agit, d’abord, d’un ouvrage militant avec les biais et défauts habituels de ce genre de travaux. Mais aussi qu’il propose un regard original sur les courants idéologiques de la gauche, qui le sauve de la platitude sociale-démocrate ordinaire et parvient à faire cohabiter de façon cohérente Hollande, Chevènement et Duclos au sein d’une même famille politique. Une avancée certaine – en attendant un véritable ouvrage de référence.

JULLIARD Jacques, Les Gauches Françaises, 1762-2012 : Histoire, politique et imaginaire, Paris, Flammarion, 2012, 943 pages

Pour discuter de cet article, c’est ici : http://www.raphp.fr/fofo/viewtopic.php?f=2&t=84&start=528#p188974

19 décembre 2013

Tutorial pour Unity 3D (4)

Classé dans : Article, Informatique, Tutoriel — admin @ 12 h 07 min

Troisième partie du tutorial : http://raphp.fr/blog/?p=312

Création du noyau du jeu

Notre jeu de carte démarre correctement, mais avant de tourner les cartes, il faudrait déjà avoir les bonnes cartes dans nos paquets !

Il nous faut donc ajouter une simulation de jeu de carte. J’ai écrit rapidement une simulation de paquet, de mélange et de donne de cartes.

Sûrement pas le plus élaboré mais c’est suffisant.

Nous allons créer 2 scripts c# :

Card.cs

public class Card {

public enum CardType

{

Heart = 1,

Spade = 2,

Diamond = 3,

Club = 4

}

public Card(CardType ct, int v )

{

Type = ct;

Value = v;

}

public CardType Type;

public int Value;

}

CardsGame.cs

public class CardsGame {

// Heart, Club, Spade, Diamond

protected Card[]Sorted = new Card[52];

ArrayList MixedCards = new ArrayList();

ArrayList Trash = new ArrayList();

public CardsGame () {

int iSorted = 0;

for( int c = 1; c <= 4; c++)

{

Card.CardType cardtype = (Card.CardType)c;

for(int i = 1; i <= 13; i++ )

{

Sorted[iSorted++] = new Card(cardtype, i);

}

}

}

public void FirstMix()

{

//Card[]Mixed = new Card[52];

System.Random r = new System.Random(new System.Random().Next(0,5000));

ArrayList al = new ArrayList();

MixedCards = new ArrayList();

Trash = new ArrayList();

for(int i = 0; i < 52; i++ )

al.Add(Sorted[i]);

Debug.Log(« Nombre de carte à mélanger :  » + al.Count);

//int iMixed = 0;

while(al.Count > 0)

{

int random = r.Next(0,al.Count-1);

Debug.Log(« random :  » + random);

Card find = (Card)al[random];

Debug.Log(« Carte :  » + find.Type +  » –  » + find.Value);

MixedCards.Add(al[random]);

al.RemoveAt(random);

}

}

public void Mix()

{

Debug.Log(« Tri des cartes »);

if(Trash.Count > 0 && MixedCards.Count > 0)

{

while(MixedCards.Count > 0 )

{

Trash.Add(MixedCards[0]);

MixedCards.RemoveAt(0);

}

}else{

Debug.Log(« Pas de poubelle, on recupere les cartes tries »);

Trash = new ArrayList();

for(int i = 0; i < 52; i++ )

{

//Debug.Log(Sorted[i].Value);

Trash.Add(Sorted[i]);

//Card c = (Trash[i] as Card);

//Debug.LogError(« Carte dans la poubelle a la position  » + i +  » :  » + c.Value);

}

}

//Card[]Mixed = new Card[52];

System.Random r = new System.Random(new System.Random().Next(0,5000));

ArrayList al = new ArrayList();

MixedCards = new ArrayList();

//Trash = new ArrayList();

for(int i = 0; i < 52; i++ )

{

Card c = (Trash[i] as Card);

if( c == null )

{

Debug.LogError(« Pas de carte dans la poubelle a la position  » + i);

}

Debug.Log( c.Value);

al.Add(Trash[i]);

}

Debug.Log(« Nombre de carte à mélanger :  » + al.Count);

//int iMixed = 0;

while(al.Count > 0)

{

int random = r.Next(0,al.Count-1);

Debug.Log(« random :  » + random);

Card find = (Card)al[random];

Debug.Log(« Carte :  » + find.Type +  » –  » + find.Value);

MixedCards.Add(al[random]);

al.RemoveAt(random);

}

}

public Card NextCard()

{

Card c = null;

if( MixedCards.Count > 0 )

{

c = (Card)MixedCards[0];

MixedCards.RemoveAt(0);

}

return c;

}

public void AddTrash(Card c)

{

Trash.Add(c);

}

}

Pour notre jeu de bataille, chaque joueur doit garder la carte plutôt que la remettre dans le paquet d’origine alors on ajoute cette classe :

PlayerCards.cs

public class PlayerCards

{

public ArrayList Pack

{

get;

private set;

}

public ArrayList Win

{

get;

private set;

}

public PlayerCards()

{

Pack = new ArrayList();

Win = new ArrayList();

}

public void AddPack(Card c)

{

Pack.Add(c);

}

public void AddWin(Card c)

{

Win.Add(c);

}

public Card GetCard()

{

Card c = null;

if( Pack.Count > 0 )

{

c = (Card)Pack[0];

Pack.RemoveAt(0);

}

return c;

}

public void MixWinToPack()

{

if( Pack.Count > 0 )

{

Debug.Log(« Impossible de remettre dans le paquet tant qu’il y a encore des cartes à jouer »);

return;

}

//Card[]Mixed = new Card[52];

System.Random r = new System.Random(new System.Random().Next(0,5000));

ArrayList al = new ArrayList();

Debug.Log(« Nombre de carte à mélanger :  » + Win.Count);

while(Win.Count > 0)

{

int random = r.Next(0,Win.Count-1);

Debug.Log(« random :  » + random);

Card find = (Card)Win[random];

Debug.Log(« Carte :  » + find.Type +  » –  » + find.Value);

Pack.Add(al[random]);

Win.RemoveAt(random);

}

}

}

Celle-ci pourra simuler le paquet de cartes à jouer et la pile de cartes gagnées contre l’adversaire.

Ensuite on se servira de notre script de GUI comme noyau.

On ajoute le membre suivant pour gérer un paquet de carte :

CardsGame mCardsPack;

Et pour gérer les cartes des joueurs :

PlayerCards Player1_Cards;

PlayerCards Player2_Cards;

On complète la méthode Start qui va initialiser les listes.

void Start () {

Debug.Log(« MyGUI – Start »);

Player1_Cards = new PlayerCards();

Player2_Cards = new PlayerCards();

Player1_3DCardsWin = new ArrayList();

Player2_3DCardsWin = new ArrayList();

Player1_3DCardsPack = new ArrayList();

Player2_3DCardsPack = new ArrayList();

}

Maintenant on ajoute la méthode de départ d’un jeu :

void NewGame()

{

mCardsPack = new CardsGame();

mCardsPack.FirstMix();

Player1_Cards = new PlayerCards();

Player2_Cards = new PlayerCards();

for(int i = 0; i < 26 ; i++)

{

Card c1 = mCardsPack.NextCard();

Player1_Cards.AddPack(c1);

Card c2 = mCardsPack.NextCard();

Player2_Cards.AddPack(c2);

}

RedrawCards(1);

RedrawCards(2);

}

La simulation de la donne : dans une bataille on distribue une carte chacun jusqu’à la fin des 52 cartes.

Ensuite on crée une pile de carte pour chaque joueur.

Ainsi que la méthode qui permet de créer les cartes dans la scène :

void RedrawCards(int player)

{

if( player == 1 )

{

for(int i = 0; i < Player1_3DCardsPack.Count; i++ )

Destroy((GameObject)Player1_3DCardsPack[i]);

Player1_3DCardsPack.Clear();

for(int i = 0; i < Player1_3DCardsWin.Count; i++ )

Destroy((GameObject)Player1_3DCardsWin[i]);

Player1_3DCardsWin.Clear();

for(int i = 0; i < Player1_Cards.Pack.Count; i++ )

Add3DCard(PlayerOne, ref Player1_3DCardsPack, -0.1f, « PlayerOne_Pack » + i);

for(int i = 0; i < Player1_Cards.Win.Count; i++ )

Add3DCard(PlayerOne, ref Player1_3DCardsWin, -0.3f, « PlayerOne_Win » + Player1_3DCardsWin.Count, « PlayerOneWin »);

}

if( player == 2 )

{

for(int i = 0; i < Player2_3DCardsPack.Count; i++ )

Destroy((GameObject)Player2_3DCardsPack[i]);

Player2_3DCardsPack.Clear();

for(int i = 0; i < Player2_3DCardsWin.Count; i++ )

Destroy((GameObject)Player2_3DCardsWin[i]);

Player2_3DCardsWin.Clear();

for(int i = 0; i < Player2_Cards.Pack.Count; i++ )

Add3DCard(PlayerTwo, ref Player2_3DCardsPack, +0.1f, « PlayerTwo_Pack » + i);

for(int i = 0; i < Player2_Cards.Win.Count; i++ )

Add3DCard(PlayerTwo, ref Player2_3DCardsWin, +0.3f, « PlayerTwo_Win » + Player2_3DCardsWin.Count, « PlayerTwoWin »);

}

}

Et on complète notre bouton démarrer avec la donne :

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Démarrer une partie ») )

{

mMenuStep = MenuStep.InGame;

mGameStep = GameStep.PlayerOneBeforeTurn;

PlayerOne.transform.rotation = Quaternion.Euler(0,0,0) ;                                                PlayerTwo.transform.rotation = Quaternion.Euler(0,0,0);

NewGame();

}

Nos joueurs ont désormais leurs paquets de cartes et une pile de cartes gagnantes.

Remarquons que je n’ai pas changé le tag du paquet, le 5ème paramètre n’est pas présent, il prend donc la valeur définie par défaut dans la méthode, c’est-à-dire « », et donc ne change pas le tag de l’objet.

Alors si on clique sur le paquet, on aura le même effet que celui de cliquer sur la carte visible. Mais pas sur le paquet de victoire.

Pour retirer la carte du paquet lorsqu’on prend une carte, j’ai modifié la méthode OnClick :

case « PlayerOneCard »:

if( playerturn==1 )

{

Debug.Log(« Click : PlayerOneCard! »);

OnClickCard(1);

PlayerOne.renderer.enabled = true;

}

Break ;

case « PlayerTwoCard »:

if( playerturn==2 )

{

Debug.Log(« Click : PlayerTwoCard! »);

OnClickCard(2);

PlayerTwo.renderer.enabled = true;

}

break;

Et en ajoutant :

void OnClickCard(int player)

{

if( player==1 )

{

mGameStep = GameStep.PlayerOneTurning;

Remove3DCard(ref Player1_3DCardsPack);

}

if( player==2 )

{

mGameStep = GameStep.PlayerTwoTurning;

Remove3DCard(ref Player2_3DCardsPack);

}

}

Cependant, les cartes ne représentent toujours pas les vraies cartes !

Alors on va affecter la texture de la bonne carte lorsqu’on tourne notre carte.

J’ajoute les membres suivant pour connaître la carte jouée actuellement de chaque côté :

Card Player1_CurrentCard, Player2_CurrentCard;

Je modifie de suite ma méthode OnClickCard :

void OnClickCard(int player)

{

if( player==1 )

{

mGameStep = GameStep.PlayerOneTurning;

Remove3DCard(ref Player1_3DCardsPack);
Player1_CurrentCard= Player1_Cards.GetCard();

UpdateCurrentCard(PlayerOne, Player1_CurrentCard);

}

if( player==2 )

{

mGameStep = GameStep.PlayerTwoTurning;

Remove3DCard(ref Player2_3DCardsPack);
Player2_CurrentCard= Player2_Cards.GetCard();

UpdateCurrentCard(PlayerTwo, Player2_CurrentCard);

}

}

Et j’ajoute celle-ci :

void UpdateCurrentCard(GameObject go, Card c)

{

string resource = «  »;

Debug.Log(c.Type +  » –  » + c.Value);

string val = c.Value.ToString();

if( c.Value == 1 )

val = « A »;

else if( c.Value == 11 )

val = « J »;

else if( c.Value == 12 )

val = « Q »;

else if( c.Value == 13 )

val = « K »;

else

{

}

switch( c.Type )

{

case Card.CardType.Club:

resource = val + « c »;

break;

case Card.CardType.Diamond:

resource = val + « d »;

break;

case Card.CardType.Heart:

resource = val + « h »;

break;

case Card.CardType.Spade:

resource = val + « s »;

break;

}

if( !string.IsNullOrEmpty(resource) )

{

Debug.Log(« Chargement texture :  » + resource);

Object res = Resources.Load(resource);

if( res != null )

{

Debug.Log(« Recuperation texture :  » + resource);

Material newMat = Resources.Load(resource, typeof(Material)) as Material;

if( newMat != null )

{

Debug.Log(« Attribution texture :  » + resource);

go.renderer.material = newMat;

}else{

Debug.LogError(« Impossible de retrouver la ressources :  » + resource);

}

}

else{

Debug.LogError(« Impossible de retrouver la ressources :  » + resource);

}

}

}

Alors attention, j’ai dû copier intégralement le répertoire des matériaux des cartes dans un autre répertoire « Assets\ Resources\ »

Donc tous les matériaux présent dans les sous-répertoires « Assets\BGA\Poker Pack\Models\Card\Materials\ » sont copiés dans le même sous-répertoire « Assets\ Resources\ »

Si je fais ceci, c’est que la fonction = Resources.Load() recherche par défaut dans ce répertoire.

Donc ici

Material newMat = Resources.Load(« 2c », typeof(Material)) as Material;

Ira charger le matériau « Assets\Ressources\2c.mat »

On a plus qu’à changer l’apparence d’un objet en passant par son renderer :

go.renderer.material = newMat;

Maintenant notre jeu ressemble à ceci lorsque l’on tourne nos cartes :

La finalisation du jeu

Je ne vais pas détailler la suite du code, il n’y a plus rien qui ne concerne Unity3D.

Il suffit de modifier le code pour gérer la reprise du paquet gagnant pour le remettre dans le paquet de jeu, de gérer la victoire, je rappelle que mon objet Player1_CurrentCard est de type Card, il suffit de tester le .Value pour connaître la puissance de la carte (transformer le 1 (as) en 14 (pour être plus fort que le roi 13).

Ne vous en faites pas, voici un ZIP contenant le projet complet pour vous aider ;)

media.visyr.ch/Unity3D/Tuto01/Tuto01HSVersion.zip

Et je rappelle l’exemple en live :

http://media.visyr.ch/Unity3D/Tuto01/

Par contre, par respect envers le créateur des modèles de cartes à 2$, je ne vous fournis pas les objets. Du moins pas totalement. Même si c’est libre commercialement, je ne suis pas sûr que cela soit autorisé de donner les objets eux-mêmes.

Je ne vous laisse que les cœurs copiés en carreaux, piques et trèfles. Donc vous aurez 4 x 2 de cœurs, 4 x 3 de cœurs et ainsi de suite.

Si vous souhaitez vraiment terminer le jeu, achetez ses modèles ou créez les. Personnellement un petit don de 2$ ne fait de mal à personne.

Je termine donc ce chapitre sur la création d’un .exe ou une application Android :

Donc sur un build « executable », dans PlayerSettings nous avons ce genre d’info :

J’ai choisi une icône présente dans le projet, à vous de mettre la vôtre.

J’ai mis mon nom de société et mon nom de produit.

Vous pouvez définir la résolution par défaut, plein écran ou non.

Il y a des détails impossibles à modifier à moins d’être en pro, comme la gestion de directx11 par exemple.

Pour un .exe, c’est assez simple.

Pour une version Android, il faut faire attention.

Techniquement, avant de vous lancer dans une app Android, vous devez vérifier la version qui vous intéresse !

En fait la technologie pour Android a évolué et continuera dans ce sens.

Cela devient trop technique pour moi, mais certains téléphones/tablettes ne sont compatibles qu’avec une technologie ArmV6 ou ArmVX, ma tablette Asus tf201 est en ArmV7 par exemple.

Ici Unity3D v4.0 et plus ne supporte que la techno ArmV7 !

Donc tout va bien pour moi.

Mais si je devais ou voulais commercialement être ouvert à tout je devrais faire du ArmV6 également, et autre.

Or… Il faut utiliser Unity3D 3.0 et plus. Heureusement la licence est compatible peu importe la version du logiciel.

Donc il faudra jongler sur deux (ou plus) installations différentes et copier le projet de l’un vers l’autre. Vous ne devriez pas rencontrer de gros problème de compatibilité, sauf si vous utilisez mecanim par exemple… Uniquement sur v4.

L’angoisse hein ?

Bref, il faut être prudent sur notre demande ou notre objectif.

Donc le playersettings de l’Android ressemble lui à ceci :

Le début est pareil, mais dans Other Settings, ça deviens « sympa ».

Comme Android est avant tout du Java, il répond à certaines normes de celui-ci.

Il faut mettre le package de java. Com.Company…

Chaque projet java est défini de la sorte. Donc on y met en général le site web privé ou pro en inversé.

Dans mon cas je mettrais ch.visyr.battlecard. Je n’ai pas testé, mais sauf erreur en java c’est minuscule. Donc je vous recommande d’éviter la majuscule comme le montre l’exemple.

Ensuite l’API, lié à la version d’Android.  Exemple Ice Cream Sandwich est la version Android 4.0 API Level 14 et plus.

Donc là encore ne vous limitez pas à une partie seulement, si vous pouvez mettre le moins c’est mieux. Mais c’est vous qui savez quelle version vous arrivez à supporter et voulez supporter.

Le device Filter, donc ici uniquement la v7 alors qu’en v3 on a le choix.

Après il y a des choix sur l’installation, préférence pour carte sd externe ou interne, les types de droits requis pour le web, etc.

Donc voilà, vous pouvez compiler votre jeu très facilement, il suffit de faire attention à l’objectif et les produits qui le supporterons.

Dans mon cas d’application professionnelle, le téléphone d’un collègue m’oblige à utiliser la version 3.5.7 pour compiler. Mais aucun problème de compatibilité,  normal, c’est pratiquement que du Gui et de l’accès Web pour interroger un webservice. Qui fera l’objet je pense d’un prochain tutorial.

Je n’ai pas de Mac pour tester une compilation Mac, et je m’en excuse. Mais un mec dont son passe-temps était de faire du directx en c# sur visual studio et qui vous ferait un tuto pour un Mac… Soyons d’accord. C’est n’importe quoi.

Pour discuter de l’article, c’est ici : http://raphp.fr/fofo/viewtopic.php?f=2&t=2339

4 décembre 2013

Let’s Play Hearts of Iron III (7)

Classé dans : Article, Let's Play — Mots-clefs : — admin @ 22 h 56 min

Partie 7 : Je ne crois pas en la paix perpétuelle

Partie précédente : http://raphp.fr/blog/?p=365

Novembre 1936

La situation espagnole empire encore pour les Nationalistes:

Ils ont été repoussés dans le quart nord-ouest du pays. L’issue de la guerre est certaine, la seule inconnue étant le temps que cela prendra…

De nouvelles technologies peuvent être recherchées:

La plupart des techs ne s’appliquent pas aux navires déjà construits; à ce stade, seul l’armement anti-aérien peut être upgradé directement, les autres techs ne pouvant être appliquées que sur de nouveaux bateaux. Autant dire que nous n’avons pas l’intention de concurrencer la Grande-Bretagne en créant une flotte italienne de compétition, donc nous allons booster les navires existants par ces quelques techs vaguement utiles – à plus forte raison car les Anglais ont des porte-avions, donc les capacités anti-aériennnes seront vraiment utiles.

Une fois par mois, on vérifie l’état de notre espionnage:

Les Britanniques ont mis le paquet sur le contre-espionnage, après avoir sans doute repéré nos agents – ou des noobs d’autres puissances. Nous décidons de lancer une guerre ouverte en envoyant à nouveau nos propres espions en contre-espionnage, afin de liquider les agents britanniques. Ils retourneront saboter la recherche anglaise lorsqu’il n’y aura plus qu’un ou deux agents ennemis en contre-espionnage.

2 techs de plus à rechercher:

La première débloque la brigade de corps du génie, qui donne divers bonus aux divisions, notamment lors de la traversée de rivières et de l’assaut sur des fortifications. L’autre tech booste l’organisation des brigades de spécialistes – pour l’Italie, ce sera essentiellement pour les troupes de montagne et les ingénieurs. La tech boostant l’organisation de l’infanterie de base est déjà à disposition, donc nous mettons à niveau les autres types de troupes largement utilisées dans notre armée.

Le programme de construction de l’Italie est arrivé à terme. Nous pouvons enfin moderniser nos misérables milices:

La plupart des brigades sont réentraînées pour en faire de l’infanterie; quelques-unes deviendront toutefois des troupes de montagne – qui serviront notamment dans les Alpes lorsqu’il s’agira d’aller chatouiller les Français, et qui éventuellement pourront servir de défense si nous sommes attaqués par les Alliés.

Voyons la différence entre les unités disponibles depuis le début et nos nouvelles recrues:

Les unités de départ sont essentiellement des réservistes, donc tant que nous ne mobilisons pas l’armée ou sommes en guerre, elles ne sont pas remplies à pleins effectifs. Nous sommes néanmoins à un degré de mobilisation des 3/4, ce qui est déjà très bien.
On notera en passant que les divers équipements d’infanterie sont lentement en train d’être mis à jour pour cette brigade.

Si je compare à des brigades fraîchement recrutées:

Je note qu’elles sont pleinement mobilisées, donc ont un effectif de 3′000 hommes. Leur niveau d’organisation est également au maximum, donc 44, alors que la brigade réserviste est à 33.
La dernière brigade de cette division vient à peine d’être recrutée, et son niveau d’organisation est encore en train de remonter – une brigade qui entre en jeu commençant à 0 d’organisation.

L’observateur très attentif notera aussi que cette division est basée à proximité de Tobrouk, donc à l’est de la Libye; elle est donc à la frontière de l’Egypte contrôlée par les Britanniques 

1937

L’année commence en fanfare:

Staline décide de faire le ménage dans son armée. Grand bien lui fasse  ::d
(la décision apporte un bonus massif en unité nationale interne, qui permet notamment de passer des lois bien plus efficaces pour la préparation militaire et la production industrielle, mais qui a des conséquences négatives désastreuses, entre autres, sur le niveau des officiers disponibles pour l’Armée Rouge)

Les Nationalistes espagnols veulent commercer:

Ca arrive un peu tard pour les sauver. Genre 6 mois trop tard 

La 4è et dernière tech d’infanterie 1936 est découverte:

Cela ouvre l’accès à de nombreuses nouvelles techs. D’une part, nous pouvons rechercher le corps des marines (bonus divers, notamment pour des assauts amphibies et à travers des rivières); d’autre part, nous pouvons développer divers équipements spécifiques à des conditions climatiques extrêmes. Deux types peuvent être développés dès 1936, l’arctique et le montagnard; nous n’allons pas attaquer la Finlande de si tôt, donc nous recherchons en premier l’équipement de montagne, qui pourrait servir dès le début de la guerre.

Février 1937

Deux autres techs vont être recherchées:

D’une part, une amélioration des radios italiennes, qui permettront d’espionner les communications ennemies.
D’autre part, les calculateurs mécaniques – ben ouais, ils n’avaient pas de PC à l’époque… Cette tech est de 1938, donc nous subissons un malus pour la rechercher trop tôt, mais vu ce qu’elle nous apporte – un boost à la recherche qui réduit le temps de développement de toutes les techs -, c’est une tech qu’il est rentable de rechercher déjà une année à l’avance.

La situation espagnole progresse peu:

Les franquistes ont réussi à prendre Madrid, mais cela ne les sauvera pas de la fessée qu’ils vont prendre d’ici quelques mois, voire semaines.

Mars 1937

La nouvelle tech:

Sera l’éducation, niveau 1938. Comme la tech précédente, celle-ci booste la recherche, car elle augmente de 5% les points de leadership – permettant notamment de rechercher plus de techs à la fois. Le temps de développement sera très long, mais elle sera néanmoins disponible bien avant le déclenchement de la grande guerre.

Avril 1937

L’évènement aléatoire de l’année:

Augmentation du manpower de l’Italie. Pas que ça nous serve à grand-chose, vu qu’il est déjà étonnamment élevé – au point que je doute d’arriver à l’épuiser un jour.

La prochaine tech à rechercher:

L’efficacité industrielle. Nous produisons plus et mieux pour la même quantité de capacité industrielle. L’autre tech, qui augmente la capacité industrielle totale du pays, était disponible, mais cette dernière implique une augmentation de la consommation de ressources, alors que l’efficacité industrielle a des effets aussi intéressants sans nécessiter plus de ressources.
Ces deux techs sont de 1938, mais comme pour les techs de recherche, il peut s’avérer utile sur le long terme de les chercher un peu à l’avance, vu qu’elles boostent l’ensemble de la production du pays.

Nous disposons d’une nouvelle réserve de 10 espions. Il est temps de choisir une nouvelle cible:

La France est clairement notre 2è souci dans la première année de la guerre, et nous devons tout faire pour assurer sa chute rapide. Les 10 espions seront d’abord chargés de neutraliser les défenses locales avant de passer à leur mission principale.

Découverte intéressante pour notre armée:

Nous pouvons désormais ajouter une brigade du génie à nos divisions. Cela est particulièrement utile lorsqu’il s’agit de franchir des fleuves, de faire des assauts amphibies, et d’attaquer des fortifications. Cette tech débloque l’accès à deux techs complémentaires qui boostent les compétences militaires des ingénieurs et améliorent leurs bonus lors d’assaut à travers des rivières.
Ces deux techs datant 1939, nous attendrons avant de les rechercher. A la place, nous lançons la tech de 1938 boostant la production industrielle – comme les techs de leadership/recherche et l’autre tech industrielle, il est rentable de la lancer avant l’heure.

La France avait peu d’agents en contre-espionnage:

Nous pouvons désormais mettre nos propres agents au travail: sabotage de la production industrielle française. La France est hors-jeu avant la fin 1940, donc le sabotage de la recherche ne servirait à rien – à l’inverse des USA ou de la Grande-Bretagne. Par contre, pour la faire tomber au plus vite et permettre à l’Allemagne de se positionner dans les meilleures conditions face à l’URSS, nous sabotons sa production, afin de réduire légèrement sa capacité militaire lorsque l’attaque arrivera au printemps 1940.

Mai 1937

En Espagne, la fin est imminente:


Le réduit nationaliste a explosé et devrait être conquis ces prochaines semaines…

Pour la nouvelle tech, nous nous penchons à nouveau sur la marine royale:

Les sous-marins ne sont pas forcément les plus efficaces, mais ils sont bon marché. Un groupe de sous-marins court un peu moins de risques qu’un groupe de destroyers – ne serait-ce que parce qu’il sera détecté moins aisément. Bref, nous allons patiemment mettre à jour les techs de 1937 des sous-marins, ce qui permettra également d’upgrader l’armement (torpilles et anti-aérien) de tous les submersibles existants.

Juillet 1937

L’AI ne perd pas de temps. A peine le mois de juillet débute que le feu d’artifice commence en Asie:

La guerre mondiale commence nettement plus tôt à l’Est, avec l’assaut progressif du Japon sur ses voisins chinois.
Précisons qu’à cette époque, le Japon contrôle directement Taiwan et toute la Corée, ainsi que son satellite en Mandchourie, sous forme d’état fantoche.
Le reste de la Chine est divisé entre diverses cliques militaires, chefs de guerre et rebelles communistes menés par Mao – mais de peu de poids à ce moment de l’histoire. La Chine nationaliste de Chiang Kai-Chek chapeaute en théorie l’écrasante majorité du pays.
Cette guerre va être intéressante, car la Chine est un très gros morceau pour le Japon (au moins aussi gros que l’est l’URSS pour l’Allemagne), et elle a historiquement résisté péniblement pendant toute la guerre, évitant une occupation complète par le Japon et une défaite totale.
On va voir ce que cela donne dans cette partie; si nous voulons que le Japon tienne le coup face à la puissance américaine dans quelques années, il faudrait qu’il arrive à liquider totalement la Chine avant d’attaquer les USA…

Si une guerre commence, une autre se termine:

L’Espagne est définitivement hors de portée de l’Axe…

Le Duce n’est pas content. Vu le langage utilisé, la rédaction a préféré censurer le contenu de son discours 

Dans la foulée, il décide de renforcer les capacités de production du pays:

L’augmentation du dissent doit être contrée par une production plus grande de biens de consommation, mais le gain de capacité industrielle reste significatif pour les 4 prochaines semaines.
A noter que cet évènement peut aussi se produire si l’on joue un régime communiste, mais pour des raisons évidentes, il n’a absolument aucun effet   :mrgreen:

L’agression japonaise est récompensée:

Il entre dans le club des expansionnistes militaristes. Ironiquement, l’Italie en est encore exclue, et reste officiellement neutre et non-alignée. Ha!

La continuation de nos préparatifs militaires et technologiques, ainsi que les aléas de l’aventurisme japonais en Extrême-Orient suivront, dans le prochain épisode…

Pour discuter de l’article, c’est ici : http://raphp.fr/fofo/viewtopic.php?f=2&t=2335

Propulsé par WordPress