Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.78 KB | None | 0 0
  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.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement