私は13年間サッカーシミュレーターをどのようにしたか

2_fview_gameplay







私がお話しする話は、13年前にコンピューターサイエンスのレッスンで始まりました。 私の7年生の友人と私はPascalのすべての問題を解決し、最初のQuakeをプレイして楽しかったです。 私たちの先生はこれを見て、私のところに来て、私の世界のイメージを歪めたフレーズを1つだけ言いました。 それ以来、私は時々ゲームを作ります。 そのうちの1つはサッカーシミュレーターで、これについて説明します。







これは、私の開発パス、未完成のプロジェクト、そしてなぜそれらを完成する必要がないかについてのエキサイティングな物語です。







免責事項:このテキストで説明されているイベント以来、私はUnity開発コースを受講し、Google PlayとWindowsストアに私のゲームのいくつかを投稿しました。 現在、Yandex.Moneyブログの編集者であり、このストーリーを語ってコミュニティと経験を共有しています。







当時のロシア語のゲーム開発者には興味深い機能がありました。MSDOSはほぼ終了し、国内のプログラマーはWindows用のおもちゃを積極的に見ていました。 膨大な数のシミュレーションで、コンピューター技術者、戦車、さまざまなカード、および「論理」ゲームとして登場しました。 また、これらのゲームを搭載したディスクも大量に販売されました。 そのようなコレクションがどのようにコンパイルされたかについては、「Tests Chronicles」にはほとんど書かれていませんが、それについてはまだ知りませんでした。







きっとあなたの多くはこの美しいメニューを覚えているでしょう:







1250menu

人生はもちろん、彼をhimでた







これらのディスクの1つで、最初にゲームCoach-テキストフットボールマネージャーに会いました。 そこで、英国プレミアリーグからチームを取り、チャンピオンシップに持ち込もうとすることができます。 また、このゲームはシェアウェアモデルに従って配布されました。2つのシーズンをプレイしてから支払いができます。 もちろん、ゲームの作成者に銀行振込を送信する必要があり、13時に銀行に行かず、それについても考えていないため、いかなる方法でも支払うことはできませんでした。 Yandex.Moneyはすでに存在していましたが、キャッシャーが登場するまで8年間残っていたため、不便でした。 友人と私は2シーズンプレーし、それからまた始めました。







私は解決策を模索する必要があり、その過程で最初のゲームの1つであるCoachを作成しました。コーチは、私にとってより興味深いロシアリーグ、カップ、たくさんのバグを抱えていました。 名前は変更せず、デュースを3に変更しました。 次のようになりました。







Coach 3 v2.52



サッカーチームには何が必要ですか? もちろん、プレーヤー。 当然、クラブや選手のライセンスについては誰も知りませんでした。クラスメートと一緒になって、記憶からチームのリストを作成しました。 したがって、たとえば、CSKAとSpartakにはそれぞれ11人がいました(はい、交換なしのシミュレーターでした)が、ウラジオストクのLuch-Energiaにはプレイヤーの代わりに空のサイコロが残っていました。







今覚えているように、2005年、私は9年生のコンピューターサイエンスの教科書(私のお気に入りのVisual Basic 6でした)を手に入れ、フォームエディターを開きました。 フォームにボタンを描画し、クリックしてコードエディターを開きました。 自分に誇りを持って、タイプしました







Private Sub Command1_Click() End End Sub
      
      





[実行]をクリックしました。 すべてが機能し、本当に嬉しかったです。 しばらくして、テキストベースのサッカーシミュレーター-Coach v2.52が登場しました。







2018-11-01_11-03-44

RPL弁護士、これを読んだ場合-このゲームは公開されたり、お金で売られたことはありません







それから、これはプログラムコードの真珠であるように思えました。 もちろん、その瞬間、私はあまり知りませんでした。たとえば、順位表は、Labelの6つの配列にフォームに直接格納されていました。 保存も変数配列もなし-筋金入り。 当然、これにより奇妙なバグが発生しました。







2018-11-01_11-11-04

すべてのチームが2試合を行いましたが、一部は3試合、他は1試合ずつでした







2018-11-01_11-17-52

スパルタックでロイ・キーンとアンドリー・シェフチェンコを買うこともできます。 当時の少なくとも1つのサッカーシミュレーターに何があったのかわかりません







一般的に、データベースの使用方法、テキストファイルへの書き込み、配列へのデータの格納方法を忘れてしまったことを想像してください。 残っているのは、フォーム上のコントロールだけです。 怖い そして、どういうわけか小学7年生の平日は、彼がgamedevに参加できると決めたように見えました。







このバージョンのソースはありませんでしたが、次のようなものがあると確信しています。







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





VB6の一部の機能は、教科書には書かれていません。 したがって、たとえば、Shapeがさまざまな方法で注がれることがわかったとき、クラブスタジアムの芝生を選択して、このためのウィンドウ全体を作成しました。







1_coach_stadium

ウェブキャストパイプのフルートで芝生を刈ることができますか?







重要な道徳#1-毎日使用するツールの力を探ります。

いつかこのゲームをある種のマルチゲームに送ることになると確信していました。だからこそ証明書を書きました。 もちろん、それから2人半のテスターがそれを見ました。 しかし、それが起こったので、それを公開しましょう。







readme.txt

Coach 3 V2.08-2006 Edition










こんにちは このゲームをご購入いただきありがとうございます。







1.インストール

2.システム要件

3.テストプラットフォーム

4.新機能

5.ヒント

6.アンインストール

7.ありがとうございました...







1.インストール

Setup.exeを実行し、ファイルを次のフォルダーに解凍します。\ Program files \ Football Manager 2005

そして、setup2.exeファイルを解凍します







2.システム要件

P4-2500なし。すべてが非常にシンプルです。







Pentium 1-233 MHz(300以上を推奨)

HDD 5MB

16 MB RAM(32以上を推奨)

ビデオ16 MB

Windows 9x、Me、NT、2003、Longhorn。 XPでは、msvbvm60.dllファイルがルートディレクトリにある場合にのみ機能します。\ windows \ system

マウス。







3.テストプラットフォーム

Celeron 1100 MHz

160 MBのRAM

ビデオ16MB

Windows XP SP2







4.新機能。







たくさんの新しいものを作りました。

たとえば、ロシアのチャンピオンシップでは、現在8(ではなく)14チームが参加しています。

「チーム」ダイアログが変更され、クラブのコーチに関するメニューが表示されました。

今、ゲームは戦術に依存しています!

強いライバル。

コーチ1以来初めて、あなたは通常ポイントを獲得します。

チャンピオンズリーグ、ロシアのスーパーカップ。







5.ヒント。







\プログラムファイル\フットボールマネージャー2005 \クラブ\エンブレムを含むフォルダーのファイルを変更または削除しないでください。

インストール後、MSVBVM60.DLLファイルをc:\ windows \ systemフォルダーにコピーします







6.アンインストール







アンインストールは不要で、ゲームフォルダを消去するだけです。







7.ありがとうございました...







ベータテスト用のKusherbayev Daniyar。

Karneyev Mikhail、Trofimenko Mikhailのベータテストと貴重なアドバイス。

プレミアリーグチームのフォームについては、rfpl.orgへ。







01/27/06







PS私たちのものが勝ちます!







今後13年間でこのプロジェクトに戻ることを知っていれば、もちろん、それに関連するすべてのものを保存することにもっと責任があるでしょう。 それにもかかわらず、Coach 2.5は歴史に残っており、今でもフォルダから開始します。







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





確かに以前のバージョンがありましたが、その時点でバックアップする場所がなく、2005年までのソースは、以前のバージョンと共に、2.3ギガバイトのハードディスクがクラッシュしたときに失われました。 懐かしいため息をつくそして、Blood 2を入れるとき、Age of Empires 2を消去しなければならなかったことを覚えていますか?







0__football_champ_nogame

バージョン1.62のスクリーンショット。 Windows 10 1803が2004年にリリースされた場合、このアクションを残していなかったでしょう







重要な道徳#2-バックアップを作成します。

まあ、そして最も重要なこと-ゲームプレイ。 ランダムなイベントは、何に関係なく、長時間の開発とテストで注目されました。 そして、彼らはそれをこのようにテストしました-彼らは何か面白いものが落ちるまで遊びました。







1_coach_gameplay

攻撃ポイントが何であるかを尋ねないでください。 覚えていない







この神経質なピンク色のボックスをご覧ください。 今、彼についてお話しします。







Shinnikとビジュアルサッカーシミュレーター



Coachと一緒に、これらのディスクでさらに2つのゲームが配布されました。 最初の-Evgeny SharovのFC Shinnik-チームの平凡な管理がありましたが、試合を見ることができました。 クレジットから判断すると、1996年から2000年までかなり長い間行われました。2番目のゲームはdosovskiyの「Football 4x4」でした-走っている男性を除いて印象的なものはまったくありませんでしたが、自分のためのゲーム。







サッカー4x4

2018-11-01_23-53-44







最初は、経験不足のため、ピンク色の箱が現れました。 彼はフィールドを横切って移動し、ゲームがどこで行われていたかを示しました。 そして、同様に、何かに影響を与えました。 これは十分ではなく、私は人生で2番目のフットボールプロジェクト-Football Viewを作成しました。







2_fview_gameplay

はい、はい、これらは塗りつぶされたバナーです。 過去10年間で、それは何とか簡単になりました。







なぞなぞ-位置、隣人、ボールまでの距離を考慮に入れて、それぞれに個別のスクリプトを掛けることができない場合に、フィールドの周りでプレーヤーを絶えず動かす方法は? 解決策は、タイマーを使用し、サイクル内でプレイヤーをひねり、スプライトの幅にランダムにシフトすることです。 コードは2005年からまっすぐなので、今はとても恥ずかしいです。







 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
      
      





重要な道徳#3-明確かつ詳細なコメントを書いてください。

別のタイマーは、試合が終わったことを確認しました:







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





そして今-最悪。 ボールはpas_vverh、pas_vniz、pas_vpravo、pas_vlevoと呼ばれる4つのタイマーでフィールドを動き回りました。 目がぴくぴくするものもあれば、早急にStraustrupを読み直そうとするものもいれば、「GIFでボールが上下に動かないことがわかります」と愚かな質問をする人もいました。 もちろん、4つのタイマーを適切に調整できなかったためです。







コードを見て、間接的なボールコントロールも提供されていることを理解していますが、機能しません。







 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
      
      





9年生と10年生の間、クラスメートと私はオペレーティングシステムのシミュレータの作成に忙しかったため、私たちの手はサッカーに届きませんでした。 「はい、これは笑うべきチキンです」と私は思っていましたが、2009年にまだ古い実行可能ファイルを掘り起こしたとき、「すべてをゼロから書き直す必要があります。」







リファクタリングされていないリファクタリング方法



プロジェクトが小さい場合、ゼロから書き直すことは素晴らしいアイデアであり、私の頭の中には、それをより良く、より便利にするための多くの方法が現れました。 完璧なテキストサッカーシミュレーターが必要でしたが、もちろん、すべてがうまくいきませんでした。







2009年に、インターネットで簡単になり、Premier LeagueのWebサイトにアクセスして、この形式で保存されたラインナップを削除する方法について考え始めました。







3_rpfl_players







取得方法やページ解析方法も知りませんでしたが、xmlとcsvについてはほとんど知りませんでした。 したがって、技術的な解決策は非常に奇妙でした。







  1. 手でページのコンテンツをコピーし、Excelに貼り付けます。 各プレイヤーの情報は4行を占め、写真の近くのどこかにハングアップしました。 私はそれらを使用せず、簡単に処分しました。
  2. Excelのすべての行をparse.txtテキストファイルにコピーする必要がありました
  3. ファイルを1行ずつ読み取り、4つのリストにあるプレーヤーに関する情報を、フィールド上の名目上の位置ごとに読み取るパーサーが作成されました。
  4. これらのリストはすべて、特定の形式のテキストファイルに保存され、ゲームの起動後に簡単に食べられました。


パーサーコードには、たとえばコメント行など、面白い場所がいくつかあります。 なぜ、どこから来たのか想像できません。







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





時々、パーサーが窒息し、コマンドを含むファイルは次のようになりました。







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





これにより、ゲーム自体の内部に奇妙なバグが発生しました。







2018-11-01_13-08-10

ゼニスの一部として、ミッドフィールダーのポルトガルは86のレーティングでプレーすることができました。







このバージョンでは、チーム管理が強化され、楽しさが少なくなります。 戦術は再び何にもほとんど影響しませんでしたが、プレーヤーを売買することは可能でした。彼らは負傷し、カードを受け取りました。 フォームの順位を維持することは過去のものであり、今ではすべてが私の記憶の中にあり、それを扱うことははるかに便利になりました。







フォーム上の一連の数字のレンダリングに問題がありましたが、エレガントに解決されました。







3_rfpl_tablefix

まあまあのUX







もちろん、コードにはまだ涙が出ない部分があります。







 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
      
      





このゲームはほぼ完璧でした。イゴールアキンフェエフを合法的にアムカルに購入し、ニジニノヴゴロドヴォルガがロシアのチャンピオンになった様子を見ることができました。 そして一般的に、すべてがずっとまともになりました-まあ、最初はそう思った。 4年後、すべてがそれほどバラ色ではありませんでした。







RFPL 2-復活



2013年までに、私はすでにお金をかけてプログラマーとして働いていました。 新しいバージョンのシミュレーターを考えて作成したかったのです。古いコードをもう一度見てみると、何も良いことがないことがわかりました。 まあ、それは何もありません。







重要なモラル#4-ゼロから書き直す方が良い場合もあります。

RFPL Webサイトはその時までに変更されていたので、別のパーサーを作成しました(そのコードは忘却に沈みました)が、今ではこの国に迷惑なエラーはありませんでした。 私はプレーヤーのために別の構造をセットアップしました。そこでは、とりわけクラブの所属を示しました-移籍の実施と統計の保持が容易になりました。 そして、彼らはすべて、「スターダム」とフィールド上の位置に応じて、ポイントを獲得しました。







 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

AutoCostボタンは、特に怠け者のプレイヤーに表示されます-それ自体が最も強力な「サッカー選手」でポジションを埋めました。 残念ながら、私だけがまだこれをプレイしました







その時までに、私もテーブルを見つけました-私はあまりにも怠laではなく、すぐに見ることができる必要なインジケータを備えた理解可能な「クラシック」テーブルを作りました。 これに加えて、統計が上位得点者に表示されました。







2018-11-01_13-34-53







保存、さらに良い転送、各ラウンドの並列マッチの結果が追加されました。 今、私はそれを見て、これらすべてが非常に幼稚で素朴であることを理解していますが、それは印象的でした。 1つを除くすべて。 参照:







4_rfpl2_gameplay

恥ずかしい。 ボール。 代わりに。 ピンク。 スクエア。







重要な道徳#5-ピンクの正方形を作るよりも何もしない方が良い場合があります。

さらに数年が経ち、私はコンピューターでサッカーをする方法を教えることにしました。 または、少なくとも彼がサッカーをしているふりをします。 ボールとフィールド上のプレーヤー、テキストとリストなし。 そして、ここに別の重要なモラルがあります。これはセクションの見出しと一致します。







バックアップを作成しない場合、このセクションで説明することはありません。



2016年のUnityの大規模なプロジェクトでは、エージェントの動き、ポジションゲーム、ほぼスマートボールの動きの良いモデルがあり、開発の初期段階の1つから小さなGIFがありました。







ezgif-2-358042221c7d







したがって、もう一度すべてを最初から書き直すときに、これについてもう一度説明します。







これは何についてですか?



私はこの物語を最初から覚えているのが好きです。 このおもちゃの「シミュレータ」は、いくつかの大学の授業や仕事よりも多くの経験と楽しみをもたらしたと思います。 最初のメールをどのように登録したか、感謝の気持ちを込めてプレイヤーが手紙を送ること、そして2007年にシティフォーラムで「インターネットで教科書を読むことは不正です。入力することですべてを学習します。」 これらは素晴らしい感覚であり、おそらくあなたはさまざまな形で持っています。







この投稿には、バックアップ、コメント、リファクタリングの必要性に関する多くの明らかなヒントがありました-私なしで誰もがこれを知っています。 そして最も重要なことは、私のコンピューターサイエンスの教師であるリュボフニコラエヴナカフツキーナの考えを忘れないでください。







「レッスンでゲームをプレイしたい場合は、自分で作成してください。」




All Articles