চ্যালেঞ্জটি হ'ল যথাসম্ভব কয়েকটি বাইট ব্যবহার করে ক্লাসিক স্নেক গেম তৈরি করা।
প্রয়োজনীয়তা এখানে:
- গেমটি অবশ্যই একটি সাধারণ দ্বিমাত্রিক বিন্যাসে প্রয়োগ করা উচিত। সাপটি মানচিত্রের সীমানার মধ্যে উল্লেখযোগ্যভাবে বেড়ে উঠতে সক্ষম হওয়া উচিত (এর অর্থ হ'ল, আপনার মানচিত্রটি খুব ছোট করে তুলবেন না, এখানে নিজের বিচক্ষণতাটি ব্যবহার করুন)।
- কোনও ব্যবহারকারী আপনার পছন্দের কীগুলি ব্যবহার করে সাপটিকে সরিয়ে ফেলতে পারে, তবে, সাপটি নিজের উপর আবার ডাবল করতে পারে না (যেমন যদি এটি পশ্চিম দিকে চলে যায় তবে এটি প্রথমে উত্তর বা দক্ষিণে না গিয়ে পূর্ব দিকে যেতে পারে না)। একটি সাপকে সমস্ত চার দিকে ভ্রমণ করতে সক্ষম হওয়া উচিত: উপরে, নীচে, বাম, ডান (উত্তর, দক্ষিণ, পশ্চিম, পূর্ব)।
- সাপ দৈর্ঘ্য 1 হিসাবে শুরু হয়, প্রতিবার এটি "খাদ্য" বস্তু খায় এটি দৈর্ঘ্যে +1 বৃদ্ধি পায়
- খাবারের জিনিসগুলি এলোমেলোভাবে সাপ দ্বারা দখলে রাখা ছাড়া অন্য জায়গায় স্থাপন করা হয়
- যদি সাপটি নিজেকে বা কোনও দেয়ালে আঘাত করে তবে খেলাটি শেষ হবে
- যখন খেলাটি আক্ষরিক শেষ হয়ে যায় "স্কোর: [স্কোর]" প্রদর্শিত হয় যেখানে [স্কোর] গেমের সময় খাওয়া খাবারের সংখ্যা। সুতরাং, উদাহরণস্বরূপ, খেলা শেষ হওয়ার পরে যদি সাপটি 4 "খাবার" খায় (এবং সুতরাং এর দৈর্ঘ্য 5 থাকে) তবে "স্কোর: 4" মুদ্রিত হবে।
- কোনও সংক্ষেপণ অ্যালগরিদম না থাকলে সেগুলি আপনার কোডটিতে স্পষ্টভাবে সংজ্ঞায়িত করা হয়।
এখানে আমার সমাধান, 908 বাইট, পাইথন 2.7 2.
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