Passa 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

TDDs + reutilització d'objectes en Visual Studio 2012

Doncs això, mai m'he mostrat partidari de cap metodologia de programació, ni tan sols de la programació orientada a objectes... però deu ser que em faig major ;) Anem a matar en un post dos pardals d'un tir. Anem a gastar una de les bases de les metodologies àgils (en realitat no té per què, es pot emprar en qualsevol metodologia) i anem a començar a veure com fer codi "multiplataforma". Anem a gastar Visual Studio 2012. Creem una solució de Portable Class Library (en C#): Creem una nova classe, Dau: namespace RollDice {     public class Dau     {     } Sense cap mètode. Per què sense cap mètode? Ahí està la gràcia dels TDD (Test Driven Development, Desenvolupament Orientat a Test). Anirem omplint la classe segons fallen els tests. Ara anem a afegir una nova solució, què serà de test c#: Ens crearà una classe de test buida, li canviarem el namespace per a que siga el mateix que la classe dau: [TestClass]     public class testDau     {          [TestMethod

Reciclant un vell portàtil (i 3)

O també podria titular-se, la primera aplicació en Android. Crec que vaig a deixar d'intentar reciclar este ordinador, no pot amb l'eclipse, he intentat fer esta aplicació i m'ha costat déu i ajuda. Provaré a fer coses que necessiten entorn gràfic en un altre ordinador. Quan comence la part de servidor, si que podré gastar-lo de nou, ja que node.js (Recomanat pel meu amic Jaume) és molt lleuger, i amb la llibreta que duu windows es podrà fer els programes de sobra ;). Bo, la primera aplicació l'he modificada un poc de l'anterior (l'aspecte), i l'he deixat com en la figura. Simplement he posat un botó, i dos textView. No vaig a entrar en detalls de com es fa, de posar noms adients ni res per l'estil, ja que és una aplicació menuda i de prova. l'objectiu serà que en el textView2 (que no es veu, està davall del textView1) aparega un missatge "has apretat el botó" en el moment que apretes el botó. Anirem al fitxer principal en java, en el

Google no és programari lliure

Duc des de ni sé els anys treballant en Linux. De fet, vaig passar de MS-DOS a Linux sense passar per windows 95. Només he gastat windows (ho he de confessar)per a jugar, i farà un any, el windows 8. No m'ha agradat i ara he tornat a Linux. Valga esta confessió personal per explicar el meu dubte existencial. Hi ha molta gent que critica Apple o Microsoft i diu que l'alternativa és Android , i es compra un Samung, per exemple. M'he parat a pensa-ho i pràcticament és el mateix. Android pot ser bastat en Linux i tinga bona part de codi obert, però hi ha una part que no. I el núvol de Google és completament tancat (algú té el codi del buscador o de gmail?). En general (i a no ser que instal·lem alguna rom on tot siga lliure), és un poc més lliure que ios (Darwin, el codi font del kernel d'ios, és de codi obert, el que és tancat és la seua interfície). És a dir que els serveis que proporcionen les tres companyies (buscador, correu, núvol...) són igual de tancats (i estan sig