Wie ich 13 Jahre lang einen Fußballsimulator gemacht habe

2_fview_gameplay


Die Geschichte, die ich erzählen werde, begann vor 13 Jahren in einer Informatikstunde. Meine Freunde der siebten Klasse und ich lösten alle Probleme in Pascal und hatten Spaß beim ersten Quake. Unser Lehrer sah das, kam auf mich zu und sagte nur einen Satz, der mein Bild von der Welt verzerrte: "Wenn Sie in der Lektion Spiele spielen möchten, schreiben Sie sie selbst." Seitdem mache ich gelegentlich Spiele. Einer von ihnen ist ein Fußballsimulator, der diskutiert wird.


Dies ist eine spannende Geschichte über meinen Weg als Entwickler, unvollendete Projekte und warum sie manchmal nicht abgeschlossen werden müssen.


Haftungsausschluss: Seit den in diesem Text beschriebenen Ereignissen habe ich einen Unity-Entwicklungskurs absolviert und einige meiner Spiele auf Google Play und im Windows Store veröffentlicht. Jetzt bin ich der Herausgeber des Yandex.Money-Blogs und erzähle diese Geschichte, um Erfahrungen mit der Community zu teilen.


In der damaligen russischsprachigen Spieleentwicklung gab es ein interessantes Feature: MS DOS war fast vorbei und einheimische Programmierer sägten aktiv Spielzeug für Windows. Eine große Anzahl von Simulationen kam als Computermann, Panzer, verschiedene Karten- und "logische" Spiele heraus. Und Festplatten mit diesen Spielen wurden auch in großen Mengen verkauft. Über die Zusammenstellung solcher Sammlungen ist in den "Tests of the Tester" wenig geschrieben, aber ich wusste es noch nicht.


Sicherlich erinnern sich viele von Ihnen an dieses schöne Menü:


1250menu
Das Leben tätschelte ihn natürlich


Auf einer dieser Discs traf ich zum ersten Mal den Spieltrainer - einen Textfußballmanager. Dort könnte man ein Team aus der englischen Premier League nehmen und versuchen, es zur Meisterschaft zu bringen. Und dieses Spiel wurde nach dem Shareware-Modell verteilt: Man konnte zwei Spielzeiten spielen und dann bezahlen. Natürlich war es nicht möglich, in irgendeiner Weise zu bezahlen, da es dafür notwendig war, eine Überweisung an den Ersteller des Spiels zu senden, und mit 13 gehen Sie nicht zur Bank, Sie denken nicht einmal darüber nach. Yandex.Money existierte damals bereits, aber bis Kassierer erschien, blieben 8 Jahre, daher war es auch unpraktisch. Meine Freunde und ich haben zwei Spielzeiten gespielt, und dann haben wir wieder angefangen.


Ich musste nach einer Lösung suchen und schrieb dabei eines meiner ersten Spiele - Trainer, mit einer interessanteren russischen Liga für mich, einem Pokal und einer Reihe von Fehlern. Ich habe den Namen nicht geändert, ich habe nur die Zwei in drei geändert. Es stellte sich so heraus:


Coach 3 v2.52


Was braucht eine Fußballmannschaft? Natürlich die Spieler. Natürlich wusste dann niemand etwas über Lizenzen für Vereine und Spieler - wir haben uns nur mit einem Klassenkameraden getroffen und Listen von Teams aus dem Gedächtnis erstellt. So hatten zum Beispiel CSKA und Spartak immer noch jeweils 11 Leute (ja, es war ein Simulator ohne Ersatz), aber Luch-Energia aus Wladiwostok hatte leere Würfel anstelle von Spielern.


Wie ich mich jetzt erinnere: 2005 habe ich mich mit einem Lehrbuch für Informatik für die 9. Klasse bewaffnet (es ging nur um mein Lieblings-Visual Basic 6) und den Formulareditor geöffnet - das IDE-Wort habe ich viel später gelernt. Zeichnete eine Schaltfläche im Formular, klickte und öffnete den Code-Editor. Voller Stolz auf mich selbst tippte ich


Private Sub Command1_Click() End End Sub 

und klickte auf "Ausführen". Alles hat funktioniert und mich sehr gefreut. Nach einer Weile erschien ein textbasierter Fußballsimulator - Coach v2.52.


2018-11-01_11-03-44
RPL-Anwälte, wenn Sie dies lesen - dieses Spiel wurde noch nie veröffentlicht oder für Geld verkauft


Dann schien es mir, dass dies die Perle des Programmcodes ist. Natürlich wusste ich in diesem Moment nicht viel und zum Beispiel wurden die Tabellen in sechs Arrays von Label direkt auf dem Formular gespeichert. Kein Speichern, keine variablen Arrays - nur Hardcore. Aus diesem Grund sind natürlich seltsame Fehler aufgetreten:


2018-11-01_11-11-04
Alle Teams spielten 2 Spiele, einige jedoch 3 und andere nacheinander


2018-11-01_11-17-52
Sie können auch Roy Keane und Andriy Shevchenko in Spartak kaufen. Ich bin mir nicht sicher, was es in mindestens einem Fußballsimulator dieser Zeit war


Stellen Sie sich im Allgemeinen vor, Sie hätten stark vergessen, wie man Datenbanken verwendet, etwas in Textdateien schreibt und Daten in Arrays speichert. Das einzige, was noch übrig ist, sind die Steuerelemente in den Formularen. Beängstigend Und irgendwie sahen die Wochentage des Siebtklässlers so aus, als hätte er beschlossen, dass er spielen kann.


Ich hatte keine Quelle für diese Version, aber ich bin mir sicher, dass es so etwas gab:


 m = Form1.Label5(0).Caption Form2.Label3(m).Caption = Form2.Label3(m).Caption + 3 

Einige Funktionen von VB6 wurden nicht in das Lehrbuch geschrieben. Als ich zum Beispiel herausfand, dass Shape auf verschiedene Arten gegossen werden kann, habe ich dafür ein ganzes Fenster mit der Wahl des Rasens im Clubstadion gemacht:


1_coach_stadium
Könnten Sie den Rasen auf einer Flöte von Webcast-Rohren mähen?


Wichtige Moral Nr. 1 - Entdecken Sie die Leistungsfähigkeit der Werkzeuge, die Sie täglich verwenden.

Ich war mir sicher, dass ich dieses Spiel eines Tages an eine Art Multi-Game senden würde - deshalb habe ich sogar ein Zertifikat geschrieben. Natürlich wurde es dann von zweieinhalb Testern gesehen. Aber da es passiert ist, lass es veröffentlicht werden.


readme.txt

Coach 3 V2.08 - Ausgabe 2006




Hallo! Vielen Dank für den Kauf dieses Spiels.


1.Installation
2. Systemanforderungen
3. Testplattform
4. Was ist neu?
5.Tipps
6.Deinstallation
7. Vielen Dank ...


1.Installation
Führen Sie Setup.exe aus und entpacken Sie die Dateien in einen Ordner mit: \ Programme \ Football Manager 2005
Und entpacken Sie dann die Datei setup2.exe


2. Systemanforderungen
Nein P4-2500. Alles ist extrem einfach.


Pentium 1-233 MHz (300 oder höher empfohlen)
Festplatte 5 MB
16 MB RAM (32 oder höher empfohlen)
Video 16 MB
Windows 9x, Me, NT, 2003, Longhorn. Unter XP funktioniert dies nur, wenn sich die Datei msvbvm60.dll im Stammverzeichnis mit: \ windows \ system befindet
Die Maus.


3. Testplattform
Celeron 1100 MHz
160 MB RAM
Video 16 MB
Windows XP SP2


4. Was ist neu?


Viele neue Dinge gemacht.
Zum Beispiel nehmen jetzt an der Meisterschaft Russlands 14 (!) Teams statt 8 teil.
Der "Team" -Dialog wurde geändert, ein Menü über den Vereinstrainer wurde angezeigt.
Jetzt hängt das Spiel von der Taktik ab!
Starke Rivalen.
Zum ersten Mal seit Trainer 1 erhalten Sie normalerweise Punkte.
Champions League. Superpokal von Russland.


5. Tipps.


Ändern oder löschen Sie keine Dateien aus dem Ordner mit: \ Programme \ Football Manager 2005 \ Clubs \ Emblems
Kopieren Sie nach der Installation die Datei MSVBVM60.DLL in den Ordner c: \ windows \ system


6.Deinstallation


Es ist keine Deinstallation erforderlich. Löschen Sie einfach den Spielordner.


7. Vielen Dank ...


Kusherbayev Daniyar für Betatests.
Karneyev Mikhail, Trofimenko Mikhail für Betatests und wertvolle Ratschläge.
Auf rfpl.org für die Form der Premier League-Teams.


27.01.06


PS Unsere werden gewinnen!


Wenn ich wüsste, dass ich in den nächsten 13 Jahren zu diesem Projekt zurückkehren würde, wäre ich natürlich verantwortungsbewusster darin, alles zu bewahren, was damit verbunden ist. Trotzdem ist Coach 2.5 in der Geschichte geblieben und wird bereits jetzt direkt aus dem Ordner heraus gestartet, der so heißt:


 E:\prod\dev\My_old_dev_projects\Dev\ ,  

Sicher gab es frühere Versionen, aber ich hatte zu diesem Zeitpunkt keine Möglichkeit zum Sichern, und die Quellen bis 2005 gingen zusammen mit ihren früheren Versionen einmal verloren, als eine 2,3-Gigabyte-Festplatte abstürzte. seufzt Nostalgie Und erinnerst du dich, wann du Blood 2 setzen musstest, musstest du Age of Empires 2 löschen?


0__football_champ_nogame
Screenshot von Version 1.62. Wenn Windows 10 1803 im Jahr 2004 veröffentlicht worden wäre, hätte ich diese Aktion nicht verlassen


Wichtige Moral Nr. 2 - Backups erstellen.

Gut und vor allem - das Gameplay. Zufällige Ereignisse, unabhängig von allem - das hat die Aufmerksamkeit der langen Stunden der Entwicklung und des Testens auf sich gezogen. Und wir haben es so getestet - wir haben gespielt, bis etwas Lustiges abgefallen ist.


1_coach_gameplay
Fragen Sie nicht, was Angriffspunkte sind. Ich kann mich nicht erinnern


Sehen Sie diese nervöse rosa Box? Jetzt erzähle ich dir von ihm.


Shinnik und visueller Fußballsimulator


Zusammen mit Coach wurden zwei weitere Spiele auf diesen Discs verteilt. Der erste - "FC Shinnik" von Jewgeni Sharow - war ein mittelmäßiges Management der Mannschaft, aber man konnte das Spiel sehen. Gemessen an den Credits wurde es auch für einige Zeit gemacht - von 1996 bis 2000. Das zweite Spiel war das dosovskiy "Football 4x4" - es gab dort absolut nichts Beeindruckendes, außer den rennenden Männern, aber es faszinierte mich so sehr, dass ich mich entschied, dasselbe zu tun Spiel für dich.


Fußball 4x4

2018-11-01_23-53-44


Aufgrund mangelnder Erfahrung erschien zunächst eine rosa Schachtel. Er bewegte sich über das Feld und zeigte an, wo das Spiel lief. Und sogar etwas beeinflusst. Dies war nicht genug und ich machte das zweite Fußballprojekt in meinem Leben - Football View.


2_fview_gameplay
Ja, ja, das sind verschmierte Banner. Im letzten Jahrzehnt war es irgendwie einfacher.


Rätsel - wie man Spieler ständig auf dem Spielfeld bewegt, wenn man nicht für jedes ein eigenes Skript aufhängen kann, das die Position, die Nachbarn und die Entfernung zum Ball berücksichtigt? Die Lösung besteht darin, den Timer zu verwenden und die Spieler in der Schleife zu drehen, indem sie zufällig auf die Breite des Sprites verschoben werden. Der Code stammt direkt aus dem Jahr 2005, daher schäme ich mich jetzt sehr.


 Private Sub Igroki_Timer() k = k + 1 ′   For i = 1 To 8 Randomize (x) x = Int(Rnd * 4) If x = 1 Then Image2(i).Top = Image2(i).Top — 360 If x = 2 Then Image2(i).Top = Image2(i).Top + 360 If x = 3 Then Image2(i).Left = Image2(i).Left + 360 If x = 4 Then Image2(i).Left = Image2(i).Left — 360 y = Int(Rnd * 4) If y = 1 Then Image3(i).Top = Image3(i).Top — 360 If y = 2 Then Image3(i).Top = Image3(i).Top + 360 If y = 3 Then Image3(i).Left = Image3(i).Left — 360 If y = 4 Then Image3(i).Left = Image3(i).Left + 360 ′    If Image2(i).Top = Image1.Top And Image2(i).Left = Image1.Left Then Igroki.Enabled = False: pas_vpravo.Enabled = True If Image3(i).Top = Image1.Top And Image3(i).Left = Image1.Left Then Igroki.Enabled = False: pas_vlevo.Enabled = True '        If Image2(i).Top <= 1080 Then Image2(i).Top = Image2(i).Top + 720 If Image3(i).Top <= 1080 Then Image3(i).Top = Image3(i).Top + 720 If Image2(i).Top >= 4320 Then Image2(i).Top = Image2(i).Top — 720 If Image3(i).Top >= 4320 Then Image3(i).Top = Image3(i).Top — 720 ′         If Image2(i).Left <= 480 Then Image2(i).Left = Image2(i).Left + 3720 If Image3(i).Left <= 480 Then Image3(i).Left = Image3(i).Left + 3720 If Image2(i).Left >= 6600 Then Image2(i).Left = Image2(i).Left — 3720 If Image3(i).Left >= 6600 Then Image3(i).Left = Image3(i).Left — 3720 Next i End Sub 

Wichtige Moral # 3 - schreibe klare und detaillierte Kommentare.

Ein anderer Timer überprüfte, ob das Match beendet war:


 If Val(Label5.Caption) = "90" And Val(Label2.Caption) > Val(Label1.Caption) Then MsgBox (" . " + Label3.Caption): End 

Und jetzt - das Schlimmste. Der Ball bewegte sich mit vier Timern über das Spielfeld, die als pas_vverh, pas_vniz, pas_vpravo und pas_vlevo bezeichnet wurden. Einige hatten jetzt ein zuckendes Auge, andere gingen dringend, um Straustrup noch einmal zu lesen, andere stellten eine dumme Frage: "Aber wir sehen, dass sich der Ball auf dem GIF nicht auf und ab bewegt." Natürlich, weil ich die vier Timer nicht richtig aufeinander abstimmen konnte.


Ich schaue mir jetzt den Code an und verstehe, dass er sogar eine indirekte Ballkontrolle ermöglicht, aber nicht funktioniert.


 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode = vbKeyLeft) Then pas_vlevo.Enabled = True If (KeyCode = vbKeyRight) Then pas_vpravo.Enabled = True If (KeyCode = vbKeyUp) Then Pas_verh.Enabled = True If (KeyCode = vbKeyDown) Then Pas_vniz.Enabled = True End Sub 

Während der neunten und zehnten Klasse waren mein Klassenkamerad und ich damit beschäftigt, einen Simulator des Betriebssystems zu schreiben, sodass wir den Fußball nicht in die Hände bekamen. "Ja, das sind Hühner zum Lachen", dachte ich, als ich 2009 noch eine alte ausführbare Datei ausgrub. "Ich muss alles von Grund auf neu schreiben."


Wie refaktoriere ich nicht refaktorisch?


Das Umschreiben von Grund auf ist eine großartige Idee, wenn das Projekt klein ist und ein Dutzend Möglichkeiten in meinem Kopf erschienen, um es besser und bequemer zu machen als es war. Ich brauchte einen perfekten Text-Fußball-Simulator, und natürlich ging alles wieder schief.


Im Jahr 2009 wurde es mit dem Internet einfacher, und ich ging zur Premier League-Website und begann darüber nachzudenken, wie ich die in dieser Form gespeicherten Aufstellungen entfernen könnte:


3_rpfl_players


Ich wusste auch nicht, wie ich Seiten analysieren sollte, aber ich wusste sehr wenig über XML und CSV. Daher war die technische Lösung sehr seltsam:


  1. Hände kopieren den Inhalt der Seite und fügen ihn in Excel ein. Informationen für jeden Spieler besetzten vier Zeilen, und irgendwo in der Nähe hing ein Foto. Ich habe sie nicht benutzt und sie leicht entsorgt.
  2. Alle Zeilen aus Excel mussten in die Textdatei parse.txt kopiert werden
  3. Es wurde ein Parser geschrieben, der die Datei Zeile für Zeile las und Informationen über die Spieler in vier Listen verteilte - an der nominalen Position auf dem Spielfeld.
  4. Alle diese Listen wurden in einer Textdatei eines bestimmten Formats gespeichert, die das Spiel nach dem Start leicht verzehrte.

Es gibt einige lustige Stellen im Parser-Code, zum Beispiel eine solche kommentierte Zeile. Ich kann mir nicht vorstellen, warum und woher es kam.


 ' If Val(List1.List(I)) * 0 = 0 Then MsgBox (List1.List(I)) 

Manchmal war der Parser verstopft und die Datei mit dem Befehl sah folgendermaßen aus:


 gk 71  22  81  30  91  16  df 3   2  83  14   96  

Dies führte zu seltsamen Fehlern im Spiel.


2018-11-01_13-08-10
Als Teil des Zenith konnte Mittelfeldspieler Portugal mit einer Wertung von 86 spielen.


Diese Version hat mehr Teammanagement und weniger Spaß. Die Taktik hatte wieder fast keine Auswirkung auf irgendetwas, aber es war möglich, Spieler zu kaufen und zu verkaufen, sie wurden verletzt und erhielten Karten. Die Rangliste auf dem Formular zu halten, gehört der Vergangenheit an, jetzt war alles in Erinnerung und die Arbeit damit wurde viel bequemer.


Es gab ein Problem beim Rendern einer Reihe von Zahlen im Formular, das jedoch elegant gelöst wurde:


3_rfpl_tablefix
So lala UX


Natürlich gab es noch Teile im Code, die Sie ohne Tränen nicht betrachten würden:


 For i = 1 To 15 If tbl(i) = team2 Then i = i + 1 k = k + 1 If k = 1 Then tr = Int(Rnd * 5) + 2: xa = Int(Rnd * tr): ia = i If k = 2 Then xb = Int(Rnd * tr) If xa > xb Then pts(ia) = pts(ia) + 3: gm(2, ia) = gm(2, ia) + 1: gm(4, i) = gm(4, i) + 1: gm(5, ia) = gm(5, ia) + xa: gm(5, i) = gm(5, i) + xb: gm(6, ia) = gm(6, ia) + xb: gm(6, i) = gm(6, i) + xa If xa < xb Then pts(i) = pts(i) + 3: gm(2, i) = gm(2, i) + 1: gm(4, ia) = gm(4, ia) + 1: gm(5, ia) = gm(5, ia) + xa: gm(5, i) = gm(5, i) + xb: gm(6, ia) = gm(6, ia) + xb: gm(6, i) = gm(6, i) + xa If xa = xb Then pts(i) = pts(i) + 1: pts(ia) = pts(ia) + 1: gm(3, i) = gm(3, i) + 1: gm(3, ia) = gm(3, ia) + 1: gm(5, ia) = gm(5, ia) + xa: gm(5, i) = gm(5, i) + xb: gm(6, ia) = gm(6, ia) + xb: gm(6, i) = gm(6, i) + xa Form6.List1(ng).AddItem tbl(ia) + Str(xa) + «:» + Str(xb) + " " + tbl(i) k = 0 End If 

Dieses Spiel war fast perfekt - es war möglich, Igor Akinfeev legal als Angreifer in Amkar zu kaufen und dann zu sehen, wie die Nischni Nowgorod Wolga zum Champion Russlands wurde. Und im Allgemeinen ist alles viel anständiger geworden - nun, ich dachte es zuerst. Vier Jahre später war nicht alles so rosig.


RFPL 2 - Auferstehung


Bis 2013 habe ich es bereits geschafft, als Programmierer für Geld zu arbeiten. Ich dachte und wollte eine neue Version des Simulators schreiben - ein neuer Blick auf den alten Code zeigte, dass es überhaupt nichts Gutes gab. Nun, das ist absolut nichts.


Wichtige Moral # 4 - manchmal ist es besser, von Grund auf neu zu schreiben.

Die RFPL-Website hatte sich zu diesem Zeitpunkt geändert, daher schrieb ich einen weiteren Parser (sein Code ist in Vergessenheit geraten), aber jetzt gab es keine störenden Fehler mehr mit dem Land. Ich habe eine separate Struktur für die Spieler eingerichtet, in der ich unter anderem die Clubzugehörigkeit angegeben habe - dies hat es einfacher gemacht, Transfers durchzuführen und Statistiken zu führen. Und sie alle bekamen Punkte, abhängig vom "Ruhm" und der Position auf dem Feld.


 Type player Surname As String FirstName As String Num As String Team As String Goals As Integer Shots As Integer Saves As Integer AttPts As Integer DefPts As Integer MidPts As Integer GoalPts As Integer Position As String Star As Boolean Stamina As Integer Yellow As Integer TeamPts As Integer Injured As Integer fromStart As Boolean fromBench As Boolean End Type 

2018-11-01_13-30-49
Der Button „Autocomposition“ erschien für besonders faule Spieler - er selbst füllte die Positionen mit den mächtigsten „Fußballern“. Leider habe nur ich das noch gespielt


Zu diesem Zeitpunkt habe ich auch die Tabelle herausgefunden - ich war nicht zu faul und habe eine verständliche "klassische" Tabelle mit den notwendigen Indikatoren erstellt, die sofort sichtbar sind. Gleichzeitig erschienen Statistiken über die Topscorer.


2018-11-01_13-34-53


Es wurden Spielstände hinzugefügt, noch bessere Übertragungen, Ergebnisse paralleler Spiele jeder Runde. Jetzt schaue ich es mir an und verstehe, dass das alles sehr kindisch und naiv ist, aber dann sah es beeindruckend aus. Alles bis auf eine Sache. Siehe:


4_rfpl2_gameplay
Beschämend. Ball. Stattdessen. Pink. Platz.


Wichtige Moral Nr. 5 - manchmal ist es besser, nichts zu tun, als ein rosa Quadrat zu machen.

Ein paar weitere Jahre vergingen und ich beschloss, dem Computer das Fußballspielen beizubringen. Oder zumindest so tun, als würde er Fußball spielen. Mit einem Ball, Spieler auf dem Spielfeld, ohne Text und Listen. Und hier ist der Ort für eine andere wichtige Moral, die mit der Abschnittsüberschrift übereinstimmt:


Wenn Sie keine Backups erstellen, haben Sie in diesem Abschnitt nichts zu besprechen.


Aus einem großen Projekt zu Unity aus dem Jahr 2016, in dem es gute Modelle für Agentenbewegung, Positionsspiel und fast intelligente Ballbewegung gab, ging ein kleines GIF aus einem der frühen Entwicklungsstadien hervor.


ezgif-2-358042221c7d


Deshalb werde ich Ihnen ein anderes Mal davon erzählen, wenn ich wieder alles von Grund auf neu schreiben werde.


Worum geht es bei alledem?


Ich erinnere mich gerne von Anfang an an diese Geschichte. Ich denke gerne, dass dieser Spielzeug-Simulator mehr Erfahrung und Spaß gebracht hat als einige Universitätsklassen und Arbeitsaufgaben. Denken Sie daran, wie ich die erste Mail registriert habe, an die dankbare Spieler Briefe senden, und wie ich 2007 im Stadtforum schrieb: "Das Lesen von Lehrbüchern im Internet ist Betrug, ich werde alles durch Tippen lernen." Dies sind wunderbare Empfindungen, die Sie wahrscheinlich in verschiedenen Formen haben.


In diesem Beitrag gab es viele offensichtliche Tipps - zu Backups, Kommentaren und der Notwendigkeit von Refactoring - jeder weiß das ohne mich. Und vor allem sollten Sie sich unbedingt an den Gedanken von Lyubov Nikolaevna Kaftunkina erinnern, meiner Informatiklehrerin:


"Wenn Sie in der Lektion Spiele spielen möchten, schreiben Sie sie selbst."

Source: https://habr.com/ru/post/de428495/


All Articles