Miniprojekt - Hänga Gubbe/Gubbina

Vi ska försöka implementara spelet Hänga Gubbe på datorn. I samband med spelt ska vi även lära oss att använda metoder.

Brainstorming

Det här blir något större än program ni hade hittills och då borde man först sätta sig ner med penna och papper ( eller dylikt ) och fundera över de enstaka steg som finns i programmet. Vi ska alltså först arbeta med pseudokod, Det är ett sätt att beskriva lösningen med mer vardagliga ord men ändå i någon form av programstruktur. Vi har i pseudokod ord och meningar som kan tolkas till selektion (= if-satser) och loopar ( for- och while-satser). Om man har klar för sig vilka delar sitt program ska ha kan man översätta det till programkod. Oftast går det rad per rad dvs en rad pseudokod blir en rad riktigt kod. om en rad i pseudokod är lite mer omfattandde så är det värt att lägga det över till en metod. Det innebär lite mer skrivarbete men leda till mycket mer läsbar kod.

Hänga Gubbe/Gubbina består av tre delar

Steg 1 - Pseudokod

Fundera över vad som händer och i vilken följd i de tre faser av spelet. Ta penna och papper och börja skriva och skissa. Gör anteckningar. Här finns en möjligt lösning. Men gör dig själv en tjänst och tittat först när du har din lösning klar!!!

Steg 2 - Variabler

Indentifiera vad som kan bli en variabel i ditt program. Ta fram din pseudokod och markera potentiella variabler. Här finns våra markeringar

Steg 3 - metoder

Det är värt att fundera över egna metoder i ditt program. Avgränsade delproblem kan läggas över till ett underordnad delprogram en sk metod. Tänk om du ska be en kompis att lösa ett sådant. Till exempel generera det synliga ordet . Du måste meddelar hur långt ordet är. Och du förväntar dig ett fält av char med samma storlek och alla element är '-'.

InVärde : hemliga ordet
        skapa fält f med storlek = hemliga ordets längd
        för i=0 .... hemliga ordets längd -1 , steg 1
                sätt synliga Ordeti = '-'

Ut-värde: f

Och i kod ser det ut så här

    char[] genereraSynligtOrd(String hemligtOrd) {

        char[] felt = new char[hemligtOrd.length()];

        for (int i = 0; i < felt.length; i++) {
            felt[i] = '-';
        }
        return felt;
    }

Ett par tips:

Dessa tips är av allmän karaktär och det beror mycket på hur du tänkte lösa probelemt.

Variabler

Det hemliga ordet kan lagras i en String för att vi behöver bara läsa från den. Det synliga ordet är bättre ett fält av typen char[] för att det borde vara fyllt från början med - men ska bytas stegvis till bokstäver. Och man kan inte ändra enstaka bokstäver i en String men lätt i ett fält.

Ritkommando

Lägg själva leken i draw-blocket så att en körning av draw-blocket motsvara en gissning med följande analys. Anledning är att alla ritkommandon utförs förs i slutet av setup eller draw-blocket. Dessa kommandon går inte direkt till skärmen. Det förberedds faktiskt bilen i minnet som överförs till skärmen/fönstret när omgången av blocket är klar. Ett litet program för att demonstrera det. Först efter andra inmatningen syns båda kvadrat:


    void setup() {
      size(600, 300);
    }

    void draw() {

      int a = QuestionInt("1: position");
      rect(10+40*a, 50, 30, 30);

      a = QuestionInt("2:a position");
      rect(10+40*a, 50, 30, 30);
    }