কনসোল / টার্মিনালে একটি 'স্নেক' গেমটি পুনরুদ্ধার করুন


25

গেমস মজা

এই কোডগল্ফটি এখানে এত মজাদার ছিল যে আমাকে অন্যান্য ক্লাসিক গেমগুলির মতো জটিলতার জন্য একটি সংস্করণ তৈরি করতে হয়েছিল। পাইথনে একটি বেসিক স্পেস ইনভাইডারস গেম তৈরি করার সবচেয়ে সংক্ষিপ্ততম উপায়

এবার, তবে ক্লাসিক 'স্নেক' গেমটি পুনরায় তৈরি করার চেষ্টা করুন, যাতে আপনি নিজের স্কোর বাড়ানোর জন্য অবিচ্ছিন্নভাবে টুকরো সংগ্রহ করার দিকে চালিত হয়ে একটি ছোট আকার হিসাবে শুরু করেন। আপনি যখন কোনও টুকরো সংগ্রহ করেন, আপনার 'লেজ' বৃদ্ধি পায় যা আপনার তৈরি পথ অনুসরণ করে। উদ্দেশ্যটি হ'ল নিজের লেজ, বা দেয়ালগুলিতে ক্রাশ না হয়ে দীর্ঘতম স্থায়ী হওয়া

যোগ্যতা:

  • আপনি, লেজগুলি, দেওয়ালগুলি এবং আপনার সংগ্রহ করা টুকরাগুলি যে অক্ষরগুলি তৈরি করে সেগুলি আলাদা আলাদা অক্ষর হওয়া উচিত
  • স্কোর সহ একটি এইচডি প্রদর্শন করুন। আপনার সংগ্রহ করা প্রতিটি টুকরোটির জন্য স্কোর 1 পয়েন্ট বেড়ে যায়
  • খেলোয়াড় হারাতে থাকে যখন তারা তাদের নিজস্ব লেজ বা প্রাচীরের সাথে সংঘর্ষ হয়
  • কোনও টুকরো সংগ্রহের পরপরই কোনও টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো সংগ্রহ করার পরে, খেলার শুরুতে উল্লেখ না করে
  • গতিবেগ যতক্ষণ না এটি সামঞ্জস্যপূর্ণ ততক্ষণ গুরুত্বপূর্ণ নয়
  • 'কক্ষগুলি' 2x1 অক্ষর হওয়া উচিত, যেহেতু ব্লক অক্ষরের উচ্চতা 2x1 প্রস্থের দ্বিগুণ হতে পারে, কারণ 2x1 কেবল কুরুচিপূর্ণ এবং আমি সত্যিই এটি সম্পর্কে ভাবিনি
  • দিক পরিবর্তন করার জন্য কীগুলি awsdযথাক্রমে বাম, উপরে, নীচে থাকা উচিত
  • প্রারম্ভিক দিকটি সর্বদা উপরে থাকা উচিত
  • আপনাকে অবশ্যই প্রাচীরের প্রান্তগুলি প্রদর্শন করতে হবে। স্কোরটি প্রাচীরকে ওভারল্যাপ করতে পারে

সংক্ষিপ্ততম কোড যা উপরের মানদণ্ডগুলি জয় করে। সৃজনশীলতার জন্য ক্যালেন্ডার বোনাস পয়েন্টস


খাওয়ার সময় সাপ বড় হওয়ার কথা নয়?
পালা বন্ধ হয়ে counterclockwis

HM? "আপনি যখন কোনও টুকরো সংগ্রহ করেন, আপনার 'লেজ' বৃদ্ধি পায় যা আপনার তৈরি পথ অনুসরণ করে" ", তাই হ্যাঁ, সাপটি বেড়ে ওঠে।
ব্লেজার

2
awsdএবং starting direction should always be upপ্রয়োজনীয়তা ছাড়াই M-x snakeকাজ করবে
scrblnrd3

1
@ scrblnrd3 M-: (progn(define-key snake-mode-map"a"'snake-move-left)...(setq snake-initial-velocity-x 0 snake-initial-velocity-y 1)(snake))তখন কৌশলটি করবে।
জোনাথন লিচ-পেপিন

উত্তর:


32

জাভাস্ক্রিপ্ট ( 553 512 বাইট)

প্লেযোগ্য সংস্করণে লিঙ্ক

c=0;a=b=d=-1;e=[f=[20,7],[20,8]];i=Math.random;~function n(){if(c&&(87==a||83==a
))c=0,d=87==a?-1:1;if(d&&(65==a||68==a))d=0,c=65==a?-1:1;p([j=e[0][0]+c,k=e[0][1
]+d])||!j||39==j||!k||10==k?b+=" | GAME OVER":(e.unshift([j,k]),p(f)?(f=[1+38*i(
)|0,1+9*i()|0],b++):e.pop());for(m=h="";11>h;h++){for(g=0;40>g;g++)l=g+","+h,m+=
!g||39==g||!h||10==h?"X":e[0]==l?"O":p(l)?"*":f==l?"%":" ";m+="\n"}x.innerHTML=m
+b;!b.sup&&setTimeout(n,99)}();onkeydown=function(o){a=o.keyCode};function p(o){
return e.join(p).indexOf(p+o)+1}

আমি প্রথমে এটিকে আসল কনসোলে আউটপুট করার চেষ্টা করেছি ( console.logএবং সহ console.clear), তবে এটি খুব বেশি ঝাঁকুনি দিচ্ছিল, তাই আমি এটিকে কনসোলের মতো এইচটিএমএল এ রেখেছি। এটি এর সাথে কাজ করবে:

<pre id=x>

এছাড়াও আমি এটি প্রথমে 2x1 কোষ দিয়ে প্রয়োগ করেছি, তবে এটি 1x1 এর চেয়ে খারাপ দেখাচ্ছে। যদিও এটি একটি সামান্য পরিবর্তন হবে।

awsdকীবোর্ডে কী ব্যবহার করে।

হালনাগাদ:

লেজ অনুসন্ধানে উন্নতি করে আরও কিছু যাদু করে আমি এটিকে 512 (ঠিক 0x200) বাইটে কাটাতে সক্ষম হয়েছি।

আপনি এখন 2 পয়েন্ট পাবেন যখন একটি টুকরা আপনার লেজে স্প্যান করবে (এটি একটি বৈশিষ্ট্য)। সাপটি কামড়ালে আমি ওভারল্যাপিং স্থির করেছিলাম।


1
সুন্দর! এবং আপনি ঠিক বলেছেন, এটি 2x1 এর চেয়ে 1x1 হিসাবে আরও ভাল দেখাচ্ছে। বাম এবং ডানদিকের চেয়ে দ্রুতগতিতে কেবলমাত্র আমিই ছিলাম তবে এটি সীমাবদ্ধতা বিবেচনা করে ডাবল considering কনসোলে ফ্ল্যাশিং আমার এতটা আপত্তি নেই (আমার স্পেস আক্রমণকারীদের প্রোগ্রামটি দেখুন, এটি মোটামুটি ঝাঁকুনি দিচ্ছে) তবে আমি মনে করি যে একটি সরল পাঠ্য ওয়েব পৃষ্ঠাটিও কাজ করে! যদিও একটি শিখর ... রিফ্রেশ না করে পুনরায় চালু করার কোনও উপায় আছে? :(
ব্লেজার

সাথে কাজ করে নাawsd
নীল

@ ব্লাজার এতে আরও 13 টি অক্ষর লাগবে: - / ... এবং যাইহোক আপনার কাছে F5 কী রয়েছে।
অনুলিপি

@ নিল হ্যাঁ আমি তীর কীগুলি ব্যবহার করেছি তবে এটি এখনই ঠিক করে ফেললাম।
অনুলিপি

@ কপি আমি মনে করি আমি এটির প্রয়োজনীয়তা তৈরি করি নি
ব্লেজার

21

x86 মেশিন কোড (128 বাইট)

অনেকটা ম্যান্ডলব্রোট ফ্র্যাক্টাল জেনারেট করার জন্য আমার জমা দেওয়ার মতো , আমি 128 বাইটে সাপের খেলার জন্য একটি প্রোড লিখেছিলাম। এটি চ্যালেঞ্জের প্রয়োজনীয়তাগুলি পুরোপুরি পূরণ করে না (এটি ডানদিকে চলতে শুরু করে, সমস্ত দেয়াল আঁকা হয় না), তবে আমি এটি পোস্ট করছি কারণ আমি মনে করি এটি একটি আকর্ষণীয় এবং সৃজনশীল সমাধান। স্কোরটি ডানদিকে বাইনারিতে দেখানো হয়েছে, তীর কীগুলি গতির দিক নিয়ন্ত্রণ করে, 'খাবার' এলোমেলোভাবে বাদ পড়ে যায় এবং আপনি যদি নিজেকে, প্রাচীর বা পর্দার প্রান্তে আঘাত করেন তবে এটি শেষ হবে।

এক্সিকিউটেবল এবং সোর্স কোডের জন্য লিঙ্ক

স্ক্রিনশট

এছাড়াও, ডসবক্স প্রতারণা করছে কিনা তা সম্পর্কে পূর্ববর্তী মন্তব্যের বিষয়ে, আমি যতক্ষণ না এটি পাঠ্য-ভিত্তিক প্রদর্শন মোডে থাকি ততক্ষণ পুরোপুরি গ্রহণযোগ্য বলে মনে করি, যেহেতু এটি কেবল একটি ডস টার্মিনাল।


ডসবক্সকে কেন কখনও প্রতারণা হিসাবে বিবেচনা করা হবে? এটি একটি পুরোপুরি আইনী প্ল্যাটফর্ম।
dfeuer

9

16 বিট 8086

526 বাইট / 390 বাইট

এটি একটি বেস 64 ডিকোডার ব্যবহার করে ডিকোড করুন এবং এটিকে "স্নেক ডট কম" কল করুন তারপরে উইন্ডোজ কমান্ড প্রম্পট থেকে কার্যকর করুন। উইনএক্সপিতে পরীক্ষিত, আপনাকে সঠিক ভিডিও মোড পেতে ডসবক্স ব্যবহার করতে হতে পারে। নিয়ন্ত্রণ কীগুলি 'নষ্ট' এবং প্রস্থান করার জন্য স্থান space শুরু করতে 'ডাব্লু' টিপুন।

uBMAzRC5AD+2AOipAb1AAbgAoI7Auf//v4sMsAHzqrgAtLksAfOqg8cU/sx19OgsAYs+8gKwAuj4
ALQAzRpCiRYOA4kWEAPouAC0C80hCsB0IbQIzSG+ygKDxgOAPAB0EjgEdfSLRAGzAP/Qo1cBiB7w
AulqAIEGdAGu/7P+uNECgMMEw7MCuNsCgMMGw4s+8gKLHvACisPolwADv+YCJoo16I0AiT7yAoD+
A775AnREiz70AiaKHbAA6HUAA7/mAok+9AKA/gB0FscGVwHNAoEudAGu/zPJtj/o2QDofQC0AM0a
OxYOA3X2/wYOA+lZ/8YEAE7+BIA8CnT16F4AaOAB6EQAM9K5LQD38YvCweACBQoA9+WL+OguALlL
ADPS9/HB4gKDwgsD+iaAPQB10rADiMRXq4HHPQGrq4HHPAGrq4HHPQGrX8OhEAO62wD34rntf/fx
iRYQA4vCw772Ar8K9bUEshCstACL2AHDi4f6ArMDtwXR+LEAwNEC/smA4Q8miA0p7/7PdevoIQA6
xHQE/st13ugKAP7NdcroAwB1+8O3BSbGBQEp7/7PdfaBx0EG/srDuBAQM9uAwwLNEID7CnX2w7gD
AM0QzSB3dgEgxgIAYYcBZIUBIMYCAHd8AXN+ASDGAgAA+wAF/P8EAAIAH4ofigAAAADRxeD/TJlO
gQPvQrVA4++BVdVjgQ==

এখানে একটি অক্ষর মোড সংস্করণ যা 390 বাইট দীর্ঘ:

uAMAzRC4ALiOwLlQADP/uCCf86uzF6u4AA+xTvOruCCfq7LdfCxUPOr6BgBiz5+AqF8Aqu0AM0aQ
okWhgKJFogC6MUAtAvNIQrAdCG0CM0hvlYCg8YDgDwAdBI4BHX0i0QBswD/0KNSAYgefALpdgCBB
m8Bov+z/rhdAoDDBMOzArhnAoDDBsOLPn4Cix58AiaJHQOclgmijUmiR2JPn4CgP4DvoUCdFOLPo
ACJoodJscFAAADv3JYiT6AAoD+AHQkxwZSAVkCgS5vAaL/vwEAudAHJoA9qnUEJsYFzIPHAuLx6F
4AtADNGjsWhgJ19oMGhgIC6Uz/xgQATv4EgDwKdPXoPgBo5wHoIgC5FwD38Wn6oADoFgC5TgD38U
ID0gP6JoA9AHXhJscFA93DoYgCutsA9+K57X/38YkWiAKLwjPSw76CAr8CALkEALSfrAQwq+L6w8
0gd3EBIFcCAGGCAWSAASBXAgB3dwFzeQEgVwIAYP+gAP7/AgACqtAH0AcAAAAA

এই চরিত্রের মোডটির তিনটি বাইট দীর্ঘতর (তবে সাপের ভাল):

uAMAzRC4ALiOwLlQADP/uCCf86uzF6u4AA+xTvOruCCfq/7LdfCxUPOr6BsBiz6BAibHBQEKtADN
GkKJFokCiRaLAujHALQLzSEKwHQhtAjNIb5ZAoPGA4A8AHQSOAR19ItEAbMA/9CjUwGIHn8C6XgA
gQZwAaD/s/64YAKAwwTDswK4agKAwwbDiz6BAosefwImiR0Dv3VYJoo1JscFAQqJPoECgP4DvogC
dFOLPoMCJoodJscFAAADv3VYiT6DAoD+AHQkxwZTAVwCgS5wAaD/vwEAudAHJoA9qnUEJsYFzIPH
AuLx6F4AtADNGjsWiQJ19oMGiQIE6Ur/xgQATv4EgDwKdPXoPgBo6gHoIgC5FwD38Wn6oADoFgC5
TgD38UID0gP6JoA9AHXhJscFA93DoYsCutsA9+K57X/38YkWiwKLwjPSw76FAr8CALkEALSfrAQw
q+L6w80gd3IBIFoCAGGDAWSBASBaAgB3eAFzegEgWgIAYP+gAP7/AgACqtAH0AcAAAAA

সৃজনশীলতার জন্য পয়েন্টস, তবে আমি মনে করি ডসবক্স ব্যবহার করা প্রতারণা করছে কারণ চ্যালেঞ্জটি একটি ডসবক্স নয়, একটি আসকি কনসোল বা টার্মিনালটিতে গেমটি কাজ করা। এছাড়াও, গল্ফের কোডটি সোর্স কোড হওয়া উচিত নয়, বাইনারি নয়?
ব্লেজার

7
@ ব্লাজার: এটি উত্স কোড - আমি একটি হেক্স সম্পাদক ব্যবহার করে মেশিনের কোডটি টাইপ করেছি - এটাই আমি কীভাবে l337! ;-) আপনার ভিডিও ড্রাইভারদের মোড 13 গ্রাফিক্সে সমস্যা থাকলে (খনি কার্ডটি এটির সাথে ঠিক আছে) কেবল তখনই ডসবক্স জিনিসটি প্রয়োজন।
এসকি

"390-বাইট" সংস্করণটি কেবল 388 বাইটে ডিকোড হয় এবং ডসবক্সের অধীনে চলাকালীন স্তব্ধ হয়ে যায়। দেখে মনে হচ্ছে ট্রান্সমিশনে কিছু হারিয়ে গেছে। :( তবুও, অন্য দুটি সংস্করণ অত্যন্ত দুর্দান্ত!
ইলমারি করোনেন

কোডটির একটি অদৃশ্য সংস্করণ আছে? (আমি এই ভাষা জানি না)
আওয়ামী লীগের

1
@ এন .১: প্রোগ্রামটি ৮০86 machine মেশিন কোড, আপনি এটি একটি ডিবাগারে (ডি 86) লোড করতে পারেন এবং লেবেল নাম ছাড়াই কোড লিখিত হিসাবে দেখতে পারেন।
Skizz

6

শেল / শ, 578 অক্ষর

আমি পসিক্স অনুগত হওয়ার চেষ্টা করেছি (যতটা সম্ভব পোর্টেবল হওয়া এবং বাশিজম এড়ানো, এমনকি এলোমেলো নম্বর-জেনারেটরের প্রয়োজন নেই / কেনা)। আপনি উদাহরণস্বরূপ এটি আপনার স্থানীয় টার্মিনালে বা একটি এসএসএইচ-সেশনের মাধ্যমে খেলতে পারেন: 'ড্যাশ -সি। / স্নেক' দিয়ে চালান ~ 2800 বাইটে একটি অসমাপ্ত / পঠনযোগ্য বৈকল্পিকও রয়েছে, যা এখানে দেখা যায় ।

কিছু নোট: শেল-স্ক্রিপ্টিং গেমস কোডিংয়ের জন্য উপযুক্ত নয় 8-)

  • সত্য বলতে, আমরা কেবল তথাকথিত 'বিল্টিনস' ব্যবহার করি, যার অর্থ:
    • 'ক্লিয়ার', 'স্টিটি' বা 'টিপুট' এর মতো কোনও বাহ্যিক কল নেই
    • যে কারণে, আমরা প্রতিটি পদক্ষেপে পুরো পর্দাটি আবার চিত্রিত করি
    • শুধুমাত্র ব্যবহৃত বিল্টিনগুলি (ওরফে নেটিভ কমান্ড) হ'ল:
      • প্রতিধ্বনি, eval, যখন-লুপ, চলুন, বিরতি, পড়া, কেস, পরীক্ষা, সেট, শিফট, ওরফে, উত্স, উত্স
  • কোনও এলোমেলো নম্বর জেনারেটর (পিআরএনজি) নেই, তাই আমাদের নিজের তৈরি করতে হবে
  • একটি কীস্ট্রোক ব্লক পেয়েছে, সুতরাং আমাদের অন্য থ্রেড স্প্যান করতে হবে
    • অভিভাবক-কার্যে ইভেন্টটি পাওয়ার জন্য আমরা একটি টেম্পাইল (কুশ্রী!) ব্যবহার করি
  • সাপ নিজেই একটি তালিকা, যা সস্তা:
    • প্রতিটি উপাদান একটি (x, y) - টিপল
    • লেজটি খোলার অর্থ: তালিকাটি ১ দ্বারা স্থানান্তরিত করুন
    • একটি (নতুন) মাথা যুক্ত করার অর্থ: একটি স্ট্রিং যুক্ত করুন
  • গ্রিডটি অভ্যন্তরীণভাবে একটি অ্যারে, তবে শেল / শ এটি এটি জানে না:
    • আমরা বৈশ্বিক vars সহ একটি কুরুচিপূর্ণ ইভাল কল মাধ্যমে "অনুকরণ" অ্যারে (x, y)
  • এবং অবশেষে: আমরা অনেক মজা পেয়েছিলাম!
#!/bin/sh
alias J=do T=let E=echo D=done W=while\ let
p(){ eval A$1x$2=${3:-#};}
g(){ eval F="\${A$1x$2:- }";}
r(){
E $((1+(99*I)%$1))
}
X=9
Y=8
L="8 8 $X $Y"
I=41
W I-=1
J
p $I 1
p $I 21
p 1 $I
p 41 $I
D
p 3 3 :
>L
W I+=1
J
E -ne \\033[H
y=22
W y-=1
J
Z=
x=42
W x-=1
J
g $x $y
Z=$Z$F
D
E "$Z"
D
E $B
. ./L
case $D in
a)T X+=1;;d)T X-=1;;s)T Y-=1;;*)T Y+=1;;esac
g $X $Y
case $F in
\ |:)p $X $Y O
L="$L $X $Y"
case $F in
:)W I+=1
J
x=`r 39`
y=`r 19`
g $x $y
[ "$F" = \  ]&&{
p $x $y :
break
}
D
T B+=1;;*)set $L
p $1 $2 \ 
shift 2
L=$@;;esac;;*).;;
esac
D&
while read -sn1 K
J
E D=$K>L
D

এখানে চিত্র বর্ণনা লিখুন


এটি কি আসলে কাজ করে ? যদি সাপটি ডান দিকে চলে যায় এবং আপনি aএটি টিপেন তবে এটি বন্ধ হয়ে যায়। রহস্যময়।
gniourf_gniourf

হ্যাঁ, কারণ আপনি নিজেকে কামড়ান - এটি অবশ্যই IMHO হওয়া উচিত। আমরা এটি অভ্যন্তরীণভাবে আলোচনা করেছি এবং প্রত্যেকেই এতে একমত হয়।
বাসটিয়ান বিট্টোরফ

echo -nঅবশ্যই পোর্টেবল নয়। যদি প্রথম অপারেন্ডটি -n হয়, বা যদি কোনও অপারেন্ডে ব্যাকস্ল্যাশ ('\') অক্ষর থাকে তবে ফলাফলগুলি বাস্তবায়ন-সংজ্ঞায়িত হয়। কোনও সুইচ ছাড়াই আক্ষরিক পাঠ্য ব্যতীত অন্য কোনও কিছুর জন্য প্রতিধ্বনি ব্যবহারযোগ্য নয়। pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html
nyuszika7h

nyuszika7h: কোন ধারণা কীভাবে এটি সার্কিট করবেন?
বাস্তিয়ান বিটোরফ

nyuszika7h: আমি মূল 'ইকো-এন' কলটি সরিয়ে দেওয়ার একটি উপায় খুঁজে পেয়েছি - সুতরাং কেবল একটি কল বাকি আছে। এটি 'হোম-পজিশনে যান (0,0)' এর জন্য পালানোর সিকোয়েন্সটি বলছে
বাস্তিয়ান বিটোরফ

4

রুবি 1.9 / উইন্ডোজ কেবল / ( 354 337 355 346 বাইট)

require'Win32API';G=(W=Win32API).new g="crtdll","_getch",t=[],?I
B=(c=?#*39+h="#
#")+((S=' ')*38+h)*20+c;n=proc{c while B[c=rand(800)]!=S;B[c]=?*;S}
n[h=760];k={97=>-1,100=>1,119=>d=-41,115=>41}
(B[h]=?O;system'cls';$><<B<<$.;sleep 0.1
d=k[G.call]if W.new(g,"_kbhit",[],?I).call>0
t<<h;B[h]=?o;B[h+=d]==?*?B[h]=n[$.+=1]:B[t.shift]=S)while B[h]==S

উইন্ডোজ কনসোলে একটি 20x40 বোর্ডে খেলে। স্কোরটি বোর্ডের নীচে দেখানো হয়েছে। ব্যবহার করুন WASDসাপ, প্রস্থান অন্য কোন কী নিয়ন্ত্রণে (জোর করে!)। গতি নিয়ন্ত্রণ করতে লাইন 5 এর শেষে ঘুমের সময়টি সম্পাদনা করুন। (বা 10 টি অক্ষর সংরক্ষণ করুন এবং পুরোপুরি ঘুম সরিয়ে এটিকে প্রায় প্লে করতে পারবেন না!)

বোনাস বৈশিষ্ট্য: এলোমেলোভাবে শুরু করতে ব্যর্থ হয় (যখন সাপের অবস্থানে প্রাথমিক টুকরা তৈরি হয়)।

আমার একটি অ-ব্লক করা গেচারের অভাব ঘটাতে কাজ করতে 100 ডলার চর দরকার ছিল। দৃশ্যত রুবি ১.৯.৩ এ একটি "আইও / কনসোল" লাইব্রেরি অন্তর্ভুক্ত রয়েছে যা প্রায় অর্ধেক সংরক্ষণ করতে পারত। এবং এই সমাধানটি উইন্ডোজ নির্দিষ্ট। * নিক্স সিস্টেমে একই ধরণের জিনিস করার জন্য প্রকাশিত সমাধান রয়েছে, তবে আমি অক্ষর সংখ্যা গণনা করার জন্য তাদের পরীক্ষা করিনি।

সম্পাদনা:

আমি বুঝতে পেরেছি যে লেজটি কেবল খাওয়ার পরে বৃদ্ধি পায়, প্রতিটি পদক্ষেপের পরে নয়।

সম্পাদনা 2: (সম্ভবত) স্থির ক্র্যাশ সমস্যাটি, একটি খাদ্য আইটেমকে সীমাবদ্ধ রেখে 9 বাইট সংরক্ষণ করেছে।


আমি একসাথে একাধিক খাবার আইটেমের ধারণাটি পছন্দ করি, তবে এখানে একটি বড় সমস্যা রয়েছে: খেলোয়াড়ের সাথে লেজটি সরানো উচিত, আপনার সংগ্রহ করা প্রতিটি টুকরো খাবারের জন্য কেবল একটি চরিত্রের সাহায্যে বৃদ্ধি পাবে।
ব্লেজার

আমি মন্তব্যটি সংশোধন করার সময় কাজ করেছিলাম ... সেখানে যদি কেবল এক টুকরো থাকার কথা হয় তবে আমি 9.times{}9 টি অক্ষর সাশ্রয় করতে পারি remove
এশেলি

কেবলমাত্র প্রয়োজনটি হ'ল একবারে খাবারের 1 বা ততোধিক টুকরো থাকতে পারে, তাই হ্যাঁ আপনি একবারে এটি 1 টুকরো করে কিছু অক্ষর সংরক্ষণ করতে পারতেন
ব্লেজার

গেমটি এলোমেলোভাবে আমাকে ~ 140 পয়েন্টে ক্র্যাশ করেছে, কেন তা নিশ্চিত নয়। তবে অন্যথায় খুব সুন্দর
ব্লেজার

ক্র্যাশ স্থির করে দিয়েছে, আমার ধারণা। যদি এটি আবার ক্র্যাশ হয় তবে দয়া করে আমাকে রুবি ত্রুটি বার্তাটি জানান।
এশেলি

4

অ্যাপলসফট বেসিক - 478 (462)

এটি আমার প্রথম কোড গল্ফ ছিল, তবে এটি 1989 সালে ফিরে লেখা হয়েছিল, এবং এটি বেশিরভাগ সময় অনুরোধ অনুসারে সাপের খেলাটি বাস্তবায়িত করে (তবে খাবার ব্যতীত সাপগুলি ক্রমাগত বৃদ্ধি পায়, এবং এটি আসলে দুটি খেলোয়াড়, একজন নয়) কেবল দুটি লাইন ব্যবহার করে অ্যাপলসফট বেসিক।

ডাঃ ডাবস জার্নালে সেই সময় বেশ কয়েকটি দ্বি-লাইন প্রোগ্রামের প্রতিযোগিতা ছিল। এটিকে কীভাবে দুটি লাইনে ফিট করতে হবে তা নির্ধারণ করার জন্য আমি 6 মাস অতিবাহিত করেছি যার সীমা 255 বর্ণের (এবং কেবল একটি শাখা) রয়েছে

আরও তথ্য এখানে: http://davesource.com/Projects/SpeedWaller/

টাইপ করা প্রোগ্রামটি হুবহু দুটি লাইন:

1ONSCRN(X,Y)<>7ANDB<>0ANDSCRN(U,V)<>7GOTO2:HOME:GR:X=10:Y=20:U=30:V=Y:I=201:J=202:K=203:M=205:W=215:A=193:S=211:Z=218:O=1:Q=-1:P=49152:COLOR=7:HLIN0,39AT0:HLIN0,39AT39:VLIN0,39AT0:VLIN0,39AT39:VTAB22: ?"WASZ IJKM  "C:ONB=0GOTO2:CALL-678:RUN
2PLOTX,Y:PLOTU,V:B=PEEK(P):G=B<>ZANDB<>W:H=B<>AANDB<>S:O=G*(O*H+(B=S)-(B=A)):L=H*(L*G+(B=Z)-(B=W)):G=B<>IANDB<>M:H=B<>JANDB<>K:Q=G*(Q*H+(B=K)-(B=J)):R=H*(R*G+(B=M)-(B=I)):X=X+O:Y=Y+L:U=U+Q:V=V+R:FORN=1TO99:NEXT:C=C+1:VTAB22:HTAB12:?C:GOTO1

ফর্ম্যাট করার সময় তালিকাটি এরকম দেখাচ্ছে:

1 ONSCRN(X,Y)<>7 AND B<>0 AND SCRN(U,V) <> 7 GOTO 2: HOME : GR :
  X=10 : Y=20 : U=30 : V=Y : I=201 : J=202 : K=203 : M=205 : W=215 :
  A=193 : S=211 : Z=218 : O=1 : Q=-1 : P=49152 : COLOR=7 : HLIN 0,39
  AT 0 : HLIN 0,39 AT 39 : VLIN 0,39 AT 0 : VLIN 0,39 AT 39 : VTAB 22 :
  ? "WASZ IJKM  "C : ON B=0 GOTO 2 : CALL -678 : RUN
2 PLOT X,Y : PLOT U,V : B=PEEK(P) : G= B<>Z AND B<>W: H=B<>A AND B<>S :
  O=G*(O*H+(B=S)-(B=A)) : L=H*(L*G+(B=Z)-(B=W)) : G=B<>I AND B<>M :
  H=B<>J AND B<>K : Q=G*(Q*H+(B=K)-(B=J)) : R=H*(R*G+(B=M)-(B=I)) :
  X=X+O : Y=Y+L : U=U+Q : V=V+R : FOR N=1 TO 99 : NEXT : C=C+1 :
  VTAB 22 : HTAB 12 : ? C : GOTO 1

গেমটি আসলে দু'জন খেলোয়াড় এবং এতে পৃষ্ঠার নীচে "নির্দেশাবলীর" কীগুলি পাশাপাশি একটি কাউন্টার দেখানো থাকে যাতে আপনি দেখতে পাচ্ছেন যে আপনি কতগুলি পদক্ষেপ থেকে বেঁচে এসেছেন। এটি 478 টি অক্ষর, এর মধ্যে 16 টি নির্দেশাবলী এবং পাল্টা আউটপুট, সুতরাং 462 যদি আপনি সেগুলি শেভ করতে চান।


4

সি # .NET ফ্রেমওয়ার্ক 4.7.2 কনসোল ( 2,456 2,440 2,424 2,408 2,052 1,973 1,747 1,686 বাইটস)

এটি মজাদার ছিল, তবে আমার সত্যিই ভাবতে হয়েছিল যে ভেরিয়েবলগুলি কী ছিল, কারণ সেগুলি কেবল একটি অক্ষর।

using m=System.Console;using System;using System.Collections.Generic;using System.Threading;class s{static void Main(){m.CursorVisible=0>1;new s()._();}int l;Action<string> w=(x)=>m.Write(x);Action<int,int>n=(x,y)=>m.SetCursorPosition(x,y);(int x,int y)d,c,a;int h,u;List<(int x,int y)>p;void _(){while(1>0){f();h=25;u=25;p=new List<(int x,int y)>();l=0;d=(0,-1);c=(u/2,h/2);e();m.SetWindowSize(u+4,h+4);m.SetBufferSize(u+4,h+4);while(1>0){k();if(t())break;g();r();}f();m.SetWindowSize(u+4,h+6);m.SetBufferSize(u+4,h+6);n(1,h+3);w("        Game over,\n   press any key to retry.");f();m.ReadKey(1>0);m.Clear();}}private bool t(){if(c.x<0||c.y<0||c.x>=u||c.y>=h){r();n(c.x+2,c.y+2);w("X");return 1>0;}for(i=0;i<p.Count;i++){for(int j=0;j<i;j++){if(p[i].x==p[j].x&&p[i].y==p[j].y){r();n(c.x+2,c.y+2);w("X");return 1>0;}}}return 0>1;}private void e(){a=(z.Next(u),z.Next(h));l++;}void f(){while(m.KeyAvailable)m.ReadKey(1>0);}int i;void k(){var b=DateTime.Now;while((DateTime.Now-b).TotalMilliseconds<230)Thread.Sleep(10);if(!m.KeyAvailable)return;var a=m.ReadKey(1>0).Key;switch(a){case ConsoleKey.A:if(d.x==0)d=(-1,0);break;case ConsoleKey.W:if(d.y==0)d=(0,-1);break;case ConsoleKey.S:if(d.y==0)d=(0,1);break;case ConsoleKey.D:if(d.x==0)d=(1,0);break;}f();}void g(){c.x+=d.x;c.y+=d.y;p.Add((c.x,c.y));while(p.Count>l)p.RemoveAt(0);if(c.x==a.x&&c.y==a.y)e();}void r(){n(1,1);w("/");w(new string('-',u));w("\\");n(1,h+2);w("\\");w(new string('-',u));w("/");for(i=0;i<h;i++){n(1,i+2);w("|");n(u+2,i+2);w("|");}for(i=0;i<h;i++){for(int j=0;j<u;j++){n(i+2,j+2);w(" ");}}n(a.x+2,a.y+2);w("@");for(i=0;i<p.Count;i++){n(p[i].x+2,p[i].y+2);w("#");}n(2,0);w("Score:"+l);}Random z=new Random();}

কিছু স্ক্রিনশট:

10 এর স্কোর সহ সাপ ৪ টি স্কোর নিয়ে সাপটি বিধ্বস্ত হয়েছিল

বাইনারি: https://github.com/wooden-utensil/snakeCodeGolf/releases/tag/v1.0.0.0

গিটহাবের সংগ্রহশালা: https://github.com/wooden-utensil/snakeCodeGolf

চেঞ্জলগ: https://github.com/wooden-utensil/snakeCodeGolf/releases


1
Console.Write("Score:"+l);Console.WriteLine()->Console.WriteLine("Score:"+l)
স্টিফেন

1
আপনি কি হিসাবে tuples চেষ্টা করেছেন (int X,int Y)d; ...; d=(0,-1)? এটি বাইট সংরক্ষণ করতে পারে। আপনি এর Vector2 d;Vector2 c;Vector2 a;পরিবর্তে কেন করছেন তাও আমি দেখতে পাচ্ছি না Vector2 d,c,a। আমি মনে করি আপনি কনসোল.সেটকার্সারপজিশন ফাংশনটিকে একটি Action<...>একক-বর্ণের পরিবর্তনশীল হিসাবেও সঞ্চয় করতে পারেন । আপনি অপারেটরের সাথে ডেটটাইম বিয়োগ করতে পারেন। আপনি বিশ্বব্যাপী লুপ ভেরিয়েবলগুলিও ঘোষণা করতে পারেন এবং প্রয়োজনে কেবল ঘোষণা ছাড়াই শূন্য করে দিতে পারেন।
আমার সর্বনাম monicareinstate

1
[প্রস্তাবনা অবিরত] আপনি কীওয়ার্ডটি ব্যবহার না করে পরিবর্তে একটি পরিবর্তনশীল ব্যবহার 1>0বা সঞ্চয় করতে পারেন true। আপনি লুপগুলিতে গৌরবময় -> অপারেটরটি ব্যবহার করতে সক্ষম হতে পারেন। ইন DateTime b = DateTime.Nowঅংশ, bহতে পারে var। আপনি কিছু বাইট ব্যবহার করে বাঁচাতে সক্ষম হতে পারেনdynamic (প্রায়শই আপনাকে আলাদা-টাইপযুক্ত ঘোষণাগুলি মার্জ করতে দেয়)।
আমার সর্বনাম

1
m.write(String)এটির নিজস্ব এক-অক্ষরের দীর্ঘ ক্রিয়ায় টানলে সম্ভবত একটি টন সাশ্রয় হবে
Veskah

1
কয়েকটি ব্লক রয়েছে যা ব্যবহার করে b.widthএবং b.heightপ্রচুর পরিমাণে সম্ভবত আরও 1 টি চিঠিযুক্ত স্থানীয় ভেরায় সংরক্ষণ করা যেতে পারে
Veskah

3

পাইথন 3 - 644

from curses import *
import time
from collections import deque
from random import randrange as R
N,W,S,E=z=119,97,115,100
t=tuple
u=0,0
def m(s):
 a=lambda o,y,x:y.addch(o[0],o[1],x);q=lambda:(R(L-2),R(C-2));L,C=s.getmaxyx();curs_set(0);s.nodelay(1);s.border();s.refresh();r=newwin(L-2,C-2,1,1);n=deque();y,x=[L-2,0];d=N;n.append(u);c=N;p=q();a(p,r,N);a(u,s,48)
 while 1:
  if c in z:d=c
  if d==N:y-=1
  if d==S:y+=1
  if d==W:x-=1
  if d==E:x+=1
  l=n.pop()
  if (y,x) in n:return
  if (y,x)==p:p=q();a(p,r,N);n.append(l);s.addstr(0,0,str(len(n)))
  n.appendleft((y,x));a((y,x),r,S);a(l,r,32);r.refresh();time.sleep(.2);c=s.getch()
wrapper(m)

পরিষ্কার ছাড়েন না। টুকরা যদি সাপের উপরে উঠে যায় তবে অদৃশ্য হয়ে যেতে পারে।


1

বাশ (অনেকগুলি অক্ষর: সিএ 1522)

t=tput
tc="$t cup"
tr="$t rev"
ts="$t sgr0"
ox=5
oy=5
((w=$($t cols)-2-2*ox))
((h=$($t lines)-2-2*oy))
trap "$t rmcup
stty echo
echo 'Thanks for playing snake!'
" EXIT
$t smcup
$t civis
stty -echo
clear
printf -v hs %$((w+2))s
printf -v v "|%${w}s|"
$tc $oy $ox
printf %s ${hs// /_}
for((i=1;i<=h+1;++i)); do
$tc $((oy+i)) $ox
printf %s "$v"
done
$tc $((oy+h+2)) $ox
printf %s ${hs// /¯}
dx=0
dy=-1
hx=$((w/2))
hy=$((h-2))
l=2
xa=($hx $hx)
ya=($hy $((hy+1)))
$tr
for((i=0;i<${#xa[@]};++i)); do
$tc $((ya[i]+1+oy)) $((xa[i]+1+ox))
printf \ 
done
$ts
print_food() {
$tc $((fy+1+oy)) $((fx+1+ox))
printf "*"
}
nf() {
rf=1
while((rf))
do
rf=0
((fx=RANDOM%w))
((fy=RANDOM%h))
for ((i=0;i<${#ya[@]};++i))
do
if((ya[i]==fy&&xa[i]==fx))
then
rf=1
break
fi
done
done
print_food
}
nf
ps() {
s="SCORE: $l"
$tc $((oy-1)) $((ox+(w-${#s})/2))
printf "$s"
}
ps
while :
do
read -t 0.2 -s -n1 k
if (($?==0))
then
case $k in
w|W)((dy==0))&&{ dx=0;dy=-1;};;
a|A)((dx==0))&&{ dx=-1;dy=0;};;
s|S)((dy==0))&&{ dx=0;dy=1;};;
d|D)((dx==0))&&{ dx=1; dy=0;};;
q|Q)break;;
esac
fi
((hx=${xa[0]}+dx))
((hy=${ya[0]}+dy))
if((hx<0||hy<0||hx>w||hy>h))
then
go=1
break
fi
for((i=1;i<${#ya[@]}-1;++i))
do
if((hx==xa[i]&&hy==ya[i]))
then
go=1
break 2
fi
done
$tc $((ya[-1]+1+oy)) $((xa[-1]+1+ox))
printf \ 
$tr
$tc $((hy+1+oy)) $((hx+1+ox))
printf \ 
$ts
if((hx==fx&&hy==fy))
then
((++l))
ps
nf
else
ya=(${ya[@]::${#ya[@]}-1})
xa=(${xa[@]::${#xa[@]}-1})
fi
ya=($hy ${ya[@]})
xa=($hx ${xa[@]})
done
if((go))
then
$tc 3 3
echo GAME OVER
read -t 3 -s -n1
fi

স্ক্রিনশট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.