Tantangannya adalah membuat game Snake klasik menggunakan byte sesedikit mungkin.
Berikut persyaratannya:
- Gim harus diimplementasikan dalam tata letak 2 dimensi yang khas. Ular harus dapat tumbuh secara signifikan dalam batas-batas peta (ini berarti, jangan membuat peta Anda terlalu kecil, gunakan kebijaksanaan Anda di sini).
- Seorang pengguna dapat memindahkan ular menggunakan kunci pilihan Anda, namun, ular itu tidak dapat menggandakan dirinya sendiri (misalnya jika ia pergi ke Barat, ia tidak dapat pergi ke Timur tanpa terlebih dahulu pergi ke Utara atau Selatan). Seekor ular harus dapat melakukan perjalanan di semua 4 arah: atas, bawah, kiri, kanan (Utara, Selatan, Barat, Timur).
- Ular dimulai dari panjang 1, setiap kali memakan objek "makanan", panjangnya +1
- Objek makanan ditempatkan secara acak di lokasi selain yang ditempati oleh ular
- Jika Snake mengenai dirinya sendiri atau tembok permainan berakhir
- Ketika permainan telah berakhir, "Skor: [skor]" literal ditampilkan di mana [skor] adalah jumlah makanan yang dimakan selama pertandingan. Jadi, misalnya, jika ular telah makan 4 "makanan" (dan karena itu memiliki panjang 5) ketika permainan berakhir, "Skor: 4" akan dicetak.
- Tidak ada algoritma kompresi kecuali mereka secara eksplisit didefinisikan dalam kode Anda.
Inilah solusi saya, 908 Bytes, Python 2.7
import random as r
import curses as c
def g(s,w,l):
while 1:
p=[r.randrange(0,w),r.randrange(0,l)]
for l in s:
if l==p:continue
return p
s=[]
d=[0,1]
p=k=n=0
e=100
v={65:[-1,0],66:[1,0],68:[0,-1],67:[0,1]}
z=c.initscr()
w,l=z.getmaxyx()[0],z.getmaxyx()[1]
c.noecho()
z.clear()
x=g(s,w,l)
s.append([w/2,l/2])
z.nodelay(1)
q=lambda h,i:range(h,len(i))
while k!=101:
k=z.getch()
if k in v and not (d[0]==(v[k][0]*-1) and d[1]==(v[k][1]*-1)):d=v[k]
f=[0,0]
for i in q(0,s):
if i == 0:
f=[s[i][0],s[i][1]]
s[i][0]+=d[0]
s[i][1]+=d[1]
else:s[i],f=f,s[i]
if s[0]==x:
n+=1
s.append(f)
x=g(s,w,l)
z.clear()
if s[0][0]>=w or s[0][1]>=l or s[0][0]<0 or s[0][1]<0:break
for i in q(1,s):
if s[0] == s[i]: k = 101
for i in q(0,s):z.addch(s[i][0],s[i][1],"X")
z.addch(x[0],x[1],"O")
z.move(0,0)
z.refresh()
if d[1]!=0:c.napms(e/2)
else:c.napms(e)
c.endwin()
print 'Score: %s'%n
Jawaban:
Ruby 1.9 + SDL (
341324316)Berikut adalah upaya pertama pada versi Ruby menggunakan perpustakaan SDL. Saya dapat menyimpan 6 karakter jika saya diizinkan memuat perpustakaan SDL menggunakan
-rsdl
pada baris perintah alih-alih pernyataan yang diperlukan.Segmen ular dan potongan makanan diwakili menggunakan piksel hitam, ukuran kotak saat ini 32 * 32. Anda dapat mengontrol dengan tombol panah (atau tombol apa saja, mod kode 4 indeks indeks array arah [KIRI, ATAS, BAWAH, KANAN]). Saya pikir pasti ada ruang untuk perbaikan di sini, terutama dalam pernyataan IF yang memeriksa kematian.
Saya telah jauh memperbaiki ini dibandingkan versi sebelumnya, semoga saja ini lebih cocok dengan semangat pertanyaan sekarang.
Ada satu hal yang perlu saya perbaiki untuk memenuhi spesifikasi, yaitu makanan saat ini dapat muncul di dalam ekor.Tetap!Mencetak skor ke stdout setelah pertandingan selesai.
sumber
Jawa,
23432239Tidak persis ringkas, tapi saya percaya itu mengikuti semua persyaratan.
Kelas ular
Kelas dewan
Tangkapan layar
Komentar
Beberapa waktu yang lalu saya mengunjungi situs web yang disebut zetcode yang menyediakan beberapa tutorial untuk membuat game 2D klasik di Jawa. Kode yang diberikan sangat dipengaruhi oleh tutorial yang disediakan untuk permainan Snake ... Saya pikir saat ini saya baru saja mulai mengkodekan permainan klasik dan mengikuti tutorial ke 'T'.
Saya akan mengedit nanti dan menambahkan tautan ke file yang dapat dieksekusi sehingga orang-orang dapat memainkan game.
EDIT
sumber
Bash:
537533507 karakterKarena menggunakan
$COLUMNS
dan$LINES
variabel shell, itu harus dijalankan bersumber:. snake.sh
. Ular dapat dikontrol dengan tombol w/ a/ s/ d.Saya tahu, ini dapat dengan mudah dikurangi menjadi 493 karakter dengan menggunakan
clear
untuk menghapus layar, tetapi saya lebih memilih untuk tetap murnibash
, tanpa menggunakan alat eksternal.sumber
Python 2.7:
869816818817816 KarakterSaya meretas ini bersama dalam beberapa jam terakhir. Itu harus memenuhi persyaratan dan beberapa karakter lebih pendek dari solusi mjgpy3 (Berusaha keras, tetapi tidak bisa membuatnya lebih pendek. Sekarang saya lelah). Anehnya, menggunakan perpustakaan pengembangan game seperti pygame tidak membuat ular piton jauh lebih pendek. Saran dan tips bagaimana membuatnya lebih pendek sangat dihargai. Saya harap itu tidak terlalu samar.
Ini hasilnya:
EDIT: Saya bisa menguranginya menjadi 816 Bytes, yay! :) Memperbaiki skor
EDIT2: Menyisipkan versi yang salah secara tidak sengaja
Ini adalah versi yang dikomentari:
sumber