Diferència entre revisions de la pàgina «ASIX-M3-UF3-A2.2-Pràctica fitxers de text»

De wikiserver
Dreceres ràpides: navegació, cerca
(El programa principal (JocArena))
 
(Hi ha 11 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
Combat a l'arena - Versió 2
+
'''Combat a l'arena - Versió 2'''
  
 
==Rànquing==
 
==Rànquing==
 +
 +
Partint del programa existent, es vol afegir una nova funcionalitat:
 +
 +
:* Mantenir un rànquing amb les deu millor puntuacions obtingudes. Aquestes es desen en un fitxer, de manera que es mantenen entre partides diferents. En finalitzar el joc, si un jugador ha obtingut una puntuació que mereix estar entre les deu primeres, pot indicar quines són les seves inicials (tres lletres), perquè hi constin associades a la puntuació.
 +
 +
:* Primer de tot caldrà crear el paquet fitxers.
 +
 +
:* Dins del paquet fitxers crearem el mòdul '''ranquing'''.
 +
::Aquest mòdul serà l’encarregat de gestionar el fitxer amb les màximes puntuacions. Ha de poder tant llegir-les per mostrar-les per pantalla com modificar-ho per escriure’n de noves. Aquesta llista tindrà sempre 10 entrades, i inicialment, quan encara no s’ha jugat cap partida, hi haurà un seguit de puntuacions per defecte.
 +
 +
Mètodes que cal codificar:
 +
 +
'''generaFitxerInicial():''' Aquest mètode crearà si no existeix el fitxer "Ranquing.txt" en el directori de treball. Les dades amb les quals l'inicialitzarà seran les següents:
 +
<pre>
 +
JUG 10
 +
JUG 9
 +
JUG 8
 +
JUG 7
 +
JUG 6
 +
JUG 5
 +
JUG 4
 +
JUG 3
 +
JUG 2
 +
JUG 1
 +
</pre>
 +
on JUG és l'identificador del jugador i el número representa la puntuació d'aquest jugador.
 +
 +
'''cercarRanking(punts):''' Donada una puntuació retorna la posició on s'ha de col·locar. Primer de tot cal cridar al mètode anterior per assegurar-se que el fitxer existeix. Si no té una puntuació prou alta per guardar-se en el fitxer retornarà -1.
 +
 +
'''entrarPuntuacio(inicials, punts, pos):''' Cal posar aquesta puntuació amb les inicials del jugador a la posició que toqui. Donat el funcionament d'aquest tipus de fitxers de text i donat que no podem escriure al mig, la tàctica és la següent: anem llegint les puntuacions anteriors a la posició i les escrivim en un fitxer temporal, a continuació en aquest mateix fitxer guardem la puntuació nova i després guardem les puntuacions posteriors. Una vegada finalitzat aquest procés, eliminem el fitxer original i reanomenem el fitxer temporal amb el nom del fitxer original.
 +
 +
'''imprimirRanking():''' Imprimirà el contingut del fitxer.
  
 
==Modificació dels mòduls originals==
 
==Modificació dels mòduls originals==
  
 
===Mòdul EntradaTeclat===
 
===Mòdul EntradaTeclat===
 +
 +
'''preguntarInicials():''' Llegeix i retorna en majúscules les inicials del jugador. Cal verificar que només siguin tres caràcters.
  
 
===Mòdul SortidaPantalla===
 
===Mòdul SortidaPantalla===
 +
 +
'''mostrarRanking():''' Simplement cridarà al mètode '''imprimirRanquing'''
  
 
===El programa principal (JocArena)===
 
===El programa principal (JocArena)===
 +
 +
Importeu el mòdul ranking ('''from fitxers import ranking''') i al final del mètode '''inici''' afegeix el següent codi:
 +
 +
<source lang="python">
 +
punts = lluitador.llegirPunts(jugador)
 +
pos = ranking.cercarRanking(punts)
 +
if pos != -1:
 +
  inicials = entrada.preguntarInicials()
 +
  ranking.entrarPuntuacio(inicials, punts, pos)
 +
  sortida.mostrarRanking()
 +
else:
 +
  print("La puntuació no està entre les 10 millors.")
 +
</source>

Revisió de 14:03, 3 maig 2021

Combat a l'arena - Versió 2

Rànquing

Partint del programa existent, es vol afegir una nova funcionalitat:

  • Mantenir un rànquing amb les deu millor puntuacions obtingudes. Aquestes es desen en un fitxer, de manera que es mantenen entre partides diferents. En finalitzar el joc, si un jugador ha obtingut una puntuació que mereix estar entre les deu primeres, pot indicar quines són les seves inicials (tres lletres), perquè hi constin associades a la puntuació.
  • Primer de tot caldrà crear el paquet fitxers.
  • Dins del paquet fitxers crearem el mòdul ranquing.
Aquest mòdul serà l’encarregat de gestionar el fitxer amb les màximes puntuacions. Ha de poder tant llegir-les per mostrar-les per pantalla com modificar-ho per escriure’n de noves. Aquesta llista tindrà sempre 10 entrades, i inicialment, quan encara no s’ha jugat cap partida, hi haurà un seguit de puntuacions per defecte.

Mètodes que cal codificar:

generaFitxerInicial(): Aquest mètode crearà si no existeix el fitxer "Ranquing.txt" en el directori de treball. Les dades amb les quals l'inicialitzarà seran les següents:

JUG 10
JUG 9
JUG 8
JUG 7
JUG 6
JUG 5
JUG 4
JUG 3
JUG 2
JUG 1

on JUG és l'identificador del jugador i el número representa la puntuació d'aquest jugador.

cercarRanking(punts): Donada una puntuació retorna la posició on s'ha de col·locar. Primer de tot cal cridar al mètode anterior per assegurar-se que el fitxer existeix. Si no té una puntuació prou alta per guardar-se en el fitxer retornarà -1.

entrarPuntuacio(inicials, punts, pos): Cal posar aquesta puntuació amb les inicials del jugador a la posició que toqui. Donat el funcionament d'aquest tipus de fitxers de text i donat que no podem escriure al mig, la tàctica és la següent: anem llegint les puntuacions anteriors a la posició i les escrivim en un fitxer temporal, a continuació en aquest mateix fitxer guardem la puntuació nova i després guardem les puntuacions posteriors. Una vegada finalitzat aquest procés, eliminem el fitxer original i reanomenem el fitxer temporal amb el nom del fitxer original.

imprimirRanking(): Imprimirà el contingut del fitxer.

Modificació dels mòduls originals

Mòdul EntradaTeclat

preguntarInicials(): Llegeix i retorna en majúscules les inicials del jugador. Cal verificar que només siguin tres caràcters.

Mòdul SortidaPantalla

mostrarRanking(): Simplement cridarà al mètode imprimirRanquing

El programa principal (JocArena)

Importeu el mòdul ranking (from fitxers import ranking) i al final del mètode inici afegeix el següent codi:

punts = lluitador.llegirPunts(jugador)
pos = ranking.cercarRanking(punts)
if pos != -1:
   inicials = entrada.preguntarInicials()
   ranking.entrarPuntuacio(inicials, punts, pos)
   sortida.mostrarRanking()
else:
   print("La puntuació no està entre les 10 millors.")