Del creador de "Back To Kowloon"

dimecres, 18 d’agost del 2010

Primeres passes : )

Al final, he escollit Python. Per què? Per que vull aprendre un llenguatge nou, i que el producte sigui open source. I poc més. No descarto, si la cosa avança i tinc temps, fer un port a XNA i matar dos pájaros de un tiro. Però, de moment, Python. Algunes característiques remarcables de Python són aquestes:

-Python és un llenguatge interpretat. Això vol dir que fa servir un intèrpret.

-Python és dinàmic. Això vol dir que pot interpretar el codi en temps d'execució.

-Python proporciona una sintaxi molt simple. Com les meves explicacions xD

I com a mostra, el típic "Hello World".

print "Hello World"

I res més. Si poseu aquesta línia en un fitxer .py i feu python fitxer.py o directament a l'intèrpret (executant python des de la línia de comandes), obtindreu el resultat esperat. Més simple? Es pot, però per fer-ho més simple ens caldrien dispositius lectors de la ment que ara mateix (crec) no estan disponibles xD

L'intèrpret pot manegar operacions matemàtiques simples com ara 3+5 directament. També pot fer càlculs en coma flotant si fem, per exemple, 3.+5 (o 3+5.). I segur que fa càlculs més complexos i altres coses que desconec i us faran flipar, segur.

Perfecte. I ara què?

Doncs ara, potser que provem a fer alguna cosa. Per exemple, crear una finestra.



Apa, què difícil!!

No ho és tant. I gràcies a pygame, encara menys. Compteu les línies de codi que es necessiten:

"@author: wuyingren
import pygame

def main():
    pygame.display.set_mode((640,480))
    pygame.display.set_caption("Hello World")
    pygame.display.flip()
    active=True
   
    while active:
       
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                active=False               
   
if __name__=='__main__':
    pygame.display.init()
    main()

No arribem a 20.

Mola! Però...què significa tota aquesta merda?

Doncs bé. És molt fàcil. Primerament, tots els que hàgiu fet programació sabreu intuir què dimonis és la instrucció "import". Per als que no ho sàpiguen: la fem servir per carregar mòduls externs que utilitzarem al codi (en aquest cas, els pertanyents a pygame). Els comentaris, per cert, es marquen amb unes cometes " .

Abans de seguir cal entendre bé una cosa. Python "interpreta" els sagnats. Què vull dir amb això? Que enlloc de fer servir els típics claudàtors { } i els típics punts i coma ";" per delimitar els mètodes, Python fa servir els dos punts ":" i  el sagnat. Així, cal respectar els diferents nivells de sagnat. Aquest fragment de codi, per exemple, seria incorrecte i l'intèrpret ens retornaria error:

    while active:
       
        for event in pygame.event.get():
        if event.type==pygame.QUIT:
       active=False       

La forma correcta és:
    while active:
       
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                active=False         

Us recomano l'ús d'algun IDE com ara Eclipse (amb el mòdul pydev) que us ajudi a formatar el codi automàticament, per que pot donar molts maldecaps. Sobretot als despistats, com un servidor.

Bé, passem a la carn. El nostre codi està format per dues parts clarament diferenciades. Una és el mètode main, i una altra...el bloc if del final. Aquest bloc és una mena de "trampa" que es fa servir per indicar què cal fer si el mòdul no s'ha importat. És a dir, si l'intèrpret arriba al nostre codi directament (i no a causa d'una instrucció mygame.main()), aquest bloc if li indica que ha de fer el següent:
    pygame.display.init()
    main()
La primer instrucció inicialitza un objecte pygame.display, que representa (i controla) una finestra i el seu contingut. La segona instrucció li indica, bàsicament, que executi el mètode main(). Ara ja sembla lògic i tot, oi? : )

Si feu la prova de treure aquest fragment de codi, veureu que la finestra no apareix. Però si cridéssiu el main() des d'un altre mòdul (o des de l'intèrpret, fent l'import corresponent), llavors SI que us apareixeria la finestra.

OK, ho entenc. I què coi fa el main()?

Doncs configura uns quants paràmetres de la finestra (les mides i el títol)

    pygame.display.set_mode((640,480))
    pygame.display.set_caption("Hello World")

I després, cridem flip() per tal de dibuixar la finestra a la pantalla. Després, creem un boolean active que ens serveix per controlar si la finestra s'ha de tancar. El bucle següent:

    while active:
       
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                active=False   

Fa que, mentre active tingui valor True, es busqui (pygame.event.get()) si existeix un event de tipus QUIT. Si es dona el cas, es marca active com a False. A la següent iteració, la condició es trenca i el programa surt del bucle. Com que no hi ha més instruccions, el programa termina.

Si feu la prova, la finestra es tanca tant fent clic al botó corresponent de la barra de títol com prement Alt+F4.

I jo diria que, de moment, ho podem deixar aquí. Si teniu preguntes, suggerències o crítiques les podeu expressar als comentaris. A la web de pygame hi ha un munt de tutorials i exemples més, i també en d'altres webs dedicades a això mateix. Podeu consultar alguns links al final del post.
Al proper post tractarem com posar cosetes a la finestra i tal...Fins llavors!

Wu Ying Ren 死


Enllaços d'interès:

divendres, 13 d’agost del 2010

Primer (bé, segon xD) obstacle: Java? Python? C#?

Confesso que ja hi ha una part de codi feta en Python, però...ja que he fet un bloc, potser que comencem des del principi, no? ^_^

Des d'un primer moment tenia clar quin tipus de joc volia crear: un RPG clàssic, d'estil japonès. Un petit homenatge a obres mestres com els primers Final Fantasy. Altres opcions que em van passar pel cap van ser crear un petit manager de futbol o F1, un joc conversacional, un arcade o un joc de preguntes i respostes en plan Trivial Pursuit. Però, finalment, em vaig decantar pel RPG per una raó: un amic em va recordar que jo ja tenia un projecte de RPG. Un que, amb sort, encara deu estar als servidors de la UPC xDD

El cas és que vaig descartar aquests altres projectes per a un futur. I, un cop decidit quin tipus de joc crear, la primera pregunta que em vé al cap és aquesta: quin llenguatge faig servir per programar el meu joc? Ràpidament em va venir un llenguatge al cap: Java. L'únic que conec una mica bé, de fet. 

Llavors vaig pensar que estaria bé crear el joc, per exemple, per a un sistema comercial com ara la PSP. Em vaig informar i vaig trobar que Microsoft té una plataforma per a indie developers, com jo ara mateix. XNA, un estàndard basat en C# creat  per Microsoft que permet crear un joc cross-platform compatible amb sistemes Windows, Xbox 360, Zune i Windows Phone. Pots enviar jocs a Live i, amb sort, algú els juga. Sony ha creat recentment les minis, uns jocs descarregables limitats a 100 mb per a PS3 i PSP on estudis independents poden trobar la seva oportunitat. Són senzills i barats. Però cal establir un estudi, presentar un projecte seriós i pagar certes quantitats. De moment, per desgràcia per a mi, l'univers PlayStation queda descartat.

Finalment vaig recordar un llenguatge que havia provat d'aprendre pel meu compte i em va semblar força flexible: Python.

Tres alternatives. Què m'ofereix cadascuna? Doncs, a grosso modo...

- Java
  • Pros: Enorme portabilitat, facilitat d'ús, el domino bastant :D
  • Contres: No em convencen les llibreries existents, sembla més indicat per a aplicacions que per a jocs, li tinc mania xD
- XNA/C#
  • Pros: Abstracció molt alta, proposta amb futur, suport de Microsoft, possibilitat de publicar el joc en un lloc "concorregut", publicar per a PC és gratuït.
  • Contres: Portabilitat limitada (per exemple, Linux es queda fora), el producte no serà open source, he d'aprendre C# (cal dir que s'assembla a Java), no tinc una X360 :(
- Python
  • Pros: Gran portabilitat (fins i tot alguns SO com Symbian), flexibilitat, pygame proporciona bona abstracció.
  • Contres: És complicat d'entendre (és un concepte diferent), encara no el domino, requereix instal·lar un software que no està tan estés com ara la JavaVM.
Si algú s'està fent la pregunta, ha d'analitzar les seves pròpies possibilitats. A mi Python, tot i agradar-me, en dóna força maldecaps. Resulta confús fer-se amb un concepte nou un cop ja t'han ficat al cervell que les coses es fan d'una altra manera. XNA és una eina que em podria ser molt útil en el futur. Java i Python, però, aporten un component de llibertat extra. Tot i que Java...alguna cosa em fa descartar-lo ja d'entrada -_-

S'accepten suggerències i consells. No ho tinc gaire clar, la veritat. No obstant, suposo que tiraré endavant el que ja tinc fet en Python i, si de cas, es podria fer un port a C# més endavant. Algú vol dir la seva?

Wu Ying Ren 死

dijous, 12 d’agost del 2010

Primer dia (més o menys)

Se suposa que jo m'havia de dedicar a fer videojocs i tal. Però en aquest país això no és gaire fàcil. Així que un dia em vaig dir: fes-ne un pel teu compte. I ja farà un any que m'hi vaig posar. Amb un amic i alguns tutorials trobats aquí i allà ens vam posar a fer un RPG clàssic d'estil japonès. Però ho vam deixar córrer als pocs mesos per diversos motius.

I avui m'he dit: allò dels rectangles ho pots fer ben fàcilment, el mapa està dividit en rectangles dropo. I vosaltres direu: com? Doncs això, que crec que sé com seguir tirant endavant el projecte. I llavors m'he dit: hauries de fer un bloc per a que quedi constància i es pugui fer servir el teu treball com a referència.

I aquí el teniu. Us presento "Name your Hero", un bloc on intentaré anar posant les meves aventures en el món de la programació de videojocs (amateur) ^_^

またね!

Wu Ying Ren 死