Llicència
Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència
Autors:
Projecte: el Joc Mastermind
- Usa el mateix projecte que l'usat als exercicis
- Crea un package cat.itb.elteuusuari1.dam.m03.uf1.iterative.project
- Crea un únic arxiu kotlin anomenat Mastermind
- Quan vulguis entregar la pràctica afegeix el tag "Mastermind" a la versió2. Assegura't de pujar el tag al git i que el projecte compili.
- L'entrega es fa per duplicat. Exporta el projecte: File / Export / Project to Zip File. Especifica el path i Save. Puja'l al classroom
Sumari
- El joc de mastermind
- Regles del joc
- Adaptacions
- Funcionament i simplificacions
- Final del joc
- 1vs1 o solitari
- Esquelet
- Joc de proves complet
- Joc de proves evaluacions
- Fonts
El joc de mastermind
Photo taken by ZeroOne (Treball propi) CC BY-SA, https://commons.wikimedia.org/w/index.php?curid=75983
- El Mastermind és un joc de tauler del tipus joc abstracte, on s'usa la capacitat de deducció per esbrinar un codi format per colors. Han aparegut diverses variants
Regles del joc
Un jugador col·loca en secret quatre peces d'algun dels sis colors (es pot repetir el color i posar-los en qualsevol ordre) i l'oponent ha d'esbrinar-los en un nombre limitat de torns. A cada torn, qui intenta endevinar col·loca quatre peces de colors i l'altre respon indicant amb fitxes blanques i negres depenent de la combinació introduïda.
Adaptacions
- En el nostre cas l'usuari és el jugador que intenta endevinar la combinació.
- La nostra tasca principal és programar l'algoritme que avalua si la suposició feta pel jugador és correcte o no
- Enlloc d'utilitzar colors farem servir la combinació de lletres ABCDEF
Funcionament i simplificacions
Cada cop que l'usuari introduiex una nova combinació, per cada peça, s'indicarà si ha encertat la lletra i està en la posició correcte. En cas que no sigui així, avaluarem si la lletra existeix a la combinació secreta però és en un altre lloc.
Exemples:
guess = AABC secret = ADFE
rightPosition=1, wrongPosition=1
- Aclariment: En el joc original com que la A està en el lloc correcte, la segona A no seria una wrongPosition. Nosaltres per simplificar ho farem com a l'exemple
Final del joc
Guanya l'usuari si encerta la combinació o perd si s'esgoten els slots (vegeu la imatge del joc).
- Si guanya l'usuari mostrarem el següent output
Enhorabona! has guanyat
- Altrament
Fi del joc. Has perdut!
1vs1 o solitari
El joc tindrà dues modalitats de joc.
En la primera, un primer usuari introduirà la combinació secreta i un segon usuari haurà de descobrir-la. En una segona modalitat el programa generarà una combinació que haurem d'endevinar.
Esquelet
Utilitza el següent esquelet per desenvolupar el teu joc. Anomena l'arxiu Mastermind
import java.util.*
data class Evaluation(val rightPosition: Int, val wrongPosition: Int)
fun main() {
// Use only this scanner
val scanner = Scanner(System.`in`)
// Your code
//use this function
var evaluation = evaluateWord("ABCD", "AEEE")
}
fun randomChar():Char{
val allowedChars = 'A'..'F'
return allowedChars.random()
}
fun evaluateWord(secret: String, guess: String): Evaluation {
//Calculate your right and wrong positions and change it as you need
return Evaluation(0,0)
}
Joc de proves complet
Les línies que comencen per > són les que ha introduït l'usuari
Vols jugar en mode 1vs1 (1) o solitari (2)?
> 1
Introdueix la paraula secreta
> ABCD
Comença el joc!
Introdueix una combinació
> FFFF
Posicions correctes: 0, Posicions incorrectes: 0
Introdueix una combinació
> AAAA
Posicions correctes: 1, Posicions incorrectes: 3
Introdueix una combinació
> ABCD
Enhorabona! has guanyat
Joc de proves evaluacions
-
secret = "ABCD", guess = "FFFF"
rightPosition=0, wrongPosition=0 -
secret = "ABCD", guess = "AAAA"
rightPosition=1, wrongPosition=3 -
secret = "ABCD", guess = "ABCD"
rightPosition=4, wrongPosition=0 -
secret = "ABAB", guess = "ABCD"
rightPosition=2, wrongPosition=0
Happy coding ;)!
Fonts
- https://ca.wikipedia.org/wiki/Mastermind
- https://www.coursera.org/