कंसोल / टर्मिनल में 'स्नेक' गेम को फिर से बनाएँ


25

खेल मजेदार हैं

यहाँ यह कोडगॉल्फ इतना मजेदार था कि मुझे जटिलता में इसी तरह के अन्य क्लासिक खेलों के लिए एक संस्करण बनाना पड़ा। पायथन में एक बुनियादी अंतरिक्ष आक्रमणकारी खेल बनाने का सबसे छोटा तरीका

इस बार, हालांकि, क्लासिक 'स्नेक' गेम को फिर से बनाने की कोशिश करें, जिसमें आप एक छोटे आकार के रूप में शुरू करते हैं, अपने स्कोर को बढ़ाने के लिए लगातार टुकड़ों को इकट्ठा करने के लिए आगे बढ़ते हैं। जब आप एक टुकड़ा इकट्ठा करते हैं, तो आपकी 'पूंछ' बढ़ती है, जो आपके द्वारा बनाए गए मार्ग का अनुसरण करती है। उद्देश्य अपनी खुद की पूंछ, या दीवारों में दुर्घटनाग्रस्त बिना सबसे लंबे समय तक चलना है

योग्यता:

  • आप, जो चरित्र पूंछ, दीवारें और आपके द्वारा एकत्र किए गए टुकड़े हैं वे सभी अलग-अलग वर्ण होने चाहिए
  • स्कोर के साथ एक HUD दिखाएं। आपके द्वारा एकत्र किए गए प्रत्येक टुकड़े के लिए स्कोर 1 अंक बढ़ जाता है
  • जब खिलाड़ी अपनी पूंछ या दीवार से टकराते हैं तो हार जाते हैं
  • एक टुकड़ा इकट्ठा होने के तुरंत बाद एक यादृच्छिक क्षेत्र में घूमता है, खेल की शुरुआत में उल्लेख करने के लिए नहीं
  • खेल की गति तब तक मायने नहीं रखती, जब तक यह सुसंगत है
  • 'कोशिकाएं' 2x1 वर्ण वाली होनी चाहिए, क्योंकि ब्लॉक वर्णों की ऊंचाई ~ 2 गुणा चौड़ाई 1x1 हो सकती है, क्योंकि 2x1 सिर्फ बदसूरत है और मैंने वास्तव में ऐसा नहीं सोचा था
  • दिशा बदलने की कुंजी awsdक्रमशः, बाएँ, ऊपर, नीचे, सही होनी चाहिए
  • शुरुआती दिशा हमेशा ऊपर होनी चाहिए
  • आपको दीवार के किनारों को दिखाना होगा। स्कोर दीवार को ओवरलैप कर सकता है

सबसे छोटा कोड जो उपरोक्त मानदंडों को पूरा करता है वह जीतता है। रचनात्मकता के लिए काल्पनिक बोनस अंक


भोजन करते समय साँप बढ़ने नहीं चाहिए?
बंद कर दिया

एचएम? "जब आप एक टुकड़ा इकट्ठा करते हैं, तो आपकी 'पूंछ' बढ़ती है, जो आपके द्वारा बनाए गए मार्ग का अनुसरण करती है।", हां, सांप बढ़ता है।
ब्लेज़र

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), लेकिन यह बहुत ज्यादा झिलमिलाते गया था, इसलिए मैं यह सांत्वना की तरह HTML में डाल दिया। यह इसके साथ काम करेगा:

<pre id=x>

इसके अलावा मैंने इसे पहले 2x1 कोशिकाओं के साथ लागू किया था, लेकिन यह सिर्फ 1x1 से भी बदतर था। हालांकि यह एक मामूली बदलाव होगा।

awsdकीबोर्ड पर कुंजियों का उपयोग करता है ।

अद्यतन करें:

मैं पूंछ खोज में सुधार करके और कुछ और जादू करके 512 (बिल्कुल 0x200) बाइट्स में कटौती करने में सक्षम था।

जब आपके टुकड़े में पूंछ आती है तो आपको 2 अंक मिलते हैं (यह एक विशेषता है)। जब साँप खुद को काटता है तो मैंने भी ओवरलैपिंग तय कर दी।


1
सुंदर! और आप सही हैं, यह 2x1 की तुलना में 1x1 के रूप में बेहतर दिखता है। एकमात्र चिंता जो मैं वास्तव में था, ऊपर और नीचे बाएँ और दाएँ की तुलना में तेज़ी से हो रहा था लेकिन यह बाधाओं को देखते हुए संभव है। सांत्वना में चमकती मैं इतना बुरा नहीं मानती (मेरे अंतरिक्ष आक्रमणकारियों कार्यक्रम देखें, इसकी काफी टिमटिमाती हुई), लेकिन मुझे लगता है कि एक सादा पाठ वेब पेज भी काम करता है! एक अर्हता हालांकि ... क्या ताज़ा करने की आवश्यकता के बिना पुनरारंभ करने का कोई तरीका है? :(
ब्लेज़र

साथ काम नहीं करता है awsd
नील

@ ब्लेज़र जो अधिक 13 अक्षर लेगा: - / ... और आपके पास वैसे भी F5 कुंजी है।
कॉपी करें

@ नील हाँ मैंने तीर कुंजियों का उपयोग किया लेकिन अब इसे ठीक कर दिया।
कॉपी करें

@ मुझे लगता है कि मैं इसे एक आवश्यकता नहीं बना था
ब्लेज़र

21

x86 मशीन कोड (128 बाइट्स)

मैंडलेब्रोट फ्रैक्टल जेनरेट करने के लिए मेरा प्रस्तुतिकरण बहुत पसंद आया , मैंने 128 बाइट्स में सांप के खेल के लिए एक ठेस लिखी। यह चुनौती की आवश्यकताओं को पूरी तरह से पूरा नहीं करता है (यह सही चलना शुरू होता है, सभी दीवारें खींची नहीं जाती हैं), लेकिन मैं इसे पोस्ट कर रहा हूं क्योंकि मुझे लगता है कि यह एक दिलचस्प और रचनात्मक समाधान है। स्कोर को दाईं ओर बाइनरी में दिखाया गया है, तीर कुंजियाँ गति की दिशा को नियंत्रित करती हैं, 'भोजन' को बेतरतीब ढंग से गिरा दिया जाता है, और यह समाप्त होता है यदि आप खुद को, दीवार, या स्क्रीन के किनारे पर मारते हैं।

निष्पादन योग्य और स्रोत कोड के लिए लिंक

स्क्रीनशॉट

इसके अलावा, पहले के बारे में टिप्पणी के बारे में कि क्या डॉक्सबॉक्स धोखा दे रहा है, मुझे लगता है कि जब तक यह एक पाठ-आधारित प्रदर्शन मोड में है, तब तक पूरी तरह से स्वीकार्य है, तब से यह सिर्फ डॉस टर्मिनल है।


DOSBox को कभी धोखा क्यों माना जाएगा? यह पूरी तरह से कानूनी मंच है।
dfeuer

9

16 बिट 8086

526 बाइट्स / 390 बाइट्स

एक बेस 64 डिकोडर का उपयोग करके इसे डिकोड करें और इसे "snake.com" कहें और फिर विंडोज कमांड प्रॉम्प्ट से निष्पादित करें। WinXP पर परीक्षण किया गया, आपको सही वीडियो मोड प्राप्त करने के लिए DosBox का उपयोग करने की आवश्यकता हो सकती है। नियंत्रण कुंजी 'ईडी' थी और बाहर निकलने के लिए जगह। प्रेस 'डब्ल्यू' शुरू करने के लिए।

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
@ ब्लेज़र: यह स्रोत कोड है - मैंने एक हेक्स संपादक का उपयोग करके मशीन कोड टाइप किया है - यह है कि मैं कैसे हूँ! ;-) DosBox चीज़ की ज़रूरत तभी होती है जब आपके वीडियो ड्राइवरों को मोड 13 ग्राफ़िक्स से परेशानी होती है (मेरा कार्ड इसके साथ ठीक है)। यह
एससीआई

"390-बाइट" संस्करण केवल 388 बाइट्स को डिकोड करता है और डॉक्सबॉक्स के तहत चलने पर लटका हुआ है। लगता है कि ट्रांसमिशन में कुछ खो गया होगा। :( फिर भी, अन्य दो संस्करण बेहद शांत हैं!
इल्मरी करोनें

क्या कोड का एक अन-गोल्ड संस्करण है? (इस भाषा को मैं नहीं जानता)
AL

1
@ n.1: कार्यक्रम 8086 मशीन कोड है, आप इसे डीबगर (D86) में लोड कर सकते हैं और कोड को लिखित रूप में देख सकते हैं, बिना लेबल के नाम।
स्किज़

6

शेल / श, 578 वर्ण

मैंने POSIX का अनुपालन करने की कोशिश की (जितना संभव हो उतना पोर्टेबल होना चाहिए और बश्मि से बचना चाहिए, यहां तक ​​कि यादृच्छिक-संख्या-जनरेटर की आवश्यकता / खरीद नहीं है)। आप इसे अपने मूल टर्मिनल में या एसएसएच-सत्र के माध्यम से खेल सकते हैं: 'डैश -c ./snake' के साथ चलाएं ~ ~ 2800 बाइट्स में एक अपुष्ट / पठनीय संस्करण भी है, जिसे यहाँ देखा जा सकता है

कुछ नोट: शेल-स्क्रिप्टिंग 8- गेम कोडिंग के लिए अनुकूल नहीं है)

  • निष्पक्ष होने के लिए, हमने केवल तथाकथित 'बिलिंस' का इस्तेमाल किया, जिसका अर्थ है:
    • 'स्पष्ट ’, or स्ट्टी’ या like ट्रप ’जैसे कार्यक्रमों की कोई बाहरी कॉल नहीं
    • उसकी वजह से, हम हर चाल पर पूरी स्क्रीन को फिर से बनाते हैं
    • केवल उपयोग किए गए बिलिन (उर्फ देशी कमांड) हैं:
      • इको, इवल, जबकि-लूप, लेट, ब्रेक, रीड, केस, टेस्ट, सेट, शिफ्ट, उर्फ, सोर्स
  • कोई यादृच्छिक संख्या जनरेटर (PRNG) नहीं है, इसलिए हमें अपना स्वयं का निर्माण करना होगा
  • एक कीस्ट्रोक ब्लॉक हो रहा है, इसलिए हमें एक और धागा स्पॉन करना होगा
    • माता-पिता के कार्य में घटना को प्राप्त करने के लिए हम एक अस्थायी (बदसूरत) का उपयोग करते हैं!
  • सांप अपने आप में एक सूची है, जो सस्ती है:
    • प्रत्येक तत्व एक (x, y) -tuple है
    • पूंछ को खोने का अर्थ है: सूची को 1 से स्थानांतरित करना
    • नया (नया) हेड जोड़ने का अर्थ है: एक तार को जोड़ना
  • ग्रिड आंतरिक रूप से एक सरणी है, लेकिन शेल / श को यह नहीं पता है:
    • हम वैश्विक संस्करणों के साथ एक बदसूरत eval- कॉल के माध्यम से "अनुकरण" सरणी (एक्स, वाई)
  • और अंत में: हमने बहुत मज़ा किया!
#!/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इसे रोकते हैं। अजीब।
गनीउरफ_गनीउरफ

हां, क्योंकि आप खुद को काटते हैं - यह 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 वर्णों की आवश्यकता थी। जाहिर तौर पर रूबी 1.9.3 में एक "io / कंसोल" लाइब्रेरी शामिल है, जो लगभग आधे लोगों को बचाती थी। और यह समाधान विंडोज विशिष्ट है। * Nix सिस्टम में एक ही प्रकार की चीज़ करने के लिए प्रकाशित समाधान हैं, लेकिन मैंने वर्ण गणना की तुलना करने के लिए उनका परीक्षण नहीं किया है।

संपादित करें:

18 बाइट्स जोड़ने के बाद मुझे एहसास हुआ कि पूंछ केवल खाने के बाद बढ़ती है, प्रत्येक चरण के बाद नहीं।

संपादित करें 2: (संभवतः) निश्चित दुर्घटना मुद्दा, एक खाद्य पदार्थ तक सीमित करके 9 बाइट्स को बचाया।


मुझे एक ही बार में कई खाद्य पदार्थों के विचार पसंद हैं, हालांकि एक बड़ी समस्या है: पूंछ को खिलाड़ी के साथ बढ़ना चाहिए, केवल आपके द्वारा एकत्र किए जाने वाले भोजन के प्रत्येक टुकड़े के लिए एक चरित्र से बढ़ रहा है।
ब्लेज़र

जब आप इसे ठीक करने पर काम कर रहे थे, तो आपने टिप्पणी जोड़ दी ... यदि केवल एक टुकड़ा होना चाहिए, तो मैं हटा सकता हूं 9.times{}, 9 वर्णों को बचा सकता हूं ।
एशेल्ली

केवल आवश्यकता यह है कि एक समय में 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 के स्कोर के साथ सांप 4 के स्कोर के साथ सांप दुर्घटनाग्रस्त हो गया

बाइनरी: https://github.com/wooden-utensil/snakeCodeGolf/releases/tag/vn.0.0.0

GitHub भंडार: 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। मुझे लगता है कि आप Console.SetCursorPosition फ़ंक्शन को Action<...>एकल-अक्षर चर के रूप में भी संग्रहीत कर सकते हैं । आप दिनांक-समय को ऑपरेटर के साथ घटा सकते हैं। आप विश्व स्तर पर लूप वेरिएबल्स की घोषणा कर सकते हैं और उन्हें बिना घोषित किए ही जरूरत पड़ने पर शून्य कर सकते हैं।
मेरा सर्वनाम

1
[सुझाव जारी रखें] आप उपयोग कर सकते हैं 1>0true कीवर्ड का उपयोग करने के बजाय एक चर में या स्टोर । आप लूप में शानदार -> ऑपरेटर का उपयोग करने में सक्षम हो सकते हैं। में DateTime b = DateTime.Nowहिस्सा है, bहो सकता है var। आप कुछ बाइट्स को बचाने में सक्षम हो सकते हैं या नहीं कर सकते हैं dynamic(अक्सर आपको अलग-अलग टाइप किए गए घोषणाओं को मर्ज करने देता है)।
मेरा सर्वनाम

1
m.write(String)यह एक पत्र लंबे समारोह में खींच रहा है शायद एक टन
Veskah

1
उपयोग करने वाले कुछ ब्लॉक भी हैं b.width और b.heightएक बहुत है कि शायद एक और 1 पत्र को बचाया जा सकता है नामित स्थानीय
संस्करण

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

स्क्रीनशॉट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.