SHARE
TWEET

Untitled

a guest Dec 9th, 2019 90 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package paketnamn; // Namnet på vårt paket börjar som vanligt på en liten bokstav.
  2.  
  3. import java.util.Scanner; // Importera skanner.
  4.  
  5. public class Hangman { // Klassen döps till Hangman. // Namnet på klassen skall alltid börja på en stor bokstav.
  6.    
  7. // Här initierar vi våra klassvariabler.
  8. static Scanner scan; // Deklarer ett skannerobjekt som heter scan.
  9.  
  10. static int antal_liv, slumptal, clue, ordlängd;
  11. static String ord, asterisk = "", gissade_lista = "", s = "", ja = "ja";
  12. static char c;
  13. static boolean kör_igen = true, redan_gissad = false, korrekt_inmatning = false, rätt_bokstav = false, bokstav_gissad;
  14.  
  15. static String [] slumpord = {"bilägare","gris","luffare","idiot","lärare","hårdrockare","metalhead"}; // De ord som kan väljas.
  16. static char [] asteriskfält; // Innehåller alla gissade bokstäver.
  17.  
  18.  
  19.  
  20. public static void main (String[] args) { // Vår mainmetod.
  21.    
  22. scan = new Scanner(System.in); // Vi ser till att man kan mata in från tangentbordet genom att använda skannerobjektet scan.
  23.  
  24. while (kör_igen == true) { // Så länge användaren vill köra igen, så kör programmet.
  25.  
  26. setup(); // Anropar metoden setup, så att alla värden initieras.
  27.  
  28. System.out.println ("Välkommer till Hangman!\nProgrammet har valt ett ord med "+ordlängd+" bokstäver.\n");
  29.  
  30. loopmetod(); // Spelet körs i metoden loopmetod() tills användaren vunnit eller förlorat, då vi återvänder hit.
  31.  
  32. restart(); // Undersöker om användaren vill starta om spelet.
  33. }
  34.  
  35. scan.close(); // Innan programmet stänger så stänger vi skannern.
  36.  
  37. } // Här slutar mainmetoden.
  38.  
  39.  
  40.  
  41.  
  42.  
  43. public static void setup () { // Initierar alla värden samt återställer allt om användaren vill köra igen.
  44.    
  45.     asterisk = ""; gissade_lista = ""; asteriskfält = asterisk.toCharArray(); // Återställar dessa variabler.
  46.    
  47.     slumptal = (int) (0 + Math.random() * slumpord.length); // Gerererar ett slumptal, som medför att ett slumpord sedan väljs.
  48.     // Omvandlar från double till int med (int).
  49.    
  50.     ord = slumpord[slumptal]; // Ett ord väljs slumpmässigt och tilldelas strängen ord.
  51.     ordlängd = ord.length(); // Ger längden på det slumpmässigt valda ordet.
  52.    
  53.     for (int i = 0; i < ordlängd; i++) {
  54.         asterisk = asterisk + "*";
  55.     }
  56.     asteriskfält = asterisk.toCharArray();
  57.    
  58.     antal_liv = 7; // Antalet kvarvarande liv sätts till sju.
  59.    
  60. } // Här slutar metoden setup().
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. public static void loopmetod() { // Kontinuerlig loop tills användaren vunnit eller förlorat.
  68.    
  69.     while (antal_liv > 0 && asterisk.contains("*")) { // Medan antalet liv är över 0 och det fortfarande finns bindestreck i ordet så kommer spelet fortsätta.
  70.     redan_gissad = false; korrekt_inmatning = false;
  71.  
  72.         cluetest(); // Anropar metod cluetest, där vi testar om en ledtråd skall ges och isåfall så skrivs den ut.
  73.  
  74.  
  75.         System.out.println("\nAntal liv kvar: "+antal_liv+"\n");
  76.         System.out.println("Gissa på en bokstav mellan a-ö:\n");
  77.  
  78.         System.out.println(asterisk); // Skriver ut asteriskerna.
  79.          
  80.         if (bokstav_gissad == true) { // Så fort användaren gissat en gång på en bokstav så skrivs listan med gissade bokstäver ut.
  81.         System.out.println("\nGissade bokstäver: "+gissade_lista+"\n");
  82.         }
  83.        
  84.         c = scan.next().charAt(0); // Det första tecknet användaren matar in läggs i charvariabeln c.
  85.         System.out.println("\n"); // Jag vill ha några rader avstånd till nästa gissnign.
  86.        
  87.         korrekt_inmatning = Character.isLetter(c); // Testar ifall användaren matade in en bokstav eller inte.
  88.         // Om det är en bokstav som matades in blir korrekt_inmatning lika med true.
  89.            
  90.         redan_gissad = redan_gissad_test (); // Undersöker ifall användaren redan har gissat på bokstaven.
  91.         // Isåfall så skriver programmet ut det i metoden redan_gissad_test) och gissningen räknas inte.
  92.          
  93.         if (korrekt_inmatning == true && redan_gissad == false) {
  94.             // Om användaren matade in en bokstav som hen inte tidigare gissat på så testar vi ifall den finns i det hemliga ordet.
  95.             c = Character.toLowerCase(c); // Om bokstaven är stor gör vi den liten.
  96.             gissade_lista = gissade_lista + c; // Lägger till den nya bokstaven längst bak i listan med gissade bokstäver.
  97.             bokstav_gissad = true;
  98.             bokstavstest(); // Anropar funktionen hang med variabeln inmatning.
  99.             }
  100.        
  101.         if (korrekt_inmatning == false) {
  102.         System.out.println("Fel inmatning! Mata in en bokstav mellan a-ö!\n");
  103.         }
  104.         } // Här slutar while-satsen.
  105.    
  106. } // Här slutar metoden loopmetod ().
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113. public static void cluetest() { // Här testas om en ledtråd skall ges och isåfall så skrivs den ut.
  114.    
  115.     if (clue == 0 && antal_liv == 2) {
  116.    
  117.     if (asterisk.charAt(0) == '*') {
  118.         System.out.println("\nLedtråd: Den första bokstaven i ordet är "+ord.charAt(0)+".\n");
  119.         clue = 1;
  120.     }
  121.  
  122.     else if (asterisk.charAt(1) == '*') {
  123.         System.out.println("\nLedtråd: Den andra bokstaven i ordet är "+ord.charAt(1)+".\n");
  124.         clue = 1;
  125.     }
  126.    
  127.     else if (asterisk.charAt(2) == '*') {
  128.         System.out.println("\nLedtråd: Den tredje bokstaven i ordet är "+ord.charAt(2)+".\n");
  129.         clue = 1;
  130.     }
  131.  
  132.     }
  133.     else if (clue == 1 && antal_liv == 1) {
  134.        
  135.  
  136.     if (asterisk.charAt(0) == '*') {
  137.         System.out.println("\nLedtråd: Den första bokstaven i ordet är "+ord.charAt(0)+".\n");
  138.         clue = 2;
  139.     }
  140.  
  141.     else if (asterisk.charAt(1) == '*') {
  142.         System.out.println("\nLedtråd: Den andra bokstaven i ordet är "+ord.charAt(1)+".\n");
  143.         clue = 2;
  144.     }
  145.     else if (asterisk.charAt(2) == '*') {
  146.         System.out.println("\nLedtråd: Den tredje bokstaven i ordet är "+ord.charAt(2)+".\n");
  147.         clue = 2;
  148.     }
  149.     }
  150. } // Här slutar metoden cluetest ().
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157. public static boolean redan_gissad_test () {
  158.     redan_gissad = false;
  159.    
  160.     for (int a = 0; a < gissade_lista.length(); a++) {
  161.          if (c == gissade_lista.charAt(a)) {
  162.          System.out.println("Du har redan gissat på denna bokstav!\n");
  163.          redan_gissad = true;
  164.       }
  165.     }
  166.     return redan_gissad;
  167. } // Här slutar metoden redan_gissad_test().
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174. public static void bokstavstest () { // Undersöker det inmatade tecknet. Om det finns i order så ersätter denna bokstav ett streck.
  175.  
  176. rätt_bokstav = false;
  177. int samma_bokstav = 0;
  178.  
  179. for (int i = 0; i < ordlängd; i++) { // Undersöker alla ordens tecken gentemot det inmatade tecknet.
  180.   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.
  181.   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
  182.   asterisk = new String (asteriskfält); // Uppdaterar asterisksträngen.
  183.   samma_bokstav++;
  184.   rätt_bokstav = true;
  185.   }
  186. }
  187.  
  188.   if (samma_bokstav == 1) {
  189.       // 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.
  190.   System.out.println("Rätt bokstav!\n");
  191.   }
  192.   else if (samma_bokstav > 1) {
  193.       // 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.
  194.       System.out.println("Rätt bokstäver!\n");
  195. }
  196.  
  197.   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.
  198.  antal_liv--; // Därför minskar antalet liv med 1.
  199.   rita_gubbe(); // Därefter ritas gubben ut, hur mycket beror på antalet kvarvarande liv.
  200.   }
  201.  
  202. if (asterisk.equalsIgnoreCase(ord)) { // När alla asterisker har blivit ersatta med hela ordet så har användaren vunnit!
  203. System.out.println("Grattis! Du har vunnit! Ordet var "+ord+".\n");
  204. }
  205. } // Här slutar metoden bokstavstest().
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213. public static void rita_gubbe() { // Metoden som ritar gubben.
  214.  
  215. if (antal_liv == 6) {
  216. System.out.println("Fel bokstav! Försök igen.\n");
  217. System.out.println();
  218. System.out.println();
  219. System.out.println();
  220. System.out.println();
  221. System.out.println();
  222. System.out.println();
  223. System.out.println();
  224. System.out.println("___|___");
  225. }
  226.  
  227. if (antal_liv == 5) {
  228. System.out.println("Fel bokstav! Försök igen.\n");
  229. System.out.println("   |");
  230. System.out.println("   |");
  231. System.out.println("   |");
  232. System.out.println("   |");
  233. System.out.println("   |");
  234. System.out.println("   |");
  235. System.out.println("   |");
  236. System.out.println("___|___");
  237. }
  238.  
  239. if (antal_liv == 4) {
  240. System.out.println("Fel bokstav! Försök igen.\n");
  241. System.out.println("   ____________");
  242. System.out.println("   |");
  243. System.out.println("   |");
  244. System.out.println("   |");
  245. System.out.println("   |");
  246. System.out.println("   |");
  247. System.out.println("   |");
  248. System.out.println("   | ");
  249. System.out.println("___|___");
  250. }
  251.  
  252. if (antal_liv == 3) {
  253. System.out.println("Fel bokstav! Försök igen.\n");
  254. System.out.println("   ____________");
  255. System.out.println("   |          _O_");
  256. System.out.println("   |");
  257. System.out.println("   |");
  258. System.out.println("   |");
  259. System.out.println("   |");
  260. System.out.println("   |");
  261. System.out.println("   |");
  262. System.out.println("___|___");
  263. }
  264.  
  265. if (antal_liv == 2) {
  266. System.out.println("Fel bokstav! Försök igen.\n");
  267. System.out.println("   ____________");
  268. System.out.println("   |          _O_");
  269. System.out.println("   |           |");
  270. System.out.println("   |");
  271. System.out.println("   |");
  272. System.out.println("   |");
  273. System.out.println("   |");
  274. System.out.println("   |");
  275. System.out.println("   | ");
  276. System.out.println("___|___");
  277. }
  278.  
  279. if (antal_liv == 1) {
  280. System.out.println("Fel bokstav! Försök igen.\n");
  281. System.out.println("   ____________");
  282. System.out.println("   |          _O_");
  283. System.out.println("   |           |");
  284. System.out.println("   |          / \\");
  285. System.out.println("   |");
  286. System.out.println("   |");
  287. System.out.println("   |");
  288. System.out.println("   |");
  289. System.out.println("   | ");
  290. System.out.println("___|___");
  291. }
  292.  
  293. if (antal_liv <= 0) {
  294. System.out.println("Du har förlorat, din sopa!!!\n");
  295. System.out.println("   ____________");
  296. System.out.println("   |          _O_");
  297. System.out.println("   |           |");
  298. System.out.println("   |         _/ \\_");
  299. System.out.println("   |");
  300. System.out.println("   |");
  301. System.out.println("   |");
  302. System.out.println("   |");
  303. System.out.println("   | ");
  304. System.out.println("___|___");
  305. System.out.println("\nOrdet var "+ord+". \n");
  306. }
  307. } // Här slutar metoden rita_gubbe.
  308.  
  309. public static void restart () {
  310.     System.out.println("Vill du köra igen, mata in ja, annars mata in något annat tecken.");
  311.     scan = new Scanner(System.in); // Behöver initiera skannern igen, för annars fungerar inte inmatningen (okänd anledning).
  312.     s = scan.nextLine();
  313.  
  314.  
  315.     if (s.equalsIgnoreCase(ja)) {
  316.         kör_igen = true;
  317.     }
  318.     else {
  319.         kör_igen = false;
  320.     }
  321. } // Här slutar metoden restart().
  322.  
  323. } // Här slutar klassen Hangman.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top