
Kisah yang akan saya ceritakan dimulai 13 tahun yang lalu dalam pelajaran ilmu komputer. Teman-teman kelas tujuh dan saya menyelesaikan semua masalah di Pascal dan bersenang-senang memainkan Gempa pertama. Guru kami melihat ini, menghampiri saya dan mengatakan hanya satu frasa yang menyimpangkan gambaran saya tentang dunia: "Jika Anda ingin bermain-main dalam pelajaran, tulis sendiri." Sejak itu saya sesekali membuat game. Salah satunya adalah simulator sepakbola, yang akan dibahas.
Ini adalah kisah menarik tentang jalur saya sebagai pengembang, proyek yang belum selesai dan mengapa kadang-kadang tidak perlu diselesaikan.
Penafian: Sejak peristiwa yang dijelaskan dalam teks ini, saya telah mengambil kursus pengembangan Persatuan dan memposting beberapa game saya di Google Play dan Windows Store. Sekarang saya adalah editor dari blog Yandex.Money dan menceritakan kisah ini untuk berbagi pengalaman dengan komunitas.
Ada fitur menarik di pengembang game berbahasa Rusia pada masa itu - MS DOS hampir berakhir dan programmer domestik secara aktif menggergaji mainan untuk Windows. Sejumlah besar simulasi keluar sebagai manusia komputer, tank, berbagai kartu dan permainan "logis". Dan disk dengan game-game ini juga dijual dalam jumlah besar. Tentang bagaimana koleksi tersebut dikompilasi, sedikit yang ditulis dalam "Tes Penguji", tetapi kemudian saya belum tahu tentang itu.
Tentunya banyak dari Anda yang ingat menu indah ini:

Hidup, tentu saja, menepuknya
Pada salah satu disc ini, saya pertama kali bertemu permainan Coach - seorang manajer sepakbola teks. Di sana Anda dapat mengambil beberapa tim dari Liga Premier Inggris dan mencoba membawanya ke kejuaraan. Dan game ini didistribusikan sesuai dengan model shareware: Anda bisa bermain dua musim, lalu membayar. Tentu saja, tidak mungkin membayar dengan cara apa pun, karena untuk ini perlu mengirim transfer bank ke pembuat game, dan pada usia 13, Anda tidak pergi ke bank, Anda bahkan tidak memikirkannya. Yandex.Money kemudian sudah ada, tetapi sampai Cashier muncul, 8 tahun tersisa, oleh karena itu juga tidak nyaman. Teman-teman saya dan saya bermain selama dua musim, dan kemudian kami mulai lagi.
Saya harus mencari solusi, dan dalam prosesnya saya menulis salah satu pertandingan pertama saya - Pelatih, dengan liga Rusia yang lebih menarik bagi saya, secangkir dan banyak bug. Saya tidak mengubah nama, saya hanya mengubah deuce menjadi tiga. Ternyata seperti ini:
Pelatih 3 v2.52
Apa yang dibutuhkan oleh tim sepakbola? Tentu saja para pemain. Secara alami, maka tidak ada yang tahu tentang lisensi untuk klub dan pemain - kami baru saja bertemu dengan teman sekelas dan membuat daftar tim dari ingatan. Karena itu, misalnya, CSKA dan Spartak masing-masing masih mendapatkan 11 orang (ya, itu adalah simulator tanpa penggantian), tetapi Luch-Energia dari Vladivostok dibiarkan dengan dadu kosong alih-alih pemain.
Seperti yang saya ingat sekarang: 2005, saya mempersenjatai diri dengan buku teks sains komputer untuk kelas 9 (itu hanya tentang Visual Basic 6 favorit saya) dan membuka form editor - saya belajar kata IDE jauh kemudian. Buat tombol pada formulir, klik dan buka editor kode. Penuh dengan kebanggaan pada diriku sendiri, aku mengetik
Private Sub Command1_Click() End End Sub
dan mengklik "Jalankan." Semuanya bekerja dan sangat menyenangkan saya. Setelah beberapa saat, simulator sepak bola berbasis teks muncul - Pelatih v2.52.

Pengacara RPL, jika Anda membaca ini - game ini tidak pernah diterbitkan atau dijual dengan uang
Kemudian saya merasa bahwa ini adalah mutiara kode program. Tentu saja, pada saat itu saya tidak tahu banyak dan, misalnya, klasemen disimpan dalam enam array dari Label langsung pada formulir. Tidak menyimpan, tidak ada array variabel - hanya hardcore. Secara alami, bug aneh muncul karena ini:

Semua tim memainkan 2 pertandingan, tetapi beberapa di antaranya 3, dan yang lainnya satu per satu

Anda juga bisa membeli Roy Keane dan Andriy Shevchenko di Spartak. Saya tidak yakin apa itu di setidaknya satu simulator sepakbola waktu itu
Secara umum, bayangkan Anda telah lupa dengan tajam bagaimana menggunakan basis data, menulis sesuatu ke file teks, dan menyimpan data dalam array. Satu-satunya yang tersisa adalah kontrol pada formulir. Menakutkan Dan entah bagaimana hari kerja anak kelas tujuh tampak seperti dia memutuskan bahwa dia mampu bermain game.
Saya tidak memiliki sumber untuk versi ini, tetapi saya yakin ada sesuatu seperti ini:
m = Form1.Label5(0).Caption Form2.Label3(m).Caption = Form2.Label3(m).Caption + 3
Beberapa fitur VB6 tidak ditulis dalam buku teks. Karena itu, misalnya, ketika saya mengetahui bahwa Shape dapat dituangkan dengan cara yang berbeda, saya membuat seluruh jendela untuk ini dengan pilihan halaman rumput di stadion klub:

Apakah Anda dapat memotong rumput di seruling pipa webcast?
Penting Moralitas # 1 - Jelajahi kekuatan alat yang Anda gunakan setiap hari.
Saya yakin suatu hari saya akan mengirim game ini ke semacam multi-game - itu sebabnya saya bahkan menulis sertifikat. Tentu saja, kemudian dilihat oleh dua setengah penguji. Tetapi sejak itu terjadi, biarkan dipublikasikan.
readme.txtPelatih 3 V2.08 - Edisi 2006
Halo Terima kasih telah membeli game ini.
1. Instalasi
2. Persyaratan sistem
3.Test platform
4. Apa yang baru?
5.Tips
6. Instalasi
7. Terima kasih banyak ...
1. Instalasi
Jalankan Setup.exe dan unzip file ke folder dengan: \ Program files \ Football Manager 2005
Dan kemudian unzip file setup2.exe
2. Persyaratan sistem
Tidak P4-2500. Semuanya sangat sederhana. Jadi,
Pentium 1-233 MHz (disarankan 300 atau lebih tinggi)
HDD 5MB
RAM 16 MB (direkomendasikan 32 atau lebih tinggi)
Video 16 MB
Windows 9x, Me, NT, 2003, Longhorn. Di XP, ini hanya berfungsi jika file msvbvm60.dll ada di direktori root dengan: \ windows \ system
Mouse.
3.Test platform
Celeron 1100 MHz
RAM 160 MB
Video 16MB
Windows XP SP2
4. Apa yang baru?
Membuat banyak hal baru.
Sebagai contoh, sekarang di kejuaraan Rusia 14 (!) Tim berpartisipasi, bukan 8.
Dialog "Tim" telah diubah, menu tentang pelatih klub telah muncul.
Sekarang permainan tergantung pada taktik!
Saingan yang kuat.
Untuk pertama kalinya sejak Pelatih 1, poin biasanya diberikan kepada Anda.
Liga Champions, Piala Super Rusia.
5. Tips.
Jangan memodifikasi atau menghapus file dari folder dengan: \ program file \ football manager 2005 \ klub \ emblem
Setelah instalasi, salin file MSVBVM60.DLL ke folder c: \ windows \ system
6. Instalasi
Tidak diperlukan uninstall. Cukup hapus folder game.
7. Terima kasih banyak ...
Kusherbayev Daniyar untuk pengujian beta.
Karneyev Mikhail, Trofimenko Mikhail untuk pengujian beta dan saran berharga.
Ke rfpl.org untuk bentuk tim Liga Premier.
01/27/06
PS Kita akan menang!
Jika saya tahu bahwa saya akan kembali ke proyek ini selama 13 tahun ke depan, maka, tentu saja, saya akan lebih bertanggung jawab dalam memelihara semua yang berhubungan dengannya. Namun demikian, Pelatih 2.5 tetap ada dalam sejarah dan diluncurkan bahkan sekarang, langsung dari folder, yang disebut demikian:
E:\prod\dev\My_old_dev_projects\Dev\ ,
Tentunya ada versi sebelumnya, tetapi saya tidak punya tempat untuk cadangan pada waktu itu, dan sumber sampai tahun 2005, bersama dengan versi sebelumnya, pernah hilang ketika hard drive 2,3 gigabyte jatuh. mendesah nostalgia Dan ingat, kapan harus meletakkan Darah 2, Anda harus menghapus Age of Empires 2?

Cuplikan layar versi 1.62. Jika Windows 10 1803 dirilis pada 2004, maka saya tidak akan meninggalkan tindakan ini
Moral penting # 2 - buat cadangan.
Nah dan yang paling penting - gameplaynya. Peristiwa acak, terlepas dari apa pun - itulah yang menarik perhatian dari berjam-jam pengembangan dan pengujian. Dan kami mengujinya seperti ini - kami bermain sampai sesuatu yang lucu jatuh.

Jangan tanya poin serangan apa. Saya tidak ingat
Lihat kotak merah muda yang gugup ini? Sekarang saya akan memberi tahu Anda tentang dia.
Shinnik dan simulator sepakbola visual
Bersama dengan Coach, dua game lagi dibagikan pada disk itu. Yang pertama - "FC Shinnik" dari Yevgeny Sharov - itu adalah manajemen tim yang biasa-biasa saja, tetapi Anda bisa menonton pertandingan. Dilihat oleh kredit, itu juga dilakukan untuk beberapa waktu - dari 1996 hingga 2000. Pertandingan kedua adalah "Football 4x4" dosovskiy - sama sekali tidak ada yang mengesankan di sana, kecuali untuk para pemain yang sedang berlari, tetapi itu membuat saya terpesona sehingga saya memutuskan untuk melakukan hal yang sama game untuk dirimu sendiri.
Pada awalnya, karena kurangnya pengalaman, sebuah kotak merah muda muncul. Dia bergerak melintasi lapangan, menunjukkan di mana pertandingan itu berlangsung. Dan, seperti, bahkan memengaruhi sesuatu. Ini tidak cukup dan saya membuat proyek sepakbola kedua dalam hidup saya - Football View.

Ya, ya, ini adalah spanduk yang dioleskan. Dalam dekade terakhir, itu entah bagaimana lebih sederhana.
Riddle - bagaimana cara memindahkan pemain di sekitar lapangan secara konstan, ketika Anda tidak dapat menggantung skrip terpisah untuk masing-masing, yang akan mempertimbangkan posisi, tetangga, dan jarak ke bola? Solusinya adalah dengan menggunakan timer dan memutar para pemain dalam lingkaran, secara acak menggeser mereka ke lebar sprite. Kode ini lurus dari tahun 2005, jadi sekarang saya sangat malu.
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
Moralitas Penting # 3 - tulis komentar yang jelas dan terperinci.
Pengatur waktu lain memeriksa bahwa pertandingan sudah selesai:
If Val(Label5.Caption) = "90" And Val(Label2.Caption) > Val(Label1.Caption) Then MsgBox (" . " + Label3.Caption): End
Dan sekarang - yang terburuk. Bola bergerak di sekitar lapangan dengan empat timer, yang disebut pas_vverh, pas_vniz, pas_vpravo dan pas_vlevo. Beberapa sekarang memiliki mata berkedut, yang lain segera pergi untuk membaca kembali Straustrup, yang lain mengajukan pertanyaan bodoh - "Tapi kita melihat bahwa pada GIF bola tidak bergerak naik dan turun." Tentu saja, karena saya tidak dapat mengoordinasikan keempat timer dengan benar.
Saya melihat kode sekarang dan saya mengerti bahwa kode itu bahkan menyediakan kontrol bola tidak langsung, tetapi tidak berfungsi.
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
Sepanjang kelas sembilan dan sepuluh, teman sekelas saya dan saya sibuk menulis simulator sistem operasi, jadi kami tidak punya tangan di sepakbola. "Ya, ini ayam untuk ditertawakan," pikir saya, ketika pada tahun 2009 saya masih menggali executable tua, "Saya perlu menulis ulang semuanya dari awal."
Bagaimana saya refactor non-refactory
Menulis ulang dari awal adalah ide bagus ketika proyek ini kecil, dan selusin cara muncul di kepala saya untuk membuatnya lebih baik dan lebih nyaman daripada sebelumnya. Saya membutuhkan simulator sepakbola teks yang sempurna, dan tentu saja, semuanya salah lagi.
Pada tahun 2009, menjadi lebih mudah dengan Internet, dan saya pergi ke situs web Liga Premier dan mulai berpikir tentang cara menghapus susunan pemain yang disimpan dalam formulir ini:

Saya juga tidak tahu bagaimana cara mengambil, parsing halaman - tetapi saya tahu sedikit tentang xml dan csv. Oleh karena itu, solusi teknisnya sangat aneh:
- Tangan menyalin konten halaman dan menempelkannya ke Excel. Informasi untuk setiap pemain ditempati empat baris, dan di suatu tempat di dekatnya sebuah foto tergantung. Saya tidak menggunakannya dan mudah dibuang.
- Semua baris dari Excel perlu disalin ke file teks parse.txt
- Parser ditulis yang membaca file baris demi baris dan menyebarkan informasi tentang para pemain dalam empat daftar - pada posisi nominal di lapangan.
- Semua daftar ini disimpan dalam file teks dalam format tertentu, yang gampang dimakan game setelah diluncurkan.
Ada beberapa tempat lucu dalam kode parser, misalnya, baris komentar seperti itu. Saya tidak bisa membayangkan mengapa dan dari mana asalnya.
' If Val(List1.List(I)) * 0 = 0 Then MsgBox (List1.List(I))
Terkadang parser dicekik dan file dengan perintah tampak seperti ini:
gk 71 22 81 30 91 16 df 3 2 83 14 96
Ini menyebabkan bug aneh di dalam game itu sendiri.

Sebagai bagian dari gelandang Zenith bisa bermain Portugal dengan peringkat 86.
Versi ini memiliki lebih banyak manajemen tim dan lebih sedikit kesenangan. Taktik sekali lagi hampir tidak berpengaruh pada apa pun, tetapi mungkin untuk membeli dan menjual pemain, mereka terluka dan menerima kartu. Menjaga kedudukan pada formulir adalah hal di masa lalu, sekarang semuanya ada di memori dan bekerja dengannya menjadi jauh lebih nyaman.
Ada masalah dengan merender banyak nomor di formulir, tetapi diselesaikan dengan elegan:

UX begitu-begitu
Tentu saja, masih ada bagian-bagian dalam kode yang tidak akan Anda lihat tanpa air mata:
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
Permainan ini hampir sempurna - adalah mungkin untuk secara legal membeli Igor Akinfeev sebagai penyerang di Amkar, dan kemudian melihat bagaimana Nizhny Novgorod Volga menjadi juara Rusia. Dan secara umum, semuanya menjadi jauh lebih baik - well, saya pikir begitu pada awalnya. Empat tahun kemudian, semuanya tidak begitu cerah.
RFPL 2 - Kebangkitan
Pada 2013, saya sudah berhasil bekerja sebagai programmer untuk mendapatkan uang. Saya berpikir dan ingin menulis versi baru dari simulator - tampilan baru pada kode lama menunjukkan bahwa tidak ada yang baik sama sekali. Yah, itu sama sekali bukan apa-apa.
Penting Moralitas # 4 - terkadang lebih baik menulis ulang dari awal
Situs web RFPL telah berubah pada saat itu, jadi saya menulis parser lain (kodenya telah terlupakan), tetapi sekarang tidak ada lagi kesalahan yang menyebalkan dengan negara tersebut. Saya membuat struktur terpisah untuk para pemain, di mana saya menunjukkan, antara lain, afiliasi klub - ini membuatnya lebih mudah untuk menerapkan transfer dan menjaga statistik. Dan mereka semua mendapat poin, tergantung pada "ketenaran" dan posisi di lapangan.
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

Tombol "Autocomposition" muncul untuk pemain yang sangat malas - itu sendiri mengisi posisi dengan "pemain bola" yang paling kuat. Sayangnya, hanya saya yang masih memainkan ini
Pada saat itu, saya juga menemukan meja - saya tidak terlalu malas dan membuat tabel "klasik" yang dapat dimengerti dengan indikator yang diperlukan, yang dapat segera dilihat. Seiring dengan ini, statistik muncul di pencetak gol terbanyak.

Penghematan ditambahkan, bahkan transfer yang lebih baik, hasil pertandingan paralel setiap putaran. Sekarang saya melihatnya dan mengerti bahwa semua ini sangat kekanak-kanakan dan naif, tetapi kemudian terlihat mengesankan. Semua kecuali satu hal. Lihat:

Memalukan. Ball Sebaliknya. Merah muda Kotak.
Moralitas penting # 5 - terkadang lebih baik tidak melakukan apa pun daripada membuat kotak merah muda.
Beberapa tahun berlalu dan saya memutuskan untuk mengajar komputer cara bermain sepak bola. Atau setidaknya berpura-pura bermain sepak bola. Dengan bola, pemain di lapangan, tanpa teks dan daftar. Dan ini adalah tempat untuk moral penting lainnya, yang bertepatan dengan judul bagian:
Jika Anda tidak membuat cadangan, maka Anda tidak akan membicarakan apa pun di bagian ini.
Dari sebuah proyek besar di Unity dari 2016, di mana ada model yang baik dari gerakan agen, permainan posisi dan gerakan bola hampir pintar , ada GIF kecil dari salah satu tahap awal pengembangan.

Karenanya, saya akan memberi tahu Anda tentang ini di lain waktu, ketika saya akan menulis ulang semuanya dari awal lagi.
Tentang apa semua ini?
Saya suka mengingat cerita ini sejak awal. Saya suka berpikir bahwa "simulator" mainan ini membawa lebih banyak pengalaman dan kesenangan daripada beberapa kelas universitas dan tugas-tugas pekerjaan. Ingat bagaimana saya mendaftarkan surat pertama, kepada pemain yang berterima kasih akan mengirim surat, dan bagaimana pada tahun 2007 saya menulis di forum kota "Membaca buku teks di Internet adalah curang, saya akan mempelajari semuanya dengan mengetik." Ini adalah sensasi yang luar biasa, yang mungkin Anda miliki dalam berbagai bentuk.
Ada banyak tips yang jelas dalam posting ini - tentang backup, komentar, dan perlunya refactoring - semua orang tahu ini tanpa saya. Dan yang paling penting, pastikan untuk mengingat pemikiran Lyubov Nikolaevna Kaftunkina, guru ilmu komputer saya:
"Jika Anda ingin bermain game dalam pelajaran, tulis sendiri."