Latar belakang
Anak saya Leonhard (4 tahun) menyukai labirin. Saya tidak tahu dari mana dia tahu labirin, tapi dia melukisnya dan tahu bagaimana mereka bekerja:
Baru-baru ini, ia mulai membuat game dari lukisannya. Ini adalah peraturannya:
- kotak hitam menunjukkan titik awal.
- kait menunjukkan pintu keluar labirin (di situlah Anda ditarik keluar).
- Anda dapat mengumpulkan mahkota.
- Anda dapat mengumpulkan nugget emas (benda bundar).
- Anda bisa maju dan mundur, tetapi tidak lebih dari itu.
- panah mungkin memandu Anda ke pintu keluar. (Jika dia melukis labirin untuk saya pecahkan, mereka sering menyesatkan).
Versi beranotasi:
- biru: titik awal
- oranye: mahkota
- kuning: area dengan nugget emas
- hijau: kait (keluar)
- pink: panah (kebanyakan menyesatkan)
Tugas
Mungkin Anda tahu, pada usia 4 tahun, anak-anak mulai memberi tahu pai dan kadang-kadang dia tidak mengikuti aturannya sendiri, terutama jika dia tahu bahwa dia tidak dapat mencapai ujung labirin lagi.
Di situlah Anda ikut bermain: karena saya tetap mencari permainan untuk anak-anak , Anda mengubah idenya menjadi permainan di mana curang tidak mungkin.
Yah, kita perlu beberapa definisi lagi, saya katakan:
- lapangan bermain adalah
n
*m
persegi panjang dari kotak berukuran sama. - kotak dapat memiliki 0 hingga 4 dinding, satu di setiap sisi.
- mahkota bernilai 50 poin.
- nugget emas bernilai 20 poin.
- berjalan di alun-alun yang sudah berjalan mengurangi 1 poin.
- kotak ditandai dengan cara untuk mengidentifikasi seberapa sering pemain berjalan di atasnya (0, 1 atau 2 kali)
- pemain bisa berjalan ke 4 arah, kecuali jika ada tembok.
- Perangkat input dapat berupa apa saja. Silakan pertimbangkan dukungan keyboard.
- Labirin harus dipecahkan. Yaitu harus mungkin untuk mencapai kait dari titik awal dan harus mungkin untuk mengumpulkan semua barang berharga (bahkan jika itu tidak menghasilkan skor setinggi mungkin).
- Jika pemain macet, permainan berakhir.
- Pemain tidak boleh mati dengan jatuh dari papan. Anda dapat menempatkan dinding di sekitar labirin lengkap atau membungkus tepi, apa pun yang Anda suka.
- program mengambil argumen kata (0-65535) sebagai input. Ini adalah seed untuk generator angka acak. Memanggil program dengan seed yang sama lagi akan menghasilkan labirin yang sama.
Bonus:
- hitung poin maksimal yang bisa dikumpulkan. Pertimbangkan bahwa karena -1 poin, mungkin lebih baik tidak mengumpulkan semua item.
- Tunjukkan solusi terbaik (cara terpendek untuk mendapatkan poin maksimal)
Aturan
Ini adalah kontes popularitas, karena saya ingin dapat membaca dan memahami kode dan mungkin beradaptasi dengan ide-ide baru anak saya. Maaf, pegolf kode, mungkin Anda ingin membuat salinan pertanyaan ini dengan aturan yang lebih cocok untuk bermain golf, misalnya versi konsol dengan semua karakter yang ditentukan.
Game paling populer pada 3 Mei akan menjadi jawaban yang diterima. Dan, hei, mengapa tidak menerbitkannya di app store?
sumber
Jawaban:
JavaScript
Bekerja dalam proses. Sayangnya labirin tidak selalu dapat dipecahkan - batas untuk maju-mundur adalah rintangan yang sebenarnya.
Sunting 1 Kosmetik
Sunting 2 Gameplay yang lebih baik, tetapi masalah besar masih ada
sumber
Jawa
Saya tidak pernah mengeluh tentang GolfScript atau CJam, tapi inilah jawaban Java untuk Anda. Ini adalah tantangan yang sangat menyenangkan. ;)
Proses menciptakan labirin yang sebenarnya menggunakan algoritma pencarian kedalaman-pertama , tetapi dengan pendekatan berulang. Begini cara kerjanya.
Kita mulai dengan array
int
nilai 2D , setiap elemen menjadi -1. Elemen acak dengan indeks genap dipilih, dan nilainya menjadi 0:Kemudian program memasuki loop, memeriksa sel yang tersedia sampai mencapai keadaan di mana tidak ada sel yang tersedia. Ini bisa terjadi beberapa kali, dan saat itu mulai mundur. Pada saat ini semua 0s yang muncul menjadi 1s. Juga selama waktu ini adalah ketika menentukan apakah jalan keluar harus ditempatkan di lokasi itu. Jadi pada akhirnya, array bisa terlihat seperti ini:
Ketika ada jumlah 1s atau 0s yang telah ditentukan pada titik-titik tertentu dalam array, loop keluar. Kemudian, menggunakan array, labirin yang dihasilkan digambar:
Sangat mudah untuk melihat bahwa -1s dalam array mewakili dinding, dan 0s dan 1s adalah koridor. Barang-barang didistribusikan secara acak di seluruh labirin. Elips merah adalah "pemain" yang Anda kontrol.
Labirin dibungkus dalam panel gulir untuk kenyamanan sehingga jika ukurannya melebihi ukuran maksimum bingkai Anda dapat menggulir untuk melihat sisa labirin.
Saya akan mengatakan satu-satunya masalah dengan ini adalah bagaimana akhir permainan dilakukan. Saya memikirkan beberapa cara untuk melakukannya, tetapi saya akhirnya menggunakan hard-coding semuanya. Saya terbuka untuk saran tentang bagaimana hal itu bisa dilakukan.
sumber
MazeMaker.java:168: error: cannot find symbol printArray(); ^ symbol: method printArray() location: class MazeMaker
printArray
yang saya gunakan untuk output array, tetapi menghapusnya dan lupa untuk menghapus panggilan metode.Python
Saya menyadari bahwa saya terlambat ke pesta, tetapi inilah pendapat saya tentang tantangan ini. Saya menggunakan teks karena saya belum sempat belajar pygame, belum. Ini adalah Python 3. Ubah input ke raw_input dan itu harus bekerja di python2 juga.
Hook (keluar) diwakili oleh "J". "W" adalah mahkota (50). "G" adalah Gold nugget (20). Pemain adalah "O". Saya bereksperimen dengan menggunakan "P" untuk pemain, tetapi saya menemukan "O" lebih mudah untuk Diidentifikasi.
Saya menggunakan generasi labirin kedalaman pertama standar, lalu menambahkan emas, mahkota, kait, dan posisi pemain saat ini. Saya tidak menerapkan kriteria bahwa semua harta dapat diperoleh.
sumber