En aquest tema, aprendrem a construir un joc simple utilitzant Lua. Aquest exercici ens permetrà aplicar molts dels conceptes apresos en els mòduls anteriors, com ara variables, estructures de control, funcions, taules i més. El joc que crearem serà un joc de "Endevina el Número", on l'usuari haurà d'endevinar un número generat aleatòriament per l'ordinador.

Objectius del Tema

  • Aplicar conceptes bàsics i intermedis de Lua en un projecte pràctic.
  • Aprendre a estructurar un projecte de programació.
  • Desenvolupar habilitats de depuració i prova de codi.

Passos per Construir el Joc

  1. Configuració Inicial

Primer, assegurem-nos que tenim l'entorn de desenvolupament configurat. Si no ho has fet, revisa el mòdul "Configuració de l'Entorn Lua".

  1. Generació d'un Número Aleatori

Utilitzarem la funció math.random per generar un número aleatori entre 1 i 100.

-- Configuració de la llavor per a la generació de números aleatoris
math.randomseed(os.time())

-- Generació del número aleatori
local secretNumber = math.random(1, 100)

  1. Entrada de l'Usuari

Necessitem una manera d'obtenir l'entrada de l'usuari. Utilitzarem la funció io.read per llegir l'entrada des de la consola.

print("Endevina el número (entre 1 i 100):")
local userGuess = tonumber(io.read())

  1. Lògica del Joc

Implementarem la lògica per comparar l'entrada de l'usuari amb el número secret i proporcionar retroalimentació.

if userGuess < secretNumber then
    print("El número és més gran!")
elseif userGuess > secretNumber then
    print("El número és més petit!")
else
    print("Felicitats! Has endevinat el número!")
end

  1. Bucles per Repetir el Joc

Volem que l'usuari pugui seguir intentant fins que endevini el número. Utilitzarem un bucle while.

local guessedCorrectly = false

while not guessedCorrectly do
    print("Endevina el número (entre 1 i 100):")
    local userGuess = tonumber(io.read())

    if userGuess < secretNumber then
        print("El número és més gran!")
    elseif userGuess > secretNumber then
        print("El número és més petit!")
    else
        print("Felicitats! Has endevinat el número!")
        guessedCorrectly = true
    end
end

  1. Codi Complet

Aquí teniu el codi complet del joc:

-- Configuració de la llavor per a la generació de números aleatoris
math.randomseed(os.time())

-- Generació del número aleatori
local secretNumber = math.random(1, 100)
local guessedCorrectly = false

-- Bucle principal del joc
while not guessedCorrectly do
    print("Endevina el número (entre 1 i 100):")
    local userGuess = tonumber(io.read())

    if userGuess < secretNumber then
        print("El número és més gran!")
    elseif userGuess > secretNumber then
        print("El número és més petit!")
    else
        print("Felicitats! Has endevinat el número!")
        guessedCorrectly = true
    end
end

Exercicis Pràctics

Exercici 1: Ampliar el Joc

Modifica el joc perquè l'usuari tingui un nombre limitat d'intents per endevinar el número. Si l'usuari no endevina el número en el nombre d'intents permès, el joc hauria de mostrar un missatge de derrota.

Exercici 2: Nivells de Dificultat

Afegeix nivells de dificultat al joc. Per exemple, en el nivell fàcil, l'usuari té 10 intents, en el nivell mitjà 7 intents, i en el nivell difícil 5 intents.

Exercici 3: Historial d'Endevinalles

Modifica el joc per mantenir un historial de les endevinalles de l'usuari i mostrar-lo després de cada intent.

Solucions

Solució a l'Exercici 1

-- Configuració de la llavor per a la generació de números aleatoris
math.randomseed(os.time())

-- Generació del número aleatori
local secretNumber = math.random(1, 100)
local guessedCorrectly = false
local attempts = 0
local maxAttempts = 10

-- Bucle principal del joc
while not guessedCorrectly and attempts < maxAttempts do
    print("Endevina el número (entre 1 i 100):")
    local userGuess = tonumber(io.read())
    attempts = attempts + 1

    if userGuess < secretNumber then
        print("El número és més gran!")
    elseif userGuess > secretNumber then
        print("El número és més petit!")
    else
        print("Felicitats! Has endevinat el número!")
        guessedCorrectly = true
    end
end

if not guessedCorrectly then
    print("Ho sento, has esgotat els teus intents. El número era " .. secretNumber)
end

Solució a l'Exercici 2

-- Configuració de la llavor per a la generació de números aleatoris
math.randomseed(os.time())

-- Selecció del nivell de dificultat
print("Selecciona el nivell de dificultat: 1. Fàcil 2. Mitjà 3. Difícil")
local difficulty = tonumber(io.read())
local maxAttempts

if difficulty == 1 then
    maxAttempts = 10
elseif difficulty == 2 then
    maxAttempts = 7
else
    maxAttempts = 5
end

-- Generació del número aleatori
local secretNumber = math.random(1, 100)
local guessedCorrectly = false
local attempts = 0

-- Bucle principal del joc
while not guessedCorrectly and attempts < maxAttempts do
    print("Endevina el número (entre 1 i 100):")
    local userGuess = tonumber(io.read())
    attempts = attempts + 1

    if userGuess < secretNumber then
        print("El número és més gran!")
    elseif userGuess > secretNumber then
        print("El número és més petit!")
    else
        print("Felicitats! Has endevinat el número!")
        guessedCorrectly = true
    end
end

if not guessedCorrectly then
    print("Ho sento, has esgotat els teus intents. El número era " .. secretNumber)
end

Solució a l'Exercici 3

-- Configuració de la llavor per a la generació de números aleatoris
math.randomseed(os.time())

-- Generació del número aleatori
local secretNumber = math.random(1, 100)
local guessedCorrectly = false
local attempts = 0
local maxAttempts = 10
local guessHistory = {}

-- Bucle principal del joc
while not guessedCorrectly and attempts < maxAttempts do
    print("Endevina el número (entre 1 i 100):")
    local userGuess = tonumber(io.read())
    attempts = attempts + 1
    table.insert(guessHistory, userGuess)

    if userGuess < secretNumber then
        print("El número és més gran!")
    elseif userGuess > secretNumber then
        print("El número és més petit!")
    else
        print("Felicitats! Has endevinat el número!")
        guessedCorrectly = true
    end

    print("Historial d'endevinalles: " .. table.concat(guessHistory, ", "))
end

if not guessedCorrectly then
    print("Ho sento, has esgotat els teus intents. El número era " .. secretNumber)
end

Conclusió

En aquest tema, hem construït un joc simple utilitzant Lua, aplicant molts dels conceptes apresos en els mòduls anteriors. Hem après a generar números aleatoris, obtenir entrada de l'usuari, utilitzar estructures de control i bucles, i hem practicat la depuració i prova de codi. Els exercicis pràctics ens han permès ampliar el joc i afegir funcionalitats addicionals, millorant les nostres habilitats de programació en Lua.

© Copyright 2024. Tots els drets reservats