====== Opgave: Lav et Hangman spil ======
===== Beskrivelse =====
Du skal designe og programmere en digital udgave af spillet **Hangman** i Processing.
Spillet skal vælge et ord, som spilleren skal gætte, ét bogstav ad gangen.
For hver forkerte gæt skal en del af galgen/figuren tegnes, indtil spillet er vundet eller tabt. \\
Formålet med opgaven er, at du skal bruge **arrays** til at holde styr på data (bogstaver, gæt osv.), og strukturerer din kode i **funktioner/metoder**, så programmet bliver overskueligt og fleksibelt.
----
===== 🎓 Læringsmål =====
Efter denne opgave skal du kunne:
* **Brug af arrays**
* Gemme og arbejde med flere værdier i et array (f.eks. bogstaver i ordet og forkerte gæt).
* **Planlægning og datastrukturering**
* Udvikle en strategi for, hvordan data (ord, gæt, visning) skal organiseres.
* **Metoder i Processing**
* Dele koden op i funktioner/metoder, der har tydelige ansvarsområder (f.eks. tegne hangman, vise ordet, håndtere input).
* **Grafisk programmering**
* Bruge Processing til at vise spillets status og feedback til spilleren.
----
===== Krav til spillet =====
Programmet skal indeholde et **ord**, der skal gættes.
* Du kan selv vælge ordet eller gemme flere mulige ord i et array og vælge ét tilfældigt.
* Spilleren skal kunne **indtaste et bogstav** (f.eks. med `keyPressed()`).
* Programmet skal kunne:
- **Tjekke**, om bogstavet findes i ordet.
- **Opdatere visningen** (vise de korrekte bogstaver og streger for resten).
- **Gem forkert gæt** i et array.
- **Tegne galgen/hangman** alt efter hvor mange fejl spilleren har lavet.
* Spillet skal kunne **afgøre**, om spilleren har vundet eller tabt.
----
===== Struktur og hints =====
Tænk over, **hvordan du organiserer din kode**. Her er nogle idéer og hints – men du skal selv finde din egen løsning:
* **Repræsentation af ordet:**
* Brug et `char[]` array eller et `String`, som du konverterer til et array med `toCharArray()`.
* Brug et andet array (f.eks. et `boolean[]`) til at holde styr på, hvilke bogstaver der er gættet.
* **Forkerte gæt:**
* Brug et `char[]` til at gemme forkerte bogstaver. Du kan holde styr på, hvor mange fejl der er lavet, med en tæller-variabel.
* **Grafik:**
* Lav en metode, fx `void drawHangman(int fejl)` som tegner galgen og figuren afhængigt af antallet af forkerte gæt.
* **Vis ordet:**
* Lav en metode, fx `void drawWord()`, der viser de bogstaver, spilleren har gættet, og understreger de manglende.
* **Input:**
* Brug `void keyPressed()` til at registrere, hvilket bogstav brugeren gætter.
* **Kontrol af spilstatus:**
* Lav evt. en metode, fx `boolean isWordGuessed()`, som tjekker, om alle bogstaver er gættet.
++++ Hint: Template med metode-struktur |
// ===============================
// Hangman - template struktur
// ===============================
// Globale variabler
String ord = "processing";
char[] bogstaver; // bogstaverne i ordet
boolean[] gættet; // true/false for hvert bogstav
char[] forkerteGæt; // gem forkerte bogstaver
int fejl = 0; // antal forkerte gæt
void setup() {
size(600, 400);
// initialiser arrays her
}
void draw() {
background(255);
drawWord(); // vis ordet
drawHangman(fejl); // tegn galgen
drawWrongGuesses(); // vis forkerte gæt
checkGameOver(); // tjek om spillet er slut
}
void keyPressed() {
// håndter spillerens bogstavgæt
// opdater arrays og fejl
}
void drawWord() {
// tegn de gættede bogstaver og understreg de manglende
}
void drawHangman(int fejl) {
// tegn galge + figur afhængigt af fejl
}
void drawWrongGuesses() {
// vis forkerte gæt på skærmen
}
void checkGameOver() {
// tjek om ordet er gættet eller hvis man har tabt
}
boolean isWordGuessed() {
// returner true hvis alle bogstaver i gættet[] er true
return false;
}
++++
++++ Hint: Konverting mellem String og array |
// Et ord som String
String ord = "processing";
// Konverter String til et char-array:
char[] bogstaver = ord.toCharArray();
// Eksempel: udskriv første bogstav
println(bogstaver[0]); // viser 'p'
// Hvis du vil bygge en String igen ud fra et char-array:
String nyTekst = new String(bogstaver);
println(nyTekst); // viser "processing"
++++
----
===== ⚡ Ekstra udfordringer (valgfrit) =====
Hvis du bliver hurtigt færdig, kan du udvide spillet med fx:
* En liste af ord, hvor programmet vælger ét tilfældigt.
* Mulighed for at starte en ny runde, når spillet er slut.
* Et simpelt pointsystem.
----