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
- 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".
- 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)
- 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.
- 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
- 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
- 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.
Curs de Programació en Lua
Mòdul 1: Introducció a Lua
Mòdul 2: Conceptes Bàsics
Mòdul 3: Conceptes Intermedis
Mòdul 4: Conceptes Avançats
- Coroutines
- Programació Orientada a Objectes en Lua
- Tècniques de Depuració
- Optimització del Rendiment
- Ús de l'API C de Lua
Mòdul 5: Aplicacions Pràctiques
- Construcció d'un Joc Simple
- Scripting en Motors de Joc
- Automatització de Tasques amb Lua
- Integració de Lua amb Altres Llenguatges