JirkaDellOro / EIA2

Modul "Entwicklung Interaktiver Anwendungen II": Material, Aufgaben und Tafelbilder
https://jirkadelloro.github.io/FreeMindViewer/?map=EIA2.mm&path=https://jirkadelloro.github.io/EIA2
5 stars 17 forks source link

Willkürliche Anzahl an generierten Uno Karten #222

Open sebifyy opened 6 years ago

sebifyy commented 6 years ago

Hallo, mein Code erzeugt willkürlich viele Uno Karten, manchmal sogar gar keine. Ich habe eine User Eingabe implementiert jedoch kommen nie die richtige Anzahl der Karten raus.

`namespace unogame {

var color: string[] = ["#ff5454", "#fffc54", "#56ff54", "#5495ff"];
var cards_numbers: string[] = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
var cards_Zero: string = "0";
var cards_special: string[] = ["Aussetzen", "RW", "plus2"];
var cards_black: string[] = ["Joker", "plus4"];

// FUNKTION UM ZUFAELLIGE ZAHLEN ZU GENERIEREN ZWISCHEN MIN/MAX
function randomBetween(min: number, max: number): number {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

var i: string = prompt("Wie viele Karten sollen ausgeteilt werden?");
var counter: number = Number(i);
// GENERELLE FOR SCHLEIFE DIE 5 MAL DURCHLAEUFT
for (var u: number = 0; u < counter; u++) {
    var card: string = "";
    var r_color: number = randomBetween(1, 1000);
    console.log(r_color);

    if (r_color <= 74) { // WENN r_color KLEINER ALS 74 DANN ENTSCHEIDE ZWISCHEN JOKER/PLUS4 KARTE
        console.log("BLACK CARD");

        var r_black: number = randomBetween(0, 1);
        card = cards_black[r_black]
    }
    else {
        console.log("COLORED CARD")

        var r_Zero: number = randomBetween(0, 1000);

        //ZERO KARTE
        if (r_Zero <= 37) {
            //card = "Zero"

            //FARBE AUSWAEHLEN
            var WhichColor = randomBetween(0, 3);
            console.log("FARBE: " + WhichColor);
            switch (WhichColor) {
                case 0: //RED
                    var red: string = color[WhichColor];
                    placeDiv(red, 50, 50, 75, 150, "0");
                    card = "RED ZERO";
                    break;

                case 1: //YELLOW
                    var yellow: string = color[WhichColor];
                    placeDiv(yellow, 50, 50, 75, 150, "0");
                    card = "YELLOW ZERO";
                    break;

                case 2: //GREEN
                    var green: string = color[WhichColor];
                    placeDiv(yellow, 50, 50, 75, 150, "0");
                    card = "GREEN ZERO";
                    break;

                case 3: //BLUE
                    var blue: string = color[WhichColor];
                    placeDiv(blue, 50, 50, 75, 150, "0");
                    card = "BLUE ZERO";
                    break;
            }
        }

        //WENN KEINE NULL, DANN NUMMER AUSWAEHLEN
        else if (r_Zero > 37 && r_Zero < 760) {
            var r_Number: number = randomBetween(1, 9);

            //FARBE AUSWAEHLEN
            var WhichColor = randomBetween(0, 3);
            console.log("FARBE: " + WhichColor);

            switch (WhichColor) {
                case 0: //RED
                    var red: string = color[WhichColor];
                    placeDiv(red, 50, 50, 75, 150, <string><any>r_Number);
                    card = String(r_Number);
                    break;

                case 1: //YELLOW
                    var yellow: string = color[WhichColor];
                    placeDiv(red, 50, 50, 75, 150, <string><any>r_Number);
                    card = String(r_Number);
                    break;

                case 2: //GREEN
                    var green: string = color[WhichColor];
                    placeDiv(red, 50, 50, 75, 150, <string><any>r_Number);
                    card = String(r_Number);
                    break;

                case 3: //BLUE
                    var blue: string = color[WhichColor];
                    placeDiv(red, 50, 50, 75, 150, <string><any>r_Number);
                    card = String(r_Number);
                    break;
            }

        }

        //SPECIAL KARTE    
        else if (r_Zero >= 760) {
            var r_Special: number = randomBetween(0, 2);

            switch (r_Special) {
                case 0: //RED
                    var red: string = color[WhichColor];
                    placeDiv(red, 50, 50, 75, 150, <string><any>r_Special);
                    card = String(r_Special);
                    break;

                case 1: //YELLOW
                    var yellow: string = color[WhichColor];
                    placeDiv(yellow, 50, 50, 75, 150, <string><any>r_Special);
                    card = String(r_Special);
                    break;

                case 2: //GREEN
                    var green: string = color[WhichColor];
                    placeDiv(green, 50, 50, 75, 150, <string><any>r_Special);
                    card = String(r_Special);
                    break;
            }
        }
    }
    console.log(card);
    console.log("++++++++++++++++++++++++++++++++++++");

}

function placeDiv(_color: string, _x: number, _y: number, _width: number, _height: number, text: string): void {
    let div: HTMLDivElement = document.createElement("div");
    document.body.appendChild(div);

    div.setAttribute("id", "Karte#" + u) //div ID in Abh�ngigkeit von _x (aktuelle Karte die gegeben wird)

    document.getElementById("Karte#" + u).innerHTML = text;

    let s: CSSStyleDeclaration = div.style;
    s.border = "3px solid black";
    s.position = "relative";
    s.backgroundColor = _color;
    s.width = _width + "px";
    s.height = _height + "px";
    s.left = _x + "px";
    s.top = _y + "px";
}

}

`

R4Pi3R commented 6 years ago

Bitte den Code so auch pushen, damit er live debugged werden kann. Hast du dir "i" und "counter" mal auf der Konsole ausgeben lassen? Was wird dort zurückgeliefert?

sebifyy commented 6 years ago

Eigentlich sind die Dateien gepusht...sollte eigentlich die aktuelle Version sein, in github werden sie so auch angezeigt aber über pages werden noch die alten geöffnet?

i und counter sind immer die Zahl die man eingibt

R4Pi3R commented 6 years ago

Ok, ich hab jetzt mal schnell drüber geschaut und mir sind ein paar Sachen aufgefallen

  1. Das Script sollte nicht im referenziert sein.
  2. Es werden tatsächlich "willkürlich" Karten erzeugt, da der Algorithmus trotz geringer Wahrscheinlichkeit nicht ausschließt, dass eine Karte öfter als erlaubt erzeugt wird.
  3. Die Anzahl der Karten ist manchmal falsch, da für die schwarze plus4 Karte placeDiv überhaupt nicht aufgerufen wird
  4. Für die Darstellung der anderen Karten ist in der Konsole auffällig, dass bei einigen "colored cards" keine Farbe aufgeführt wird. Außerdem passt der Inhalt der Karte oftmals nicht zu der zufällig generierten Zahl.

Allgemein: Wie in der Aufgabe indirekt verlangt wird, sollte zunächst ein Kartendeck angelegt werden, in dem alle Karten so oft wie erlaubt vorhanden sind. Aus diesem kann dann eine zufällige Karte ausgewählt und dargestellt werden. Das macht sowohl die Auswahl, als auch den Ausschluss deutlich einfacher. Das ist keine Schelte, aber aus meiner Sicht ergibt es wenig Sinn an Fehlerhaftem Code herumzudoktorn, wenn, selbst wenn er funktioniert, nicht das verlangte Ergebnis zu erreichen ist.