commit 35d190bec1627d091f80a6504e000481548fce40 Author: lov3b Date: Tue Dec 15 22:45:54 2020 +0100 Fixed a bug where the underscores would appear after the popup in the beginning diff --git a/README.md b/README.md new file mode 100644 index 0000000..e379743 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# h_ng_dig + +Just a hangmangame for a schoolproject written in processing *(java). Not done yet* diff --git a/data/Kulle0.png b/data/Kulle0.png new file mode 100644 index 0000000..54755ae Binary files /dev/null and b/data/Kulle0.png differ diff --git a/data/Kulle1.png b/data/Kulle1.png new file mode 100644 index 0000000..511a6a7 Binary files /dev/null and b/data/Kulle1.png differ diff --git a/data/Kulle2.png b/data/Kulle2.png new file mode 100644 index 0000000..3d39f3f Binary files /dev/null and b/data/Kulle2.png differ diff --git a/data/Kulle3.png b/data/Kulle3.png new file mode 100644 index 0000000..e1ff7bd Binary files /dev/null and b/data/Kulle3.png differ diff --git a/data/Kulle4.png b/data/Kulle4.png new file mode 100644 index 0000000..c3de96e Binary files /dev/null and b/data/Kulle4.png differ diff --git a/data/Kulle5.png b/data/Kulle5.png new file mode 100644 index 0000000..49ee76d Binary files /dev/null and b/data/Kulle5.png differ diff --git a/data/Kulle6.png b/data/Kulle6.png new file mode 100644 index 0000000..89414b7 Binary files /dev/null and b/data/Kulle6.png differ diff --git a/data/Kulle7.png b/data/Kulle7.png new file mode 100644 index 0000000..9ee6403 Binary files /dev/null and b/data/Kulle7.png differ diff --git a/data/Kulle8.png b/data/Kulle8.png new file mode 100644 index 0000000..9ee6403 Binary files /dev/null and b/data/Kulle8.png differ diff --git a/data/sun.png b/data/sun.png new file mode 100644 index 0000000..ae0d008 Binary files /dev/null and b/data/sun.png differ diff --git a/h_ng_dig.pde b/h_ng_dig.pde new file mode 100644 index 0000000..1c8bf6a --- /dev/null +++ b/h_ng_dig.pde @@ -0,0 +1,238 @@ +import javax.swing.JOptionPane; +// Max 15 karaktärer i varje ord, annars blir understräcken för långa +String[] ord = {"HUMAN", "TERMINATE", "EXECUTE", "REVOLUTION", "KILL"}; +boolean[] harBlivitTaget = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +String rVal; +int rValInt; +final int antalOrd = 5; +String anvandarValStr; +char anvandarVal; +boolean rValUdda; +final int startState = 1; +final int playState = 2; +final int gameoverState = 3; +final int winState = 4; +int mittenBokstav; +final int distansLangd = 30; +final int distansMellanrum = 20; +final int distansTot = distansLangd+distansMellanrum; +int state = startState; + +// Användarfel +boolean gissatRatt=false; +int felGissningar = 0; +boolean gissatBra = false; + +//Färger +final color rod = color(255, 0, 0); +final color gron = color(0, 255, 0); +final color bla = color(0, 0, 255); +final color turkos = color(0, 255, 255); +final color svart = color(0); + +// En array över de olika bilderna för olika stadier i användarens fel. Den sissta är en dummy bild. +PImage[] kulle = new PImage[9]; +PImage sun; + +void setup() { + size(800, 800); + surface.setTitle("Häng Dig!"); + randomOMer(); + rectMode(CENTER); + + // Images + for (int i=0; i < 9; i++) { + kulle[i] = loadImage("Kulle"+i+".png"); + } + sun = loadImage("sun.png"); + sun.resize(120, 101); + + //Resize + for (int i=0; i < 8; i++) { + kulle[i].resize(2554/2, 1216/2); + } +} + +// Dela det valda ordet in till enstaka bokstaver i en array. +String[] divideWord(String wordToDivide) { + String[] ret = wordToDivide.split(""); + return ret; +} + +void randomOMer() { + // Bestäm ett slumpmässigt ord från ordarrayen + rValInt = int(random(0, antalOrd)); + rVal = ord[rValInt]; + println(rVal); + + + // Kolla ifall ordet är udda eller jämnt antal karaktärer + if (rVal.length() % 2 == 0) { + rValUdda = false; + mittenBokstav = rVal.length()/2; + } else { + rValUdda = true; + mittenBokstav = int(rVal.length()/2)+1; + } +} + +// Återvänder en array där "understräcken" ska vara för det hemliga ordet +int[] PositionOfLetter() { + int antalBokstaver = rVal.length(); + int[] kordinaterForUnderstrack = new int[antalBokstaver]; + int mitten = (width/2); + if (rValUdda) { + kordinaterForUnderstrack[mittenBokstav-1] = mitten; + for (int i=1; i < mittenBokstav; i++) { + kordinaterForUnderstrack[(mittenBokstav -1 - i)] = mitten-distansTot*i; + kordinaterForUnderstrack[(mittenBokstav -1 + i)] = mitten+distansTot*i; + } + } else { + for (int i=0; i < mittenBokstav; i++) { + kordinaterForUnderstrack[mittenBokstav-1-i] = mitten-(distansTot/2)-(distansTot*i); + kordinaterForUnderstrack[mittenBokstav+i] = mitten+(distansTot/2)+(distansTot*i); + } + } + return kordinaterForUnderstrack; +} + +void draw() { + // Ett switch statement som gör det möjligt med olika playstates. + switch(state) { + case startState: + drawStart(); + break; + case playState: + drawPlay(); + break; + case gameoverState: + drawGameover(); + break; + case winState: + drawWin(); + break; + } +} + +// Funktion för att skriva ut understräcken +void drawUnderstrack() { + int[] understrackKordinat = PositionOfLetter(); + for (int i=0; i < rVal.length(); i++) { + rect(understrackKordinat[i], (height/4)*3, distansLangd, height*0.005); + } +} + + +void drawStart() { + textSize(20); + textAlign(CENTER, CENTER); + background(0); + fill(gron); + text("Välkommen till 'Häng Dig'\nGissa på en bokstav i popuprutan\n"+ + "Starta genom att klicka på fönstret eller tryck på valfri tangent", width/2, height/2); + // Byt playstate ifall en knapp trycks ner + if (mousePressed||keyPressed) { + ritaUtBorjan(); + state=playState; + } +} + +// Jag skrev en funktion för att ändra harBlivitTaget till helt false efter en omgång +// Kändes snyggare att lägga en linje kod i drawWin och drawGameover än 5 +void fixFalseArray() { + for (int i=0; i < 15; i++) { + harBlivitTaget[i] =false; + } +} + +void ritaUtBorjan() { + background(gron); + image(kulle[felGissningar], 80, 0); + image(sun, width-120, 0); + noStroke(); + fill(rod); + drawUnderstrack(); +} +void drawPlay() { + ritaUtBorjan(); + if (felGissningar >= 7) { + state=gameoverState; + } + + //Hämta in det hemliga ordet som en array med en bokstav i varje plats. + String[] secretWordArray = divideWord(rVal); + + // ANTECKNING TILL MIG SJÄLV + // Fixa så att det inte blir NullPointerException error när man trycker på cancel. + // och StringIndexOutOfBoundsException (när man trycker på enter utan någon input) + anvandarValStr = JOptionPane.showInputDialog("Skriv en bokstav"); + anvandarVal = anvandarValStr.toUpperCase().charAt(0); + + // Loopa igenom alla bokstäver i det hemliga ordet och ändra harBlivitTaget till true ifall användaren gissade rätt. + for (int i=0; i < rVal.length(); i++) { + if (secretWordArray[i].charAt(0) == anvandarVal && harBlivitTaget[i] == false) { + harBlivitTaget[i] = true; + gissatRatt=true; + } + } + + // Höj en counter ifall användaren har gissat fel, annars så sätts gessatRatt till false så att det funkar att loopa igenom blocket ovan igen. + if (gissatRatt == false) { + felGissningar +=1; + } else { + gissatRatt = false; + } + println("felgissningar: "+ felGissningar); + + // Stycket kod skriver ut de bokstäverna som användaren har gissat rätt i det hemliga ordet. + int[] understrackKordinater = PositionOfLetter(); + for (int i=0; i < rVal.length(); i++) { + if (harBlivitTaget[i]) { + text(""+secretWordArray[i], float(understrackKordinater[i]), (height/4.0)*3-height*0.02125); + } + } + gissatBra = true; + // Loopa igenom alla användarens svar och ifall inget är fel så sätts state till winState + for (int i=0; i < rVal.length(); i++) { + if (harBlivitTaget[i] == false) { + gissatBra = false; + } + } + println("Before if "+state); + if (gissatBra) { + state=winState; + } + println("After if "+state); +} + +void drawGameover() { + background(rod); + image(kulle[7], 80, 0); + fill(svart); + textSize(20); + textAlign(CENTER, CENTER); + text("GAME OVER!\n"+ + "Starta om genom att klicka på fönstret, eller tryck på valfri tangent", width/2, height-height/3.5); + if (mousePressed||keyPressed) { + felGissningar =0; + randomOMer(); + fixFalseArray(); + ritaUtBorjan(); + state=playState; + } +} + +void drawWin() { + background(turkos); + textSize(20); + textAlign(CENTER, CENTER); + text("Du vann!\n"+ + "För att starta om tryck på valfri tangent", width/2, height/2); + if (mousePressed||keyPressed) { + felGissningar =0; + randomOMer(); + fixFalseArray(); + ritaUtBorjan(); + state=playState; + } +}