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:

2 comentaris:

  1. Buff, ha sigut tot un esforç entendre-ho, però fins ara no m'he perdut. Ja fa molt que no faig res de matemàtiques a més nivell que el de la ESO (coses de cursar el Batxillerat Humanístic) i no entenc lo d'operacions amb coma flotant, però el tema de com es configura la finestra m'ha quedat més o menys clar.
    Jo també tinc ganes d'aprendre Python, de moment em guardaré la teva entrada per quan m'animi definitivament a aprendre'l.

    ResponElimina
  2. Mola. He trigat un mes en adonar-me que m'has deixat un comentari xDDDDDDD

    Estic mirant de fer les explicacions força entenedores per tal que tothom pugui jugar una estona. A veure si et resolc els dubtes.

    Les operacions en coma flotant són les operacions amb decimals de tota la vida. Es diuen així per que la coma que delimita els decimals es mou (no és el mateix 1,504 que 15,04), enlloc d'estar fixa com en les operacions bàsiques (se suposa que està a la dreta de tot en plan 15,).

    Crec que Python et serà més fàcil d'entendre que altres llenguatges més coneguts com Java o C, ja que intenta apropar-se el màxim possible al llenguatge natural.


    Wu Ying Ren 死

    ResponElimina