Diferència entre revisions de la pàgina «ASIX-M3-UF2-Banc de Solucions»

De wikiserver
Dreceres ràpides: navegació, cerca
Línia 1: Línia 1:
1. Regne de Dracs
+
==Regne de Dracs==
  
 
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...   
 
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...   
Línia 166: Línia 166:
 
-->
 
-->
  
3. Mastermind
+
==Mastermind==
  
 
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:
 
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:
Línia 281: Línia 281:
 
-->
 
-->
  
4. El Penjat
+
==El Penjat==
  
 
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:
 
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:
Línia 430: Línia 430:
 
     # Vols continuar jugant?
 
     # Vols continuar jugant?
 
     fiJoc = not jugar()
 
     fiJoc = not jugar()
 +
</source>
 +
-->
 +
 +
==3 en ratlla==
 +
 +
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.
 +
 +
:* El jugador i l'ordinador alternen les jugades.
 +
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida
 +
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.
 +
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.
 +
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.
 +
:* El programa permetrà tornar a jugar si així o vol el jugador.
 +
 +
<!--
 +
<source lang=python>
 +
# Ta Te Ti https://inventwithpython.com/es/
 +
 +
import random
 +
from os import system
 +
 +
 +
 +
def dibuixarTauler(tauler):
 +
 +
    # Aqiesta fimcoó dibuixa el tauler del joc
 +
 +
    system("clear")
 +
 +
    # "tauler" és una llista de 10 cadenes (obviem la posició 0 de la llista)
 +
 +
    print(' 3 en ratlla')
 +
    print()
 +
    print('  |  |')
 +
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])
 +
    print('  |  |')
 +
    print('-----------')
 +
    print('  |  |')
 +
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])
 +
    print('  |  |')
 +
    print('-----------')
 +
    print('  |  |')
 +
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])
 +
    print('  |  |')
 +
 +
 +
def escollirSimbolJugador():
 +
 +
    # Permet al jugador escollir el símbol en el que vol jugar.
 +
 +
    # Retorna una llista, en la posició 0 el símbol del jugador i en la 1 el de l'ordinador.
 +
 +
    simbol = ''
 +
    while not (simbol == 'X' or simbol == 'O'):
 +
        print('Escull símbol: X o O?')
 +
        simbol = input().upper()
 +
    if simbol == 'X':
 +
        return ['X', 'O']
 +
    else:
 +
        return ['O', 'X']
 +
 +
def jugadorInici():
 +
    # L'atzar decideix quin jugador comença.
 +
 +
    if random.randint(0, 1) == 0:
 +
        return 'Ordinador'
 +
    else:
 +
        return 'Jugador'
 +
 +
def simbolTorn(torn, simbolJugador, simbolOrdinador):
 +
   
 +
    # Retorna el simobol del que comenci.
 +
 +
    if torn == 'Jugador':
 +
        return simbolJugador
 +
    else:
 +
        return simbolOrdinador
 +
 +
def iniciJoc():
 +
    simbolJugador, simbolOrdinador = escollirSimbolJugador() 
 +
    tornInici = jugadorInici()
 +
    simbolInici = simbolTorn(tornInici, simbolJugador, simbolOrdinador)
 +
    return [tornInici, simbolInici]
 +
 +
def jugarDeNou():
 +
 +
    # Retorna True si el jugador vol jugar un altre cop, en cas contrari retorna False.
 +
 +
    print('Vols jugar de nou? (sí/no)?')
 +
    return input().lower().startswith('s')
 +
 +
 +
def ferJugada(tauler, simbol, jugada):
 +
 +
    tauler[jugada] = simbol
 +
 +
 +
def jugadaGuanyadora(tauler, simbol):
 +
 +
    # Donat un taulr i un símbol, retorna True si ha trobat el símbol en la mateixa línia o diagonal.
 +
 +
    return ((tauler[7] == simbol and tauler[8] == simbol and tauler[9] == simbol) or # horitzontal superior
 +
            (tauler[4] == simbol and tauler[5] == simbol and tauler[6] == simbol) or # horitzontal mitja
 +
            (tauler[1] == simbol and tauler[2] == simbol and tauler[3] == simbol) or # horitzontal inferior
 +
            (tauler[7] == simbol and tauler[4] == simbol and tauler[1] == simbol) or # vertical esquerra
 +
            (tauler[8] == simbol and tauler[5] == simbol and tauler[2] == simbol) or # vertical mitja
 +
            (tauler[9] == simbol and tauler[6] == simbol and tauler[3] == simbol) or # vertical dreta
 +
            (tauler[7] == simbol and tauler[5] == simbol and tauler[3] == simbol) or # diagonal
 +
            (tauler[9] == simbol and tauler[5] == simbol and tauler[1] == simbol))  # diagonal
 +
 +
 +
def obtenirDuplicatTauler(tauler):
 +
 +
    # Duplica la llista del taulr i retorna el duplicat.
 +
 +
    dupTauler = []
 +
    for element in tauler:
 +
        dupTauler.append(element)
 +
    return dupTauler
 +
 +
 +
def espaiLliure(tauler, jugada):
 +
 +
    # Retorna True si hi ha espai per fer la jugada en el tauler.
 +
 +
    return tauler[jugada] == ' '
 +
 +
 +
def obtenirJugadaJugador(tauler):
 +
 +
    # Permet al jugador introduir una jugada i la vàlida.
 +
 +
    jugada = ' '
 +
    while jugada not in '1 2 3 4 5 6 7 8 9'.split() or not espaiLliure(tauler, int(jugada)):
 +
        print('Jugada? (1-9)')
 +
        jugada = input()
 +
    return int(jugada)
 +
 +
 +
def jugadaAtzar(tauler, llistaJugades):
 +
 +
    # Retorna una jugada vàlida de les possibles (llistaJugades).
 +
 +
    # Retorna None si ho ha cap jugada vàlida.
 +
 +
    jugadesPossibles = []
 +
    for casella in llistaJugades:
 +
        if espaiLliure(tauler, casella):
 +
            jugadesPossibles.append(casella)
 +
    if len(jugadesPossibles) != 0:
 +
        return random.choice(jugadesPossibles)
 +
    else:
 +
        return None
 +
 +
 +
def obtenirJugadaOrdinador(tauler, simbolOrdinador):
 +
 +
    # Donat un tauler i el símbol de l'ordinador, determina la jugada a fer.
 +
 +
    if simbolOrdinador == 'X':
 +
        simbolJugador = 'O'
 +
    else:
 +
        simbolJugador = 'X'
 +
 +
    # Algoritme d'IA (Inteligència Artifical) del 3 en ratlla.
 +
 +
    # Primer, verifica si pot guanyar en la propera.
 +
 +
    for casella in range(1, 10):
 +
        copiaTauler = obtenirDuplicatTauler(tauler)
 +
        if espaiLliure(copiaTauler, casella):
 +
            ferJugada(copiaTauler, simbolOrdinador, casella)     
 +
            if jugadaGuanyadora(copiaTauler, simbolOrdinador):
 +
                return casella
 +
 +
 +
    # Verifica si el jugador podria guanya en la propera jugada, i bloqueja la casella.
 +
 +
    for casella in range(1, 10):
 +
        copiaTauler = obtenirDuplicatTauler(tauler)
 +
        if espaiLliure(copiaTauler, casella):
 +
            ferJugada(copiaTauler, simbolJugador, casella)     
 +
            if jugadaGuanyadora(copiaTauler, simbolJugador):
 +
                return casella
 +
 +
    # Intenta ocupar una de les cantonades lliures.
 +
 +
    jugada = jugadaAtzar(tauler, [1, 3, 7, 9])
 +
    if jugada != None:
 +
        return jugada
 +
 +
 +
    # De estar lliure, intenta ocupar la casella central.
 +
 +
    if espaiLliure(tauler, 5):
 +
        return 5
 +
 +
 +
    # Ocupa aleatoriament un dels costats.
 +
 +
    return jugadaAtzar(tauler, [2, 4, 6, 8])
 +
 +
def obtenirJugada(tauler, torn):
 +
    if torn[0] == 'Jugador':
 +
        jugada = obtenirJugadaJugador(tauler)
 +
    else:
 +
        jugada = obtenirJugadaOrdinador(tauler, torn[1])
 +
    return jugada
 +
 +
def canviTorn(torn):
 +
    if torn[0] == 'Jugador':
 +
      torn[0] = 'Ordinador'
 +
    else:
 +
      torn[0] = 'Jugador'
 +
    if torn[1] == 'X':
 +
      torn[1] = 'O'
 +
    else:
 +
      torn[1] = 'X'
 +
 +
 +
def missatgeFiPartida(resultat):
 +
    if resultat == 'Jugador':
 +
        print('Enhorabona, has guanyat!')
 +
    elif resultat == 'Ordinador':
 +
        print("L'ordinador t'ha vençut! Has perdut.")
 +
    else:
 +
        print('Empat!')
 +
 +
# Programa principal
 +
 +
print('Benvingut al 3 en ratlla!')
 +
 +
jugar = True
 +
while jugar:
 +
 +
    # Reseteja el tauler
 +
   
 +
    MAXJUGADES = 9
 +
    tauler = [' '] * 10
 +
    dibuixarTauler(tauler)
 +
 +
   
 +
    # torn: llista on posició 0 conté qui li toca jugar ara i posició 1 símbol corresponent
 +
    torn = iniciJoc()
 +
 +
    hihaGuanyador = False
 +
    jugades = 0
 +
    print(torn[0] + ' comença el joc.')
 +
    while not hihaGuanyador and jugades < MAXJUGADES:
 +
        jugada = obtenirJugada(tauler,torn)
 +
        ferJugada(tauler, torn[1], jugada)
 +
        jugades += 1
 +
        dibuixarTauler(tauler)
 +
        if jugadaGuanyadora(tauler, torn[1]):
 +
            hihaGuanyador = True
 +
        else:
 +
            canviTorn(torn)
 +
    if hihaGuanyador:
 +
        missatgeFiPartida(torn[0])
 +
    else:
 +
        missatgeFiPartida('Empat')
 +
    jugar = jugarDeNou()
 
</source>
 
</source>
 
-->
 
-->

Revisió del 14:35, 22 gen 2021

Regne de Dracs

En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...

  • Mòduls a emprar:
from random import randint  # per distribuir els dracs en les coves aleatoriament
from time import sleep      # per fer més "emocionant" el final del joc
  • El programa principal podria ser semblant a:
# Programa principal 
fiJoc = False
while not fiJoc:
    mostrarIntroduccio()
    numeroDeCova = escollirCova()
    explorarCova(numeroDeCova)
    jugarDeNuevo = jugar()

2. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un nombre senar de files i columnes on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar des de 1 fins a n2 on n és el numero de files i columnes.

Com construir-lo?

  • El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).
  • El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).
  • Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.
  • A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).
  • Un exemple de quadrat màgic per a N=5 seria:
      23  6 19  2 15
      10 18  1 14 22
      17  5 13 21  9
       4 12 25  8 16
      11 24  7 20  3
  • El programa tindrà les següents funcions:
llegirDimensio: Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.
inicialitzarQuadrat: Simplement posem tots els valors a 0
calculaPosicioInicial: Segons la dimensió, calculem la primera posició
assignaValor: Posa un valor en una posició
calcularNovaPosicio: Retorna els valors de fila i columna vàlids per a col·locar el proper valor.
imprimirQuadrat: Treu per pantalla el quadrat màgic,
  • El programa serà semblant a aquest :
dim = llegirDimensio()
qm = inicialitzarQuadrat(dim)
pos = calculaPosicioInicial(dim)
limit = dim*dim;
for valor in range(1,limit+1):
   assignaValor(qm,pos,valor)
   pos = calcularNovaPosicio(qm, dim, pos) 
imprimirQuadrat(qm)

Mastermind

El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:

  • El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).
  • El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.
  • L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).
  • Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:
  • Encerts: quants números s'han encertat i es troben en la posició correcta .
  • Coincidències: quants números s'han encertat però no es troben en la posició correcta.
  • Exemple:
  • codi: 7539
  • proposta: 2590
  • pistes: 1 encert i 1 coincidència.
  • El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents.
  • El programa permetrà tornar a jugar si així o vol el jugador.
  • Diagrama de flux
Diagrama flux "Mastermind"


El Penjat

El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:

  • Es presenta una forca i un guio per a cada lletra de la paraula.
  • El jugador proposa lletres (d'una en una) i:
  • si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.
  • sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).
  • El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.
  • El programa permetrà tornar a jugar si així o vol el jugador.
  • Diagrama de flux
Diagrama flux "El Penjat"

3 en ratlla

El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.

  • El jugador i l'ordinador alternen les jugades.
  • El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida
  • L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.
  • La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.
  • Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.
  • El programa permetrà tornar a jugar si així o vol el jugador.