Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package paketnamn; // Namnet på vårt paket börjar som vanligt på en liten bokstav.
- import java.util.Scanner; // Importera skanner.
- public class Hangman { // Klassen döps till Hangman. // Namnet på klassen skall alltid börja på en stor bokstav.
- // Här initierar vi våra klassvariabler.
- static Scanner scan; // Deklarer ett skannerobjekt som heter scan.
- static int antal_liv, slumptal, clue, ordlängd;
- static String ord, asterisk = "", gissade_lista = "", s = "", ja = "ja";
- static char c;
- static boolean kör_igen = true, redan_gissad = false, korrekt_inmatning = false, rätt_bokstav = false, bokstav_gissad;
- static String [] slumpord = {"bilägare","gris","luffare","idiot","lärare","hårdrockare","metalhead"}; // De ord som kan väljas.
- static char [] asteriskfält; // Innehåller alla gissade bokstäver.
- public static void main (String[] args) { // Vår mainmetod.
- scan = new Scanner(System.in); // Vi ser till att man kan mata in från tangentbordet genom att använda skannerobjektet scan.
- while (kör_igen == true) { // Så länge användaren vill köra igen, så kör programmet.
- setup(); // Anropar metoden setup, så att alla värden initieras.
- System.out.println ("Välkommer till Hangman!\nProgrammet har valt ett ord med "+ordlängd+" bokstäver.\n");
- loopmetod(); // Spelet körs i metoden loopmetod() tills användaren vunnit eller förlorat, då vi återvänder hit.
- restart(); // Undersöker om användaren vill starta om spelet.
- }
- scan.close(); // Innan programmet stänger så stänger vi skannern.
- } // Här slutar mainmetoden.
- public static void setup () { // Initierar alla värden samt återställer allt om användaren vill köra igen.
- asterisk = ""; gissade_lista = ""; asteriskfält = asterisk.toCharArray(); // Återställar dessa variabler.
- slumptal = (int) (0 + Math.random() * slumpord.length); // Gerererar ett slumptal, som medför att ett slumpord sedan väljs.
- // Omvandlar från double till int med (int).
- ord = slumpord[slumptal]; // Ett ord väljs slumpmässigt och tilldelas strängen ord.
- ordlängd = ord.length(); // Ger längden på det slumpmässigt valda ordet.
- for (int i = 0; i < ordlängd; i++) {
- asterisk = asterisk + "*";
- }
- asteriskfält = asterisk.toCharArray();
- antal_liv = 7; // Antalet kvarvarande liv sätts till sju.
- } // Här slutar metoden setup().
- public static void loopmetod() { // Kontinuerlig loop tills användaren vunnit eller förlorat.
- while (antal_liv > 0 && asterisk.contains("*")) { // Medan antalet liv är över 0 och det fortfarande finns bindestreck i ordet så kommer spelet fortsätta.
- redan_gissad = false; korrekt_inmatning = false;
- cluetest(); // Anropar metod cluetest, där vi testar om en ledtråd skall ges och isåfall så skrivs den ut.
- System.out.println("\nAntal liv kvar: "+antal_liv+"\n");
- System.out.println("Gissa på en bokstav mellan a-ö:\n");
- System.out.println(asterisk); // Skriver ut asteriskerna.
- if (bokstav_gissad == true) { // Så fort användaren gissat en gång på en bokstav så skrivs listan med gissade bokstäver ut.
- System.out.println("\nGissade bokstäver: "+gissade_lista+"\n");
- }
- c = scan.next().charAt(0); // Det första tecknet användaren matar in läggs i charvariabeln c.
- System.out.println("\n"); // Jag vill ha några rader avstånd till nästa gissnign.
- korrekt_inmatning = Character.isLetter(c); // Testar ifall användaren matade in en bokstav eller inte.
- // Om det är en bokstav som matades in blir korrekt_inmatning lika med true.
- redan_gissad = redan_gissad_test (); // Undersöker ifall användaren redan har gissat på bokstaven.
- // Isåfall så skriver programmet ut det i metoden redan_gissad_test) och gissningen räknas inte.
- if (korrekt_inmatning == true && redan_gissad == false) {
- // Om användaren matade in en bokstav som hen inte tidigare gissat på så testar vi ifall den finns i det hemliga ordet.
- c = Character.toLowerCase(c); // Om bokstaven är stor gör vi den liten.
- gissade_lista = gissade_lista + c; // Lägger till den nya bokstaven längst bak i listan med gissade bokstäver.
- bokstav_gissad = true;
- bokstavstest(); // Anropar funktionen hang med variabeln inmatning.
- }
- if (korrekt_inmatning == false) {
- System.out.println("Fel inmatning! Mata in en bokstav mellan a-ö!\n");
- }
- } // Här slutar while-satsen.
- } // Här slutar metoden loopmetod ().
- public static void cluetest() { // Här testas om en ledtråd skall ges och isåfall så skrivs den ut.
- if (clue == 0 && antal_liv == 2) {
- if (asterisk.charAt(0) == '*') {
- System.out.println("\nLedtråd: Den första bokstaven i ordet är "+ord.charAt(0)+".\n");
- clue = 1;
- }
- else if (asterisk.charAt(1) == '*') {
- System.out.println("\nLedtråd: Den andra bokstaven i ordet är "+ord.charAt(1)+".\n");
- clue = 1;
- }
- else if (asterisk.charAt(2) == '*') {
- System.out.println("\nLedtråd: Den tredje bokstaven i ordet är "+ord.charAt(2)+".\n");
- clue = 1;
- }
- }
- else if (clue == 1 && antal_liv == 1) {
- if (asterisk.charAt(0) == '*') {
- System.out.println("\nLedtråd: Den första bokstaven i ordet är "+ord.charAt(0)+".\n");
- clue = 2;
- }
- else if (asterisk.charAt(1) == '*') {
- System.out.println("\nLedtråd: Den andra bokstaven i ordet är "+ord.charAt(1)+".\n");
- clue = 2;
- }
- else if (asterisk.charAt(2) == '*') {
- System.out.println("\nLedtråd: Den tredje bokstaven i ordet är "+ord.charAt(2)+".\n");
- clue = 2;
- }
- }
- } // Här slutar metoden cluetest ().
- public static boolean redan_gissad_test () {
- redan_gissad = false;
- for (int a = 0; a < gissade_lista.length(); a++) {
- if (c == gissade_lista.charAt(a)) {
- System.out.println("Du har redan gissat på denna bokstav!\n");
- redan_gissad = true;
- }
- }
- return redan_gissad;
- } // Här slutar metoden redan_gissad_test().
- public static void bokstavstest () { // Undersöker det inmatade tecknet. Om det finns i order så ersätter denna bokstav ett streck.
- rätt_bokstav = false;
- int samma_bokstav = 0;
- for (int i = 0; i < ordlängd; i++) { // Undersöker alla ordens tecken gentemot det inmatade tecknet.
- if (c == ord.charAt(i)) { // Strängarna ord och inmatning omvandlas till char. Om den gissade bokstaven finns i ordet så ersätter denna bokstav en asterisk.
- asteriskfält[i] = c;// charAt(0) ger det första tecknet, som bör vara det enda, men om användaren tryckte in två tecken så gällde endast den första
- asterisk = new String (asteriskfält); // Uppdaterar asterisksträngen.
- samma_bokstav++;
- rätt_bokstav = true;
- }
- }
- if (samma_bokstav == 1) {
- // Om användaren gissade rätt på en bokstav som förekommer en gång i ordet, t.ex. e i katter, så skrivs rätt bokstav (singular) ut.
- System.out.println("Rätt bokstav!\n");
- }
- else if (samma_bokstav > 1) {
- // Om användaren gissade rätt på en bokstav som förekommer flera gånger i ordet, t.ex. t i katter, så skrivs rätt bokstäver (plural) ut.
- System.out.println("Rätt bokstäver!\n");
- }
- if (rätt_bokstav == false) { // Om ett tecken som inte finns i ordet matas in kommer ny variabeln nytt_streck bli -, vilket medför att antalet liv minskar med 1.
- antal_liv--; // Därför minskar antalet liv med 1.
- rita_gubbe(); // Därefter ritas gubben ut, hur mycket beror på antalet kvarvarande liv.
- }
- if (asterisk.equalsIgnoreCase(ord)) { // När alla asterisker har blivit ersatta med hela ordet så har användaren vunnit!
- System.out.println("Grattis! Du har vunnit! Ordet var "+ord+".\n");
- }
- } // Här slutar metoden bokstavstest().
- public static void rita_gubbe() { // Metoden som ritar gubben.
- if (antal_liv == 6) {
- System.out.println("Fel bokstav! Försök igen.\n");
- System.out.println();
- System.out.println();
- System.out.println();
- System.out.println();
- System.out.println();
- System.out.println();
- System.out.println();
- System.out.println("___|___");
- }
- if (antal_liv == 5) {
- System.out.println("Fel bokstav! Försök igen.\n");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println("___|___");
- }
- if (antal_liv == 4) {
- System.out.println("Fel bokstav! Försök igen.\n");
- System.out.println(" ____________");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" | ");
- System.out.println("___|___");
- }
- if (antal_liv == 3) {
- System.out.println("Fel bokstav! Försök igen.\n");
- System.out.println(" ____________");
- System.out.println(" | _O_");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println("___|___");
- }
- if (antal_liv == 2) {
- System.out.println("Fel bokstav! Försök igen.\n");
- System.out.println(" ____________");
- System.out.println(" | _O_");
- System.out.println(" | |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" | ");
- System.out.println("___|___");
- }
- if (antal_liv == 1) {
- System.out.println("Fel bokstav! Försök igen.\n");
- System.out.println(" ____________");
- System.out.println(" | _O_");
- System.out.println(" | |");
- System.out.println(" | / \\");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" | ");
- System.out.println("___|___");
- }
- if (antal_liv <= 0) {
- System.out.println("Du har förlorat, din sopa!!!\n");
- System.out.println(" ____________");
- System.out.println(" | _O_");
- System.out.println(" | |");
- System.out.println(" | _/ \\_");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" |");
- System.out.println(" | ");
- System.out.println("___|___");
- System.out.println("\nOrdet var "+ord+". \n");
- }
- } // Här slutar metoden rita_gubbe.
- public static void restart () {
- System.out.println("Vill du köra igen, mata in ja, annars mata in något annat tecken.");
- scan = new Scanner(System.in); // Behöver initiera skannern igen, för annars fungerar inte inmatningen (okänd anledning).
- s = scan.nextLine();
- if (s.equalsIgnoreCase(ja)) {
- kör_igen = true;
- }
- else {
- kör_igen = false;
- }
- } // Här slutar metoden restart().
- } // Här slutar klassen Hangman.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement