Latar belakang
Sudah cukup lama sejak penulisan
artikel sebelumnya. Seperti yang dijanjikan, saya menulis bagian kedua. Saya ingin mengucapkan terima kasih kepada semua yang memberi saran dalam komentar, dari semuanya saya bisa belajar sesuatu yang baru. Nah, bagi mereka yang ingin melihat proyek segera,
berikut ini tautan ke proyek GitHub.
Hanya ingin mencatat bahwa segala sesuatu yang ditambahkan dan diubah dalam versi ini dilakukan dengan sangat
banyak pekerjaan, banyak kesalahan. Google saya dipenuhi dengan sejumlah besar permintaan, mulai dari fitur implementasi MVP, hingga metode asinkron.

Pembaruan
- Menambahkan editor peta Anda sendiri (seperti dalam gim asli).
- Sounder diimplementasikan.
- Ditambahkan kemampuan untuk menangkap donk dan pemintalan.
- Ditambahkan banyak jenis ikan.
- Peningkatan kinerja proyek.
- Memperbaiki sejumlah besar bug.
- Juga, peningkatan signifikan dalam arsitektur aplikasi (lebih tepatnya, penampilannya).
- Menambahkan profil pemain yang disimpan.
- Piala yang direalisasikan.
- Menambahkan perubahan siang dan malam.
- Perjalanan ditambahkan.
- Diimplementasikan sebuah toko kelontong.
- Menerapkan pola MVP.
- Menerapkan sistem acara dalam game
- Umpan yang diterapkan, dengan kemampuan untuk mencampur bahan
- Akting suara ditambahkan
- Animasi ditambahkan
- Keausan batang diterapkan, tergantung pada ukuran ikan dan waktu bertahan hidup
Saya akan menambahkan lebih banyak perubahan pada file proyek README Git.
Bagaimana kode orang lain disesatkan.

Kita melihat dalam tangkapan layar editor peta untuk memancing, yaitu kotak kedalaman untuk setiap lokasi (Ini adalah elemen Label dengan FormBorderStyle = 0, untuk menunjukkan bingkai). Omong-omong, tangkapan layar dibuat menggunakan
gunting saya sendiri
. Apa masalahnya?
Kode sumberfor (int x = 0; x < 51; x++){ for (int y = 0; y < 18; y++){ Point between = new Point(Game.CastPoint.X - LVL.Deeparr[x, y].Location.X, Game.CastPoint.Y - LVL.Deeparr[x, y].Location.Y); float distance = (float)Math.Sqrt(between.X * between.X + between.Y * between.Y); if (distance < 20){ if (Player.getPlayer().lure != null){ Game.gui.DeepLabel.Text = LVL.Deeparr[x, y].Tag.ToString(); Sounder.setY(x); Sounder.setX(y); } } Game.Deep = Convert.ToInt32(Game.gui.DeepLabel.Text); } }
Di sini kita melihat pass sederhana melalui array dua dimensi (dan bukan yang tepat). Kemudian kita menghitung hipotenus dengan teorema Pythagoras, dan jika <20, kita menentukan sel yang diinginkan. Tetapi metode ini bekerja sangat buruk bahkan dengan kotak. Dan di sini adalah persegi panjang. Karena itu, sel sering terdeteksi secara tidak benar. Dalam pembelaan saya, saya dapat mengatakan bahwa saya mengambil kode ini dari YouTube.
Jadi, kita perlu menentukan di mana sel kursornya. Untuk melakukan ini, Anda dapat menggunakan kode sumber ini:
Kode for (var y = 0; y < CurLvl.Height; y++) { for (var x = 0; x < CurLvl.Widgth; x++) { var r = new Rectangle(CurLvl.DeepArray[x, y].Location, new System.Drawing.Size(LabelInfo.Width, LabelInfo.Height)); if (r.IntersectsWith(new Rectangle(point, new System.Drawing.Size(1, 1)))) { //SomeCode } } }
Di sini kita mengambil koordinat kursor, menempelkannya ke dalam PointToClient, dan meneruskannya ke konstruktor Rectangle, tentukan ukuran 1 dan 1. Kemudian kita menggunakan metode pemeriksaan IntersectsWith standar, persimpangan kursor, dan label. Selain itu, kami tidak dapat hanya memproses klik pada label, karena formulir dengan mereka tidak muncul.
Juga, itu memungkinkan untuk menerapkan dukungan untuk 3 pancing.
Generasi ikan
Jadi, bagian utama dari permainan adalah generasi ikan. Itu terjadi dalam beberapa tahap:
1. Ketika memasuki lokasi, kami dari garis seperti:
Ikan Mas: 25 250-400 [Keju, Cacing, Belatung, Jagung] Di mana ukuran ikan sebagai persentase dari maksimum, kedalaman minimum, kedalaman maksimum, dan daftar umpan kita mendapatkan objek ikan (Jangan lupa untuk memeriksa ulang garis melalui ekspresi reguler). Untuk keindahan kode, saya mendefinisikan operator yang melemparkan string ke ikan.
public static explicit operator Fish(FishString fs) { return fs.GetFishByStr(); }
Akibatnya, pendekatan ini memungkinkan kita untuk menulis:
Fish fish = (Fish)new FishString(" : 25 250 - 400 [ , , , ]");
Kode diberikan sebagai contoh dan tidak ditemukan dalam proyek dalam formulir ini.
2. Sekarang kita perlu menunggu joran untuk dilemparkan, setelah itu kita memulai timer (kita sendiri untuk setiap joran) dengan waktu gigitan acak, kemudian ikuti centang timer dari daftar ikan dengan ukuran 1000 unit, pilih ikan yang kedalaman habitatnya mencakup kedalaman pancing.
3. Dari daftar ini, pilih ikan secara acak. Kami memeriksa apakah umpan yang diset dapat dimakan, dan juga memeriksa bahwa waktu hari aktivitas ikan sesuai dengan waktu saat ini dalam permainan.
4. Jika ikan bisa memakan umpan, kita menyerang umpan. Kami menghitung apakah akan ada penurunan dan setelah jam berapa, berdasarkan peluang penurunan kait yang dipasang. Jika ikan tidak bisa memakan umpan, maka kita menggilir umpan saat ini (jika ada). Kami memeriksa apakah ada ikan di dekatnya yang dapat mematuk umpan, dan mengulangi hal yang sama.
Berkat proses pembuatannya, saya telah menjadi pengguna LINQ yang percaya diri.
Game itu sendiri

Screenshot dari toko kelontong.
Sumbernya dapat dilihat di repositori. Di sana, penangan MouseEnter dan MouseLeft untuk memodifikasi gambar makanan agak menarik dieksekusi.

Cuplikan layar formulir perjalanan. (Semua badan air adalah uji dan nama mereka tidak asli.)

Tangkapan Layar Game
Paket
- Buat server klien untuk game
- Pengembang Junior FPGA (FPGA)
- Pengenalan wajah melalui webcam (Saya mencari literatur yang mungkin berguna)
- Mengganti ListView biasa dengan ObjectListView
Di akhir artikel sebelumnya, saya menulis bahwa saya ingin mendapatkan pekerjaan. Nah, pada bulan September, saya menutup TOR pertama saya dengan SNMP, meskipun di C.
Kesimpulan
Proyek ini telah menjadi sangat besar, dengan setidaknya basis kode yang ideal, tetapi sangat layak, nyaman untuk dipertahankan. Di suatu tempat prinsip-prinsip SOLID mungkin dilanggar, tetapi ini disebabkan oleh fakta bahwa proyek itu sangat panjang. Juga, jika Anda adalah pengembang pemula, dan mencari proyek di mana Anda dapat berpartisipasi, Anda dapat membuat komitmen untuk repositori ini. Daftar perubahan yang diharapkan dapat ditemukan di file README proyek.
Saya juga ingin mencatat bahwa saya tidak melihat prospek dalam karier pengembang C #, atau lebih tepatnya saya ingin sesuatu yang lebih dekat dengan perangkat keras, jadi saya mencoba mempelajari bahasa tingkat rendah.
Terima kasih semua yang membaca sampai akhir, setiap kritik terhadap kode sumber disambut dan akan segera dipertimbangkan.