Mannschaftsvariablenproblem !!!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mannschaftsvariablenproblem !!!

    Hi leudde

    Bei der Wettbetrugssimulation muss ich ja sowas wie Spieltage machen
    Jetzt will ich es so anstellen dass die Mannschaften die gegen einander gespielt haben nicht mehr gegen einander spielen !!!
    das muss ich ja mit Variablen machen aber wie muss ich die Variable dann deklarieren bzw. wie muss der darauf folgende Code aussehen ?!???

    €dit:
    die sollen zufällig gegen einander spielen also soll am Anfang des SPiels zufällig en Spielplan erstellt werden und wenn ne Mannschaft schonmal gegen ne andere gezeichnet wurde soll sie nicht nochmal gegen die selbe "spielen"
    !!!!
    alles ist möglich, unmögliches dauert nur etwas länger

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Raxoz ()

  • hmm..
    wen sie in einer bestimmten reihenfolge spielen würdn währe es deutlich einfache da man nur eine variable braucht. so musst du für jede machschaft eine variable erstellen. dan fragst du immer vor dem spiel ab ob diese varable =1 ist. wen ja können sie spielen wen nicht muss nochmal der random durchlaufen. nach einem spiel wird diese variable um 1 erhöht, oder auf 1 gesetzt, es kommt ja aufs gleiche aus (wen variable vorher 0 war).
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • du könntest n array machen: gespielt[heim,gast] dort setzt du alle werte auf 0, wenn sie gegeneinander spielen setzt du die entsprechenden werte auf 1, und fertig. wenn dann die paarungen festgelegt werden, muss nur überprüft werden, ob die entsprechende stelle schon 1 ist, oder nicht.


    kannst du mir das mal genauer erklären ??????????Hab bis jetzt noch nie mit arrays gearbeitet !!!
    alles ist möglich, unmögliches dauert nur etwas länger
  • Original von Raxoz
    kannst du mir das mal genauer erklären ??????????Hab bis jetzt noch nie mit arrays gearbeitet !!!

    Also Normalerweise verwendet man Arrays, um verschiedene Werte unter dem selben Namen ansprechen zu können und um eine begrenzte/unbegrenzte Menge dieser zu speichern.

    Hier aber, ist das keine dieser Anwendungen, aber dennoch mehr als genial!
    Du machst es ganz einfach, jede Mannschaft bekommt eine Nummer, dann tust du das was CAS gesagt hat.

    Nehmen wir mal an, Mannschaft 3 hat schon gegen Mannschaft 7 und 2 gespielt, dann sähe der Array, wenn man ihn ausschriebe, so aus:

    Quellcode

    1. 1234567
    2. 1///////
    3. 2///////
    4. 3/x/////
    5. 4///////
    6. 5///////
    7. 6///////
    8. 7//x////

    Wie man Sieht, haben Mannschaft 3 & 7 je ein Heimspiel gespielt.
  • eigentlich könnte man das so stehen lassen, wie agnahim es gesagt hat, aber da du noch nie mit arrays gearbeitet hast, einige ergänzungen.
    der array, den du brauchst, musst du dir wie ein 2-dimensionales koordinatensystem vorstellen, dass nur positive ganze zahlen als einheiten auf den achsen hat. jeder punkt hat dort eine x- und eine y-koordinate. (ich hoffe, dass du wenigstens sowas mal in mathe hattest) und an jedem dieser punkte wird dann ein wert gespeichert, in deinem fall dann eben 0 für "haben noch nicht gspielt" und 1 für "haben gespielt". deklariert wird ein array immer so:

    GML-Quellcode

    1. <arrayname>[<erster parameter>,<zweiter parameter>, <dritter parameter>, ...] = <wert>
    2. //also bei dir etwa so:
    3. spielplan[heim,gast]=1 // also hier wird gesagt, dass beide gerade gegeneinander gespielt haben.


    und wie agnahim schon aufgezeichnet hat ist das dann ein spielplan mit rückrunde, d.h. jede mannschaft spielt in dem fall gegen jede 2 mal, einaml als gast und einmal als gastgeber. und die diagonale, in der jede mannschaft gegen sich selber spielt kannst du entweder ignorieren, falls dein zufallsgenerator sowas schon berücksichtigt, sonst setzt du diese werte einfach alle schon am anfang auf 1.
    und um das ganze abzurunden hier nochmal der code, wie du das ganze vor dem ersten spiel initialisierst:

    GML-Quellcode

    1. for (i=1; i<=16 /*bei 16 mannschaften*/ ; i+=1)
    2. {
    3. for (j=1; j<=16; j+=1)
    4. {
    5. spielplan[i,j]=0;
    6. }
    7. }
  • da du dieses problem noch nicht als gelöst markiert hast, und als letztes etwas über deinen nicht existierenden zufallsgenerator gesagt hast, liefer ich dir jetzt mal 3 lösungsvorschläge, wie das mit deinem zufallsgenerator aussehen kann. (beide lösungen gehen von 16 mannschaften aus)
    1.: ich empfehle dir erstmal das hier zu lesen, bevor du dich für diese lösung entscheidest. jedenfalls sieht der code dann so aus:

    GML-Quellcode

    1. auswahl=0;
    2. while (auswahl==0)
    3. {
    4. heim=ceil(random(16));
    5. gast=ceil(random(16));
    6. if(spiele[heim]==spieltag-1)
    7. {
    8. if (spiele[gast]==spieltag-1)
    9. {
    10. if (spielplan[heim,gast]==0)
    11. {
    12. auswahl=1;
    13. spielplan[heim,gast]=1;
    14. spiele[heim]+=1;
    15. spiele[gast]+=1;
    16. // plus der code, der in deinem spiel dann angibt, dass diese mannschaften gegeneinander spielen.
    17. }
    18. }
    19. }
    20. }
    Alles anzeigen

    erklärung: dieser code würfelt so lange ein geordnetes zahlenpaar (d.h. 2;5 ist nicht das selbe wie 5;2), bis sich 2 finden, die so (dieses so bezieht sich auf den unterschied zwischen heim und gast) noch nicht gegeneinander gespielt haben. die variable spieltag sollte immer den aktuellen anzeigen, und die variable spiele[mannschaft] zeigt, wieviele spiele sie schon hatten. das ist dafür, dass eine mannschaft nur ein spiel pro tag hat. in diesem beispiel sollte man aber, wnn man den oben beschriebenen array (spielplan) initialisiert noch folgenden code hinzufügen, damit eine mannschaft nicht gegen sich selber spielen muss:

    GML-Quellcode

    1. for (i=1; i<=16; i+=1)
    2. {
    3. spielplan[i,i]=1;
    4. }

    aber hierbei könnte es vorkommen, dass er etwas länger rumwürfeln muss, bis er 2 kompatible mannschaften zusammenbekommt. am schwierigsten wird es, wenn er 7 der 8 paarungen hat, und als 8. dann genau die beiden mannschaften rausbekommen soll, die übrig sind. (noch schlimmer wird's, wenn sie schon gegeneinander gespielt haben, dann ist nämlich auch noch die reihenfolge, wer zuerst gewürfelt wird, entscheidend.)

    2.: vergiss den zufallsgenerator, und entwerf einfach einen spielplan, der dann etwas so aussieht:
    tag 1: 1-2; 3-4; 5-6; 7-8; 9-10; 11-12; 13-14; 15-16
    tag 2: 1-3; 2-4; 5-7; 6-8; 9-11; 10-12; 13-15; 14-16
    ...
    tag ?: 2-1; 4-3; ... d.h., ab der hälfte drehst du die paarungen einfach um.

    in diesem fall wäre der spielplan-array auch überflüssig.

    3.: ein etwas komplexeres system:
    erstelle ein array (ja, diese dinger sind ein wundermittel für viele probleme), das etwas so aussieht:

    GML-Quellcode

    1. tabelle[<mannschaft>,<daten>]

    bei mannschaft ist klar, wieder von 1 bis 16 die mannschaften durchnummerieren. unter daten trägst du dann halt alles wichtige ein: 1 sind die punkte, 2 die tore (oder körbe oder was auch immer man innerhalb eines spieles erreichen muss) 3 die gegentore.
    beispiele:
    tabelle[4,1] gibt die punkte der 4. mannschaft an
    tabelle[9,3] gibt die tore an, die mannschaft 9 kassiert hat und
    tabelle[1,2] gibt die tore an, die mannschaft 1 geschossen hat.
    dann noch einen 2. array, der die rangliste angibt. d.h. bei rang[x] sind von x=1 - 16 die nummern der mannschaften gespeichert. nach jedem spieltag gleichst du die punkte, tore und gegentore der mannschaften ab, und erstellst dadurch die rangliste. und innerhalb dieser legst du dann ein system fest, nach welchem die mannschaften gegeneinander spielen. entweder so, wie an tag1 von vorschlag 2, oder dass die liste in der mitte halbiert wird, d.h. 1 spielt gegen 9, 2 gegen 10, 3 gegen 11, ..., 8 gegen 16.
    sollten nach diesem system 2 mal die selben mannschaften aufeinander treffen, oder durch das folgende system eine mannschaft schon vergeben sein, rutschst du mit der 2. nummer in der tabelle auf- oder abwärts, bis du ne freie mannschaft gefunden hast. das hat dann zwar mit zufall nich mehr viel zu tun, ist aber nicht so geradlinig wie vorschlag 2. und da dieser code, wie gesagt, etwas komlexer ist, warte ich erst mal ab, ob du diese methode haben willst oder nicht, bevor ich mir überlege, wie ich das umsetze. wie mein geolehrerimmer zu sagen pflegt: der schüler ist von natur aus faul.