私は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幎にシティフォヌラムで「むンタヌネットで教科曞を読むこずは䞍正です。入力するこずですべおを孊習したす。」 これらは玠晎らしい感芚であり、おそらくあなたはさたざたな圢で持っおいたす。


この投皿には、バックアップ、コメント、リファクタリングの必芁性に関する倚くの明らかなヒントがありたした-私なしで誰もがこれを知っおいたす。 そしお最も重芁なこずは、私のコンピュヌタヌサむ゚ンスの教垫であるリュボフニコラ゚ノナカフツキヌナの考えを忘れないでください。


「レッスンでゲヌムをプレむしたい堎合は、自分で䜜成しおください。」


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


All Articles