IFD:SvenSomKU: Difference between revisions

From Medien Wiki
No edit summary
Line 477: Line 477:


Der Liga-Spielplan wird wie beim realen Vorbild durch das Round Robin Verfahren erstellt. Im Gegensatz zum Deutsche-Bundesliga-Spielplan kann es vorkommen, dass einige Vereine während der Saison mehr Heimspiele ausgeführt haben, als andere Vereine. Am Ende der Saison hat jedes Team jedoch die gleiche Anzahl an Heimspielen.
Der Liga-Spielplan wird wie beim realen Vorbild durch das Round Robin Verfahren erstellt. Im Gegensatz zum Deutsche-Bundesliga-Spielplan kann es vorkommen, dass einige Vereine während der Saison mehr Heimspiele ausgeführt haben, als andere Vereine. Am Ende der Saison hat jedes Team jedoch die gleiche Anzahl an Heimspielen.
In der deutschen Bundesliga ist es so, dass auf jedes Heimspiel immer ein Auswärtsspiel folgt. Bei KU kann es also vorkommen, dass man zwei Heim- oder Auswärtsspiele nacheinander hat.


Der Begriff Round Robin (Rundlauf-Verfahren; Zeitscheibenverfahren) bezeichnet ein Scheduling-Verfahren, welches mehreren konkurrierenden Prozessen begrenzte Ressourcen zuordnet. Das heißt, dass allen Prozessen nacheinander für jeweils einen kurzen Zeitraum – dem sogenannten Zeitschlitz – Zugang zu den benötigten Ressourcen gewährt wird. Danach wird der jeweilige Prozess wieder hinten in die Warteschlange eingereiht. Dieses Prinzip wird unter anderem bei Multi-Tasking-Systemen genutzt.
Der Begriff Round Robin (Rundlauf-Verfahren; Zeitscheibenverfahren) bezeichnet ein Scheduling-Verfahren, welches mehreren konkurrierenden Prozessen begrenzte Ressourcen zuordnet. Das heißt, dass allen Prozessen nacheinander für jeweils einen kurzen Zeitraum – dem sogenannten Zeitschlitz – Zugang zu den benötigten Ressourcen gewährt wird. Danach wird der jeweilige Prozess wieder hinten in die Warteschlange eingereiht. Dieses Prinzip wird unter anderem bei Multi-Tasking-Systemen genutzt.

Revision as of 20:10, 15 September 2012

Kickers United

Der Login-Screen

http://www.kickers-united.de

Kurzbeschreibung

Kickers-United ist ein Browsergame, bei dem man die Kontrolle über einen angehenden Fußballstar übernimmt. Anfangs startet man noch als kleiner Hobbyfußballer, benötigt Nebenjobs, um über die Runden zu kommen. Mit jedem Spiel erlangt man neue Fans, das Ansehen steigt, neue Sponsoren, Autos und Häuser warten. Neben der Karriere als Fußballer steht vorallem auch das Privatleben im Vordergrund. Auf diesem Weg trainiert man wie ein Weltmeister, gründet sein eigenes Team oder tritt einem vorhandenen bei und schießt es an die Spitze der ersten Liga.

Alleinstellungsmerkmal

Nebenjobs

Im Gegensatz zu gewöhnlichen Fußballmanagerspielen wird ein einzelner Fußballspieler übernommen und nicht gleich ein ganzes Team. Als Spieler kann man einem im Spiel vorhandenen Verein beitreten oder einen eigenen gründen. Im Verein selber sind eine Menge Features vorhanden, wie z.b. ein Stadionausbau. Jeden Tag finden 2 Ligaspiele statt - geplant sind weitere Pokalwettbewerbe. Da man den einzelnen Spieler übernimmt, kommen noch ganz andere Herausforderungen auf einen zu: das Privatleben. Hier geht es darum die größten Sponsorendeals abzugreifen, die schnellsten Autos zu fahren, die nobelsten Wohnungen zu besitzen und die schönste Freundin zu haben.

Konkurrenz

Da Fußball besonders in Deutschland sehr beliebt ist, gibt es auch eine ganze Reihe von Browsergames, die sich Fußball zum Thema gemacht haben. Für Kickers United gibt es durch den Schwerpunkt auf den einzelnen Spieler direkte und indirekte Konkurenz.

direkt

Kickerstar

  • wird von den Machern von Shakes und Fidget entwickelt
  • humorvoll mit Comic-Look und Rollenspiel-Elementen

indirekt

Fußballmanager, bei denen man einen ganzen Verein übernimmt und diesen organisiert. Auf den einzelnen Spieler als solches, wird kaum Wert gelegt bzw. eingegangen.

  • Onlinefussballmanager
  • Goalunited
  • 11Legends
  • 11x11

Interface

Das Interface besteht aus einem Hintergrundbild, das über den ganzen Bildschirm gestreckt wird, und dem Inhalts-Container, der sowohl vertikal als auch horizontal zentriert ist und eine feste Größe hat. Die vertikale Zentrierung wurde durch einen kleinen Trick realisiert, sodass der Content nicht wie bei üblichen Lösungen (top:50% und negativem margin-top) "verschluckt" wird.

Startseite

Der Inhalts-Container lässt sich im Prinzip in vier Elemente unterteilen:

1. Topbar

Die Topbar zeigt jederzeit die wichtigsten Werte des eigenen Spielers an:

  • Erfahrung
    • das derzeitige Erfahrunglevel
    • Fortschrittsleiste, die anzeigt, wieviel % noch zum nächsten Level gebraucht werden
    • Anzeige der aktuellen Erfahrungspunkte und benötigten Punktezahl zum Levelaufstieg
  • Kontostand
  • Coins (können erworben werden; ermöglichen mehr Komfort und zusätzliche Statistiken)
  • Energie
    • Zeit bis der nächste Energie-Punkt regeneriert wird
    • aktuelle Energie-Punkte
    • maximal mögliche Energie-Punkte
  • Fitness
    • Zeit bis der nächste Fitness-Punkt regeneriert wird
    • aktuelle Fitness-Punkte
    • maximal mögliche Fitness-Punkte
  • Nachrichtenanzeige
  • Spieler- bzw. Vereinssuche / Liveticker während Spielen
  • Hilfe
  • Einstellungen
  • Logout


2. Unternavigation

Die Unternavigation zeigt alle möglichen Unterpunkte einer Kategorie. Wählt man nun zum Beispiel die Kategorie Spieler als Oberpunkt, werden in der Unternavigation die Punkte Information, Talente, Leistungsdaten, Statistiken, Auszeichnungen, Kleiderschrank und Bank. Auf welchem Punkt man sich befindet, wird durch andere Schriftfarbe und Hintergrund gekennzeichnet.


3. Content

Dies ist der Hauptbereich, in dem der gesamte Inhalt angezeigt wird. Gestalterisch sind einzelne Inhalte in Fenstern separiert, welche auf gültige Standards aufbauen: Eine Top-Leiste mit zentrierter Überschrift, welche sich durch andere Farbe vom Inhalt abgrenzt. Bei manchen Fenstern gibt es aus Platzgründen Tabs (Registerkarten), welche mithilfe von AJAX asynchron geladen werden. Es wird also nur das betreffende Fenster neugeladen und nicht die gesamte Seite. Durch Push-State-Technik wird die URL so manipuliert, dass sie zum jeweiligen Tab passt. Ist Javascript deaktiviert oder blockiert, können Tabs durch eindeutige URL angesteuert werden.


4. Navigationsleiste

In der Navigationsleiste lassen sich alle Oberpunkte (Spieler, Shop, Training usw.) ansteuern. Durch "hovern" werden zudem alle Unterpunkte (siehe Unternavigation) angezeigt, ähnlich des Windows Startmenüs.

Technik

Datenbank

SQL-Datenbank

Im Hintergrund des Spiels werden alle Informationen in einer SQL-Datenbank gespeichert. Diese besteht momentan aus 63 Tabellen, worin z.B. die Kleidung der Spieler festgelegt/gespeichert wird. Abgefragt wird durch einfache PHP-Abfragen oder komplexere SQL-Joins.

  • phpMyAdmin 3.2.4

Sprachen

  • HTML 5
  • CSS 3
dynamisch erstelltes Mannschaftsfoto
  • PHP
    • GD Library zur Erstellung von dynamischen Bildern wie Spielerfotos oder Mannschaftsfotos
  • Javascript
    • jQuery
    • jQuery UI
    • AJAX
  • Cronjobs (werden durch einen externen Anbieter bereitgestellt/ausgeführt)


Forum

Forum

Woltlab Burning Board im Spieldesign (muss noch auf das neue Design vom 01.08.2012 angepasst werden)

Spielprinzip

die Topbar mit Anzeige von Energie und Fitness, beide regenerieren gerade

Jeder Spieler startet mit begrenzter Energie und Fitness. Damit kann er Aktionen ausführen, welche Energie oder Fitness verbrauchen. Beide regenerieren um einen Punkt in 3:20 Minuten. Durch Boosts (Energydrinks, Doping) oder vereinseigene Trainer (Co- und Konditionstrainer) kann diese Zeit verringert werden oder eine Sofortregeneration erlangt werden.


Energie

Training der Skills

Die Energie ist durch ein Blitz-Symbol gekennzeichnet. Energie wird benötigt um Skills oder Talente zu trainieren. Die Energie, die beim Skilltraining benötigt wird, steigt, wenn man ein Level aufsteigt (Levelup). Man kann die zu verbrauchende Energie senken, indem man im Verein verschiedene Trainingsgegenstände (Trainingsplatz usw.) ausbaut.


Fitness

Herausforderung zum Eins gegen Eins

Die Fitness ist durch ein Herz-Symbol gekennzeichnet. Fitness wird benötigt um Eins gegen Eins - Spiele zu absolvieren. Dabei gibt es die Möglichkeit, Spiele per Sofortergebnis angezeigt zu bekommen (kostet 10 Fitness) oder das Spiel in 10 Minuten Länge in einem Liveticker zu verfolgen (5 Fitness).


Erfahrungssystem

Hat man genug Erfahrungspunkte gesammelt, kommt es zum Levelup

Das Erfahrungssystem ist das zentrale Spielelement. Durch Aktionen wie Training oder Spiele erhält man Erfahrungspunkte. Hat man eine bestimmte Anzahl an Erfahrungspunkten erreicht, kommt es zum Levelup, man steigt also ein Level auf. Dort fängt man wieder bei 0 Erfahrungspunkten an.

Bei jedem Levelup werden neue Fahrzeuge, Wohnungen und Kleidungsstücke wie Schuhe und Trikots freigeschalten. Diese haben höhere Werte und wirken sich auf Ansehen, Energie und Fitness aus.

Ausserdem kann man 5 Attribut-Punkte für Energie, Fitness, Angriff oder Verteidigung und 2 Positionspunkte verteilen. Es gibt 7 Positionen (Mittelstürmer, Flügelstürmer, Offensives Mittelfeld, Flügel Mittelfeld, Defensives Mittelfeld, Aussenverteidiger, Innenverteidiger) auf welche man jeweils 10 Punkte verteilen kann.


individueller Spieler

individueller Spieler mit zahlreichen Aussehensmöglichkeiten


  • 6 Hautfarben
  • 4 Haarfarben
  • 26 Frisuren
  • 13 Bärte


Skills

8 Fähigkeiten (Skills)

  • Balance
  • Ausdauer
  • Schnelligkeit
  • Reaktion
  • Technik
  • Pass
  • Schuss
  • Übersicht


Talente

Talente

12 Talente

  • Kopfball
  • Sprungkraft
  • Schnelligkeit
  • Beweglichkeit
  • Kurzpassgenauigkeit
  • Dribbling
  • Freistoss
  • Flanken
  • Tackling
  • Torinstinkt
  • Spielmacher
  • Ballzauber


Auszeichnungen

Auszeichnungen


  • Siegesserie
    • 10, 20, 50, 100, 200 Siege in Folge
  • Kantersieg
    • 3, 4, 6, 7, 8 Tore mehr als Gegner
  • Dauerbrenner
    • 100, 500, 2.500, 5.000, 10.000 Spiele
  • Weiße Weste
    • 1, 5, 10, 20, 50 Spiel ohne Gegentor
  • Durchsetzungsvermögen
    • 1, 10, 50, 250, 1.000 Siege gegen Stärkeren
  • Torjäger
    • 3, 4, 6, 7, 8 Tore im Teamspiel


Shop

Shop

Im Shop hat mandie Möglichkeit Kleidung zu kaufen und damit Energie und Fitness zu gewinnen.

  • 17 Schuhe
  • 60 Hosen
  • 97 Trikots
    • 6 Spezialsets Europameisterschaft

Privatleben

Da ich im Gegensatz zu anderen Spielen nicht den Fokus auf den Verein lege, sondern auf einen eigenen individuellen Spieler, ist das Privatleben ein wichtiges Feature, was Kickers-United von der Konkurrenz abgrenzen soll.

Fahrzeuge

Fahrzeuge

Im Spiel sind 16 unterschiedliche Fahrzeuge vorhanden

  • Fahrrad
  • Moped
  • Omas gebrauchter Kleinwagen
  • ...
  • Kompaktwagen
  • Sport-Coupe
  • Luxus-Sportwagen

Wohnungen

Wohnungen

Im Spiel sind 16 unterschiedliche Wohnungen vorhanden

  • Hotel Mama
  • runtergekommenes Wohnheim
  • Wohngemeinschaft
  • ...
  • Loft
  • Einfamilienhaus
  • Schloss

Freundinnen

  • Im Spiel sind 48 unterschiedliche Freundinnen vorhanden

Je teurer das Fahrzeug und die Wohnung, desto "besser" werden die Frauen, die sich zu einem hingezogen fühlen. Durch eine Freundin erhält man ausserdem ein zusätzliches Einkommen. Je höher das Vertrauen zueinander, desto höher der Anteil. Man kann Beziehungen öffentlich machen, heiraten oder sich trennen. Neue Freundinnen erhält man per Zufall nach einer zufälligen Dauer (i.d.R. nach etwa 2 Wochen).

Verein

Ein Verein besteht aus 10 Einzelspielern. Entweder gründet ein Spieler einen Verein oder er tritt einem schon bestehenden bei bzw. bewirbt sich bei diesem.

Teamchat

  • richtiger Chat, der über AJAX-Request asynchron aktualisiert wird
  • Onlineanzeige, sodass man sieht, wer aus dem Verein grad online ist
  • Beiträge kategorisierbar durch Themen, die man erstellen kann

Informationen

  • Upload-Funktion für eigenes Vereinslogo
  • dynamisch erstelltes Mannschaftsfoto
  • "Über uns"-Text, der mit einem WYSIWYG-Editor erstellt werden kann

Aufstellung

Aufstellung

Hier werden alle Spieler aufgelistet, welche per Drag&Drop auf verschiedene Positionen verschoben werden können (wird per AJAX-Request asynchron in die Datenbank gespeichert).


  • 6 verschiedene Formationen (4-4-2, 5-3-2, ... )
  • Taktiken
    • Ausrichtung (offensiv, ausgeglichen, defensiv)
    • Passspiel (kurz, ausgeglichen, lang)
    • Spielweise (sicher, ausgeglichen, riskant)
    • Angriffsseite (über rechts, durch die Mitte, über links)
    • Abwehrchef
    • Spielmacher
    • Sturmtank
  • Schützen
    • Freistoss
    • Eckball
    • Elfmeter

Stadion

Stadion

Das Stadion ist in Vogelperspektive sichtbar und zeigt das tatsächliche Aussehen bei der aktuellen Ausbaustufe der Zuschauerränge. Es kann nach Wunsch benannt werden und besteht aus Steh-, Sitz- und VIP-Plätzen. Bewertet wird das Stadion in Kategorien (5 Sterne). Jeder Stern hat eine bestimmte Vorraussetzung, z.B. mindestens 2.000 Plätze oder Parkplätze.


  • Übersicht
    • Zuschauerschnitt, Auslastung, max. Einnahmen pro Heimspiel
  • Stadionausbau
    • die 8 Blöcke des Stadions sind separat ausbaubar inkl. Kostenberechnung
    • Farbe der Stadionbestuhlung wählbar
  • Rund ums Stadion
    • Logen (freie Stadionhefte, Geschenke, Luxusessen, freier Schampus)
    • Presse (Kommentatoren-Kabine)
    • Anzeigetafel (Anzeige mit Tafeln, LED-Anzeigetafel, Videowand, Videowürfel)
    • Flutlicht (Laternen, Flutlicht)
    • Luxus (Sitzkissen, Wärmestrahler, beheizbare Sitze, Rasenheizung, Luxuskabinen)
    • Parkmöglichkeit (Straßengraben, kleiner Parkplatz, mittlerer Parkplatz, großer Parkplatz, Parkhaus)

Umfeld

Umfeld

Das Vereinsumfeld gibt dem Spiel mehr Langzeitmotivation und den Vereinen mehr Spieltiefe. Es stehen verschiedene Sachen zur Verfügung, die auch bei der Infrastruktur richtiger Fußballvereine eine Rolle spielen. Viele Gebäude ermöglichen die Einstellung bestimmter Vereinsangestellter, wie z.B. einen Co- oder Konditionstrainer. Zum Bau/Kauf bestimmter Sachen sind ausserdem Voraussetzungen zu erfüllen, wie z.B. eine bestimmte Anzahl an Fans.


  • Gebäude
    • Vereinsheim (5 Stufen)
    • Bierstand (erhöht Einnahmen bei Heimspielen)
    • Wurstbude (erhöht Einnahmen bei Heimspielen)
    • Fanshop (3 Stufen)
    • Wellnesscenter (ermöglicht Einstellung eines Masseur)
  • Angestellte
    • Masseur (füllt allen Spielern Energie und Fitness auf)
    • Sicherheitspersonal (ermöglicht Bau von Bierbuden)
    • Co-Trainer (verkürzt Regenerationszeit der Energie)
    • Konditionstrainer (verkürzt Regenerationszeit der Fitness)
    • Stadionsprecher (mehr Zuschauer bei Heimspielen)
    • Fanbeauftragter (mehr Einnahmen bei Heimspielen, erhöhter Fanzuwachs)
  • Training (bei allen Ausbauten weniger Energieverbrauch bei Training)
    • Trainingsplatz (3 Stufen)
    • Trainingslehrbuch
    • Slalomstangen
    • Sack Bälle
  • Aussendarstellung (erhöhte Zuschauerzahlen und Fanzuwachs für eine Woche)
    • Zeitungskampagne
    • Plakatkampagne
    • Radiokampagne
    • Fernsehkampagne
    • Eigener TV-Sender (dauerhafte Erhöhung von Zuschauerzahlen und Fanzuwachs, tägliche Einnahmen)
  • Anreise
    • Mannschaftsbus (ermöglicht ein zusätzliches Testspiel im Heimstadion)
    • Privatjet (ermöglicht ein zusätzliches Testspiel im Heimstadion)
  • Veranstaltungen
    • Vereinsfest (1x pro Saison einmaliger Fanzuwachs)

Finanzen

  • Bilanz
  • Kontoauszug
  • Geld ein- oder auszahlen

Leistungsdaten

Leistungsdaten


  • Fans
  • Marktwerte
  • Gesamtstärken
  • Spiele
  • Tore
  • Vorlagen

Saisonbilanzen

Saisonbilanzen


  • Saisonbilanzen
    • Liga
    • Platzierung
    • Siege, Unentschieden, Niederlagen
    • Tore, Tordifferenz
    • Punkte
    • Einnahmen
  • Titel

Mannschaftsrat

Mannschaftsrat

Der Kapitän eines Vereins kann den anderen Mitgliedern verschiedene Rechte zuteilen.

  • Spiele starten
  • Aufstellung bearbeiten
  • ...
  • Vermögen verwalten
  • Bewerber verwalten

Personal

  • Bewerber verwalten (akzeptieren/ablehnen)
  • Verein verlassen
  • Kapitän wählen

Liga

Liga-Übersicht

Wie im richtigen Fußball gibt es auch bei Kickers-United ein Ligensystem. Eine Liga besteht aus 14 Vereinen. In der Liga tritt der eigene Verein 2x gegen alle konkurrierenden Vereine an - ein Spiel im eigenen Stadion (zuhause) und eins im Gegnerischen (auswärts). Eine Saison besteht somit aus 26 Spieltagen. Die Spieltage finden im Tagesrhythmus statt, wobei jeweils 18:00 Uhr Anstoß ist. Die Saison startet immer am 1. Tag des Monats. Ist die Saison vorbei, geht es in die Sommerpause.


Erstellung des Spielplans

Spielplan

Der Spielplan wird zu Beginn jeder Saison automatisiert (durch eine Funktion) erstellt. Zu Beginn werden Leistungsdaten (der vergangenen Saison) aller Spieler und Vereine in die Datenbank geschrieben, anschließend Saisonprämien ausgezahlt und die Auf- und Absteiger bestimmt. Ist dies abgeschlossen, werden alle Partien der neuen Saison erstellt und in die Datenbank geschrieben.


Spielberechnung

Bei der Spielberechnung gibt es zwei wichtige Funktionen:

  • Die Berechnung der Ergebnisse inklusive aller Statistiken (Schüsse, Freistöße, Fouls, ... ), welche den aktuellen Spieltag in der Datenbank aktualisiert und die ermittelten Daten dem jeweiligen Spiel hinzufügt.
  • Die Erstellung der einzelnen Events für den Liveticker. An diese Funktion werden die Daten aus der ersten Funktion übergeben. Anschließend werden alle Spieler (z.B. Torschütze, Vorlagengeber) bestimmt und in eine extra Tabelle in der Datenbank geschrieben.


Jeder Spieltag wird dann automatisiert durch einen Cronjob gestartet, d.h. alle Ligen werden durchgegangen und Spiele gesucht, die in dem Moment stattfinden sollen. Wird ein Spieltag, der noch nicht berechnet wurde, gefunden, werden für jedes Spiel die zwei Funktionen von oben aufgerufen.

Pokal

Regelwerk Pokal

Neben der Liga gibt es auch einen Pokalwettbewerb, bei dem die 64 besten Vereine im K.O.-System gegeneinander antreten. K.O.-System bedeutet, dass alle Begegnungen (bei 64 Vereinen sind das 32 Partien) festgelegt werden und nur die Sieger in die nächste Pokalrunde einziehen. Das wird solang gemacht, bis im Finale die letzten zwei verbleibenden Vereine gegeneinander antreten und einer davon Pokalsieger wird.


Erstellung des Spielplans

Pokal-Spielplan

Im Gegensatz zur Liga wird beim Pokal nur eine Runde bzw. ein Spieltag zu Saisonbeginn erstellt. In einer Funktion wird ein Array erstellt, welches alle verbleibenden Vereine beinhaltet. Dieses Array wird durch shuffle zufällig sortiert und anschließend die Begegnungen bestimmt. Im Pokal wird bei einer Auslosung von Vereinen mit unterschiedlichen Ligazugehörigkeiten noch das Heimrecht geändert, sodass der "kleinere" (in der schlechteren Liga) Verein immer zuhause spielt. Im Pokal gibt es eine Antrittsprämie, die bei jeder überstandenen Runde höher wird.

Ist die Pokalrunde vorbei, werden die ausgeschiedenen Vereine aus dem Array entfernt und das Ganze wiederholt. Nach 6 Pokalrunden steht der Pokalgewinner fest.

Die Spielberechnung ist die Gleiche wie bei den Ligaspielen.

Berechnungen

Liga-Spielplan

Der Liga-Spielplan wird wie beim realen Vorbild durch das Round Robin Verfahren erstellt. Im Gegensatz zum Deutsche-Bundesliga-Spielplan kann es vorkommen, dass einige Vereine während der Saison mehr Heimspiele ausgeführt haben, als andere Vereine. Am Ende der Saison hat jedes Team jedoch die gleiche Anzahl an Heimspielen.

Der Begriff Round Robin (Rundlauf-Verfahren; Zeitscheibenverfahren) bezeichnet ein Scheduling-Verfahren, welches mehreren konkurrierenden Prozessen begrenzte Ressourcen zuordnet. Das heißt, dass allen Prozessen nacheinander für jeweils einen kurzen Zeitraum – dem sogenannten Zeitschlitz – Zugang zu den benötigten Ressourcen gewährt wird. Danach wird der jeweilige Prozess wieder hinten in die Warteschlange eingereiht. Dieses Prinzip wird unter anderem bei Multi-Tasking-Systemen genutzt.

In vereinfachter Form wird ein Spielplan so erstellt:


### 1) erstelle Array ($array_teams) mit allen teilnehmenden Teams einer Liga

[...]

while($row = mysql_fetch_object($qry))
{
    $i++;
    $array_teams[$i] = $row->ID_team;
}

### 2) durchlaufe fortan die Schleife: 

for ($round = 1; $round < $num_teams; $round++) 
{
    ### Es wird 13 Mal die Schleife durchlaufen. 
    ### Grund dafür ist die Anzahl (14) der Teams ($num_teams), 
    ### die in einer Liga antreten. 
    ### Jeder Schleifendurchlauf erstellt einen Spieltag.

    ...

    ### 2.1) erstelle Array ($teams_done)

    $teams_done = array();

    ### 2.2) durchlaufe fortan die Schleife:

    for ($team = 1; $team < $num_teams; $team++) 
    {
        ### Es werden also jedem Team, 
        ### ausser dem Letzten (14. Team), 
        ### eine Zählnummer gegeben.

        ### 2.2.1) Prüfe, ob das Team bereits abgearbeitet ist:

        if (!in_array($team, $teams_done)) 
        {
            ### 2.2.2) Wenn Bedingung false, dann wähle Gegner:

            $opponent = $round - $team;
            $opponent += ($opponent < 0) ? $num_teams : 1;

            ### 2.2.3) Wenn Bedingung 
            ### (Gegner ist nicht das momentan ausgewählte Team) true, 
            ### gehe weiter:

            if ($opponent != $team) 
            {
                ### 2.2.3.1a) Wenn Bedingung true ist, gehe weiter:

                if (($team + $opponent) % 2 == 0 xor $team < $opponent) 
                {
                    ### Das heißt, es muss entweder der Rest der Summe 
                    ### beider Teams durch 2 dividiert 0 ergeben oder 
                    ### (exklusives Oder!) das momentan ausgewählte Team 
                    ### einen kleineren Index als der Gegner haben. 
                    ### Ist dies der Fall, wird die nun feststehende 
                    ### Paarung in die Datenbank eingetragen. 
                    ### Heimrecht hat das ausgewählte Team ($array_teams[$team]),
                    ### auswärts spielt der gewählte Gegner ($array_teams[$opponent]). 
                    ### Es werden die eindeutigen IDs der Vereine in die Datenbank
                    ### geschrieben, welche in Schritt 1) in das Array 
                    ### $array_teams gespeichert wurden.
                } 

                ### 2.2.3.1b) Wenn Bedingung von oben false ist, gehe weiter:
                
                else 
                {
                    ### Der Vorgang ist dem aus 2.2.3.1a) fast identisch. 
                    ### Es werden lediglich Heim- und Auswärtsteams getauscht. 
                    ### Somit bedeutet das: 
                    ### Heimrecht hat der gewählte Gegner ($array_teams[$opponent]), 
                    ### auswärts spielt das momentan ausgewählte Team ($array_teams[$team]).
                }

                ### 2.2.4) Schreibe abgearbeitete Teams in das Array, 
                ### welches in Schritt 2.1) erstellt wurde:

                $teams_done[] = $team;
                $teams_done[] = $opponent;
            }
        }
    }

    ### 2.3a) Wenn Bedingung true ist, gehe weiter:

    if ($round % 2 == 0) 
    {
        ### Das heißt, es muss der Rest der Rundenzahl ($round), 
        ### welche in der Schleife aus Schritt 2) initialisiert wurde, 
        ### durch 2 dividiert 0 ergeben. 
        ### Ist dies der Fall, wird das letzte verbleibende Team (14.),
        ### welches in Schritt 2.2) ausgelassen wurde, 
        ### noch einer Paarung zugeteilt:

        $opponent = ($round + $num_teams) / 2;

        ### Nun werden die Paarungen, wie bereits erläutert, 
        ### in die Datenbank geschrieben.

    }

    ### 2.3b) Wenn Bedingung von oben false ist, gehe weiter:

    else 
    {
        $opponent = ($round + 1) / 2;

        ### Nun werden die Paarungen, wie bereits erläutert, 
        ### in die Datenbank geschrieben. 
        ### Im Unterschied zu 2.3a) wird bei 2.3b) das Heimrecht getauscht.

    }
}


Pokal

Der Pokal-Spielplan wird nur für je die aktuelle Pokalrunde erstellt. Die erste Runde wird direkt nach der Erstellung des Liga-Spielplans erstellt. Dabei werden die 64 besten Vereine ausgewählt und in eine weitere Tabelle (ID_team|saison|runde) geschrieben. Anschließend wird eine Funktion aufgerufen, die den Spielplan erstellt und bei jeder neuen Pokalrunde aufgerufen wird.

Es werden alle Vereine in zufälliger Reihenfolge ausgewählt, die in der Datenbank noch keinen Eintrag haben, in welcher Runde (runde) sie ausgeschieden sind. Diese Vereine werden in ein Array ($array_teams) geschrieben. Nun wird eine Zählschleife mit der Länge von (Anzahl Vereine/2) durchlaufen.

Bei jedem Durchgang werden 2 zufällige Vereine rausgesucht und zu einer Partie zusammengefügt. Zum Schluss wird noch geprüft, ob die unterklassigen Vereine Heimrecht haben und anschließend die fertigen Partien in die Datenbank geschrieben.

Ist das Spiel vorbei, wird bei den Verlierern der absolvierten Pokalrunde der Datenbankeintrag "runde" auf die Runde aktualisiert, in der der Verein ausgeschieden ist. Somit wird er bei der nächsten Runde nicht mehr berücksichtigt.


Spielberechnung

Bei der Berechnung von Vereinsspielen werden die Werte der Vereine auf eine komplexe und möglichst faire Art verglichen. Zur Verbesserung und Anpassung habe ich mir eine kleine Testumgebung geschrieben, bei der ich alle Werte der Vereine angezeigt bekomme, die Fanzahlen, Einnahmen, Torschüsse und vieles mehr.

Welche Werte werden berücksichtigt und miteinander verglichen?


1. Zuschauer

  • Grundlage für die Anzahl zu erwartender Zuschauer ist zu allererst die Gesamtzahl der Fans beider Vereine
  • Sind beide Vereine von etwa gleicher Gesamtstärke, werden mehr Zuschauer kommen. Sind beide Vereine in ihrer Gesamtstärke zu ungleich, wird mit weniger Zuschauern zu rechnen sein.
  • Hat ein Verein eine Werbekampagne laufen, einen Stadionsprecher und/oder Fanbeauftragten eingestellt, sind mit zusätzlichen Zuschauern zu rechnen.
  • Dem Auwärtsteam wird bei jedem Spiel ein Kartenkontingent von 1/10 der Gesamtkapazität zugesprochen.
  • Werden bei Freundschaftsspielen immer wieder die gleichen Partien gespielt, werden die Zuschauer ihr Interesse verlieren und nicht mehr ins Stadion kommen.


2. Einnahmen

  • Grundlage für die möglichen Einnahmen sind die vom Spiel fest vorgegebenen Eintrittspreise:
    • 6 € pro Stehplatz
    • 12 € pro Sitzplatz
    • 25 € pro VIP-Platz
  • Je nach Zuschauerschnitt wird dann eine Verteilung auf alle Platzarten errechnet und die Gesamteinnahmen durch die verschiedenen Tribünenkarten erechnet.
  • Sind im Umfeld Bierbuden und/oder Wurststände vorhanden, kommen durch diese noch Einnahmen hinzu. Das selbe gilt für den Besitz eines Fanbeauftragten.
  • Die Einnahmen durch Kartenverkäufe sind im Verhältnis 75% Heimteam : 25% Auswärtsteam geteilt. Spielen beide Vereine auf neutralem Boden (Ausweichstadion), erhalten beide 50% der Eintrittspreise.


3. Fouls

  • Bei der Anzahl an Foul sind neben dem Zufall folgende Skills ausschlaggebend:
    • Talent Beweglichkeit des Gegnerteams
    • Talent Dribbling des Gegnerteams
    • Talent Ballzauber des Gegnerteams
    • Gesamtstärke des Gegnerteams
    • [-] Talent Tackling des eigenen Teams


4. Schüsse Ausschlaggebend:

  • Talente
    • Beweglichkeit des eigenen Teams
    • Freistoss des eigenen Teams
    • Kurzpassgenauigkeit des eigenen Teams
    • Flanken des eigenen Teams
    • Schnelligkeit des eigenen Teams
    • Dribbling des eigenen Teams
    • Ballzauber des eigenen Teams
    • Torinstinkt des eigenen Teams
    • Spielmacher des eigenen Teams
    • [-] Kopfball des Gegnerteams
    • [-] Sprungkraft des Gegnerteams
    • [-] Tackling des Gegnerteams
  • alle Skills des eigenen Teams im Vergleich zum herausgeforderten Teams
  • die zufällig und für 24 Stunden generierte Form aller Spieler
  • Abwehr [aller Abwehrspieler]
    • Gesamtstärke
    • Talent Kopfball
    • Talent Sprungkraft
    • Talent Schnelligkeit
    • Talent Beweglichkeit
    • Abwehrchef (taktische Aufstellung)
  • Mittelfeld [aller Mittelfeldspieler]
    • Gesamtstärke
    • Talent Kurzpassgenauigkeit
    • Talent Dribbling
    • Talent Beweglichkeit
    • Talent Freistoss
    • Talent Spielmacher
    • Talent Ballzauber
    • Spielmacher (taktische Aufstellung)
  • Sturm [aller Stürmer]
    • Gesamtstärke
    • Talent Schnelligkeit
    • Talent Flanken
    • Talent Dribbling
    • Talent Kopfball
    • Talent Sprungkraft
    • Talent Torinstinkt
    • Sturmtank (taktische Aufstellung)
  • die taktische Ausrichtung (offensiv, ausgeglichen, defensiv)
  • Talente der einzelnen Positionen
    • IV | Innenverteidigung: Tackling, Kopfball, Sprungkraft, Beweglichkeit
    • AV | Aussenverteidigung: Tackling, Schnelligkeit, Beweglichkeit
    • DM | defensives Mittelfeld: Tackling, Kurzpassgenauigkeit, Spielmacher
    • FM | Flügel Mittelfeld: Schnelligkeit, Flanken, Dribbling, Kurzpassgenauigkeit
    • OM | offensives Mittelfeld: Kurzpassgenauigkeit, Dribbling, Freistoss, Torinstinkt
    • FS | Flügelsturm: Schnelligkeit, Flanken, Dribbling
    • MS | Mittelsturm: Kopfball, Sprungkraft, Torinstinkt
  • Skills der einzelnen Positionen
    • IV | Innenverteidigung: Balance, Reaktion, Pass, Übersicht
    • AV | Aussenverteidigung: Balance, Ausdauer, Schnelligkeit, Reaktion
    • DM | defensives Mittelfeld: Balance, Ausdauer, Reaktion, Übersicht
    • FM | Flügel Mittelfeld: Ausdauer, Schnelligkeit, Technik, Pass
    • OM | offensives Mittelfeld: Technik, Pass, Schuss, Übersicht
    • FS | Flügelsturm: Ausdauer, Schnelligkeit, Pass, Schuss
    • MS | Mittelsturm: Balance, Reaktion, Technik, Schuss
  • Angriffsseite (Linkt, Mitte, Rechts) die gewählt wurde unter Taktik
  • Spielweise (riskant, ausgeglichen, sicher) die gewählt wurde unter Taktik


5. Tore

  • Grundlage für die Anzahl an Toren ist die Anzahl an Torschüssen.
  • Je mehr Torschüsse, desto mehr Tore sind prinzipiell möglich.


6. Elfmeter

  • Die Anzahl der Elfmeter berechnet sich aus der Anzahl der Tore.
  • Maximal 1/5 aller Tore sind Elfmetertore.


7. Freistösse

  • Fouls [-] Elfer des Gegnerteams


8. Ballbesitz

  • Gesamtstärken der Vereine im Vergleich multipliziert mit der Form aller Spieler


9. Eckbälle

  • Ballbesitz multipliziert mit einer Zufallszahl zwischen Schüssen aufs Tor und Schüssen insgesamt

Ziele für die Zukunft

In Zukunft sind weitere Updates mit Einbeziehung der Community geplant. Dabei setze ich auf einen festen Userstamm von momentan etwa 140 Spielern, die sich auch aktiv im Forum einbringen. Somit ist es möglich, anfallende Bugs zeitnah zu entfernen und das Spiel fehlerfrei zu programmieren.


Für die nähere Zukunft sind ausserdem geplant:


  • Mehr Spieltiefe durch Events, welche dem Spiel einen gewissen Charme und Humor bringen sollen.
  • Ein Einsteiger-Tutorial, damit neue Spieler nicht direkt vom Umfang "erschlagen" werden und anfangs noch etwas Hilfestellung bekommen.
  • Richtige Presse-Interviews, die sich auf den momentanen Spielverlauf anpassen und Antworten auch Konsequenzen haben.
  • Pokalauslosungen, die live zugelost werden, sodass bei der Auslosung Spannung erzeugt wird.
  • Wahl zum Spieler des Jahres, wobei jeder Spieler seine Stimme abgeben kann. Bei der Vorauswahl werden Spieler mit hoher Tor- und Vorlagenanzahl sowie Spieler mit guten Spielnoten berücksichtigt.
  • Eine Mobilversion, sodass weniger Traffic anfällt und die wichtigsten Funktionen auf mobile Endgeräte optimiert werden.