Pembangun Cipta Permainan Snake Menggunakan Hanya 4 Integer, Mencetuskan Perdebatan Mengenai Kekangan Pengaturcaraan

Pasukan Komuniti BigGo
Pembangun Cipta Permainan Snake Menggunakan Hanya 4 Integer, Mencetuskan Perdebatan Mengenai Kekangan Pengaturcaraan

Seorang pengaturcara telah mencipta permainan Snake yang berfungsi menggunakan hanya empat pembolehubah integer, menunjukkan pendekatan yang melampau terhadap pengaturcaraan berkekangan memori. Projek ini menyimpan keseluruhan keadaan permainan - termasuk papan permainan, kedudukan ular, arah, dan lokasi epal - dalam 4 integer yang berjumlah kira-kira 17 bait memori.

Pelaksanaan ini menggunakan grid permainan 4x4 yang disimpan dalam satu integer 32-bit, dengan setiap bit mewakili satu sel pada papan. Data permainan tambahan seperti kedudukan kepala ular, kedudukan ekor, panjang, lokasi epal, dan arah input pemain dikemas ke dalam integer 32-bit yang lain menggunakan operasi bitwise. Integer ketiga menjejaki arah pergerakan ular, manakala yang keempat berfungsi sebagai pengira gelung.

Pecahan Susun Atur Memori:

  • uint32_t map - 16 bit untuk grid permainan 4x4 (4 bait)
  • uint32_t vars - menyimpan kedudukan kepala (5 bit), kedudukan ekor (5 bit), panjang (5 bit), kedudukan epal (5 bit), arah (2 bit) (4 bait)
  • uint32_t shape - menyimpan arah pergerakan, 2 bit setiap arah, sehingga 16 arah (4 bait)
  • int8_t i - pembilang gelung (1 bait)
  • Jumlah: 17 bait untuk keadaan teras permainan

Komuniti Mempersoalkan Dakwaan Kepraktisan

Komuniti pengaturcaraan telah membangkitkan beberapa kebimbangan mengenai dakwaan bercita-cita tinggi projek ini. Pengkritik menunjukkan bahawa walaupun keadaan permainan teras muat dalam empat integer, program lengkap memerlukan memori tambahan untuk pelaksanaan, termasuk ruang stack, pengira gelung, dan perpustakaan curses yang digunakan untuk input papan kekunci dan rendering paparan.

Dakwaan sebenar ialah anda boleh menyimpan keadaan permainan untuk papan permainan 8x4 yang agak minimal dalam dua uint32_t, satu uint64_t, dan satu uint_8t. Itu bukan keseluruhan keadaan program.

Sesetengah pembangun mencadangkan bahawa tajuk tersebut terlalu mempromosikan pencapaian ini, dengan menyatakan bahawa dengan kekangan sedemikian, malah permainan yang lebih mudah menjadi mungkin. Seorang pengulas dengan jenaka memerhatikan bahawa mengurangkan papan permainan kepada hanya sel 2x2 akan membolehkan keseluruhan permainan muat dalam satu integer.

Pelaksanaan Teknikal Mendapat Reaksi Bercampur

Projek ini sangat bergantung pada definisi makro yang kompleks untuk memanipulasi bit individu dalam integer. Apabila makro ini berkembang semasa kompilasi, ia mencipta kod yang hampir tidak boleh dibaca yang dipenuhi dengan operasi bitwise dan anjakan bit. Penulis mengakui pendekatan ini menghasilkan makro yang buruk dan memberi amaran bahawa hasilnya harus dilihat sebagai latihan pengaturcaraan dan bukannya amalan pengekodan yang baik.

Pemampatan bentuk ular terutamanya menarik minat beberapa ahli komuniti, yang menyatakan bahawa banyak corak bit secara fizikalnya mustahil untuk permainan ular. Ini menunjukkan keadaan permainan berpotensi dimampatkan lebih jauh lagi, walaupun dengan kos kerumitan tambahan.

Kekangan Permainan:

  • Grid 4x4 = 16 sel keseluruhan
  • Panjang ular maksimum terhad oleh penyimpanan arah yang tersedia
  • Menggunakan perpustakaan curses untuk input/output (kebergantungan luaran)
  • Memerlukan makro manipulasi bitwise untuk pengurusan keadaan

Perdebatan Falsafah Pengaturcaraan yang Lebih Luas

Projek ini telah mencetuskan perbincangan mengenai nilai kekangan pengaturcaraan yang melampau. Walaupun sesetengah pembangun menghargainya sebagai latihan pengoptimuman yang menarik, yang lain mempersoalkan sama ada had sedemikian mempunyai tujuan praktikal selain daripada rasa ingin tahu akademik. Perdebatan ini mencerminkan ketegangan yang lebih luas dalam pengaturcaraan antara kod yang boleh dibaca, boleh diselenggara dan demonstrasi teknikal penggunaan sumber yang minimal.

Kod sumber lengkap merangkumi kira-kira 150 baris dan tersedia di GitHub , membolehkan pengaturcara lain meneliti teknik manipulasi bitwise yang digunakan. Walaupun pencapaian teknikal, konsensus menunjukkan pendekatan ini berfungsi lebih baik sebagai latihan pembelajaran daripada templat untuk pembangunan permainan dunia sebenar.

Rujukan: 4 integers are enough to write a Snake Game