सबसे छोटे कोड में पोंग


28

चुनौती सरल है। पोंग http://en.wikipedia.org/wiki/Pong के क्लासिक 2-प्लेयर गेम को पुन: पेश करने के लिए सबसे छोटा कोड संभव है । ग्राफिक्स और कार्यक्षमता का स्तर इस जावास्क्रिप्ट प्रदर्शन के लिए जितना संभव हो उतना करीब होना चाहिए http://codeincomplete.com/posts/2011/5/14/javascript_pong/demo.html (लेकिन अतिरिक्त विकल्पों के बिना आप बाईं ओर क्लिक कर सकते हैं या फ्रेम, एफपीएस आदि जानकारी नीचे दाईं ओर)।

हमेशा की तरह कोड को एक स्वतंत्र भाषा में (दोनों इंद्रियों में) लिखा जाना चाहिए और लिनक्स पर रन करने योग्य होना चाहिए। उपयोग की जाने वाली कोई भी लाइब्रेरी मुफ्त होनी चाहिए, आसानी से उपलब्ध हो सकती है और इस प्रतियोगिता के उद्देश्यों के लिए नहीं लिखी जानी चाहिए (और इसमें पहले से ही पोंग का एक कार्यशील संस्करण नहीं है!)।


ईमानदारी से, यह सवाल कोड गोल्फ के लिए थोड़ा मुश्किल है। पोंग के लिए गेंद भौतिकी बहुत जटिल है।
beary605

@ beary605, मुझे नहीं लगता कि गेंद भौतिकी बहुत जटिल है। मेरा समाधान जावास्क्रिप्ट प्रदर्शन के लिए 'जितना संभव हो उतना करीब' है, और भौतिकी काफी सरल है।
बूथबाई

बस संदर्भ के लिए कुछ अन्य [कोड-गोल्फ] हैं जो बहुत लंबे समय तक चलते हैं। एक भूलभुलैया गेम के लिए एक इंजन बनाएं , नॉट्स एंड क्रॉस (उर्फ टिक-टैक-टो) (दोनों अतिरिक्त प्रविष्टियों का उपयोग कर सकते हैं, जो डिफ़ॉल्ट रूप से "जीतना" पसंद करते हैं?), एक छोटा एचटीटीपी सर्वर , सेल्फ-इंटरप्रेटर इंटरप्रेटर , स्व- लिखें ? संकलन संकलक , संकलित regexes ...
dmckee

@felipa, क्या आप 'जितना संभव हो उतना करीब' को औपचारिक रूप दे सकते हैं? मुझे नहीं पता कि मेरा सीड सॉल्यूशन लीड में क्यों नहीं है।
बूथबी

जवाबों:


24

जावास्क्रिप्ट, 883 (+ 70 HTML)

c=document.getElementById('c').getContext('2d')
c.fillStyle="#FFF"
c.font="60px monospace"
w=s=1
p=q=a=b=0
m=n=190
x=300;y=235
u=-5;v=3
setInterval(function(){if(w&&!s)return;s=0
c.clearRect(0,0,640,480)
for(i=5;i<480;i+=20)c.fillRect(318,i,4,10)
m+=p;n+=q
m=m<0?0:m;m=m>380?380:m
n=n<0?0:n;n=n>380?380:n
x+=u;y+=v
if(y<=0){y=0;v=-v}
if(y>=470){y=470;v=-v}
if(x<=40&&x>=20&&y<m+110&&y>m-10){u=-u+0.2;v+=(y-m-45)/20}
if(x<=610&&x>=590&&y<n+110&&y>n-10){u=-u-0.2;v+=(y-n-45)/20}
if(x<-10){b++;x=360;y=235;u=5;w=1}
if(x>640){a++;x=280;y=235;u=-5;w=1}
c.fillText(a+" "+b,266,60)
c.fillRect(20,m,20,100)
c.fillRect(600,n,20,100)
c.fillRect(x,y,10,10)},30)
document.onkeydown=function(e){k=(e||window.event).keyCode;w=w?0:k=='27'?1:0;p=k=='65'?5:k=='81'?-5:p;q=k=='40'?5:k=='38'?-5:q;}
document.onkeyup=function(e){k=(e||window.event).keyCode;p=k=='65'||k=='81'?0:p;q=k=='38'||k=='40'?0:q}


/* Variable index:
a -> left player score
b -> right player score
c -> context
e -> event
i -> counter for dashed line
k -> keycode
m -> left paddle y
n -> right paddle y
p -> left paddle y velocity
q -> right paddle y velocity
s -> is start of game
u -> ball x velocity
v -> ball y velocity
w -> game is waiting (paused)
x -> ball x
y -> ball y
*/

स्क्रिप्ट को अंत <body>या बुलाया जा सकता है onLoad। इसे निम्नलिखित कैनवास तत्व की आवश्यकता है:

<canvas id="c"width="640"height="480"style="background:#000"></canvas>

प्लेयर 1 qऔर aकुंजी का उपयोग करता है , और खिलाड़ी 2 का उपयोग करता है pऔर lचाबियाँ। प्रेस escको थामने के लिए महत्वपूर्ण है और किसी भी कुंजी शुरू / जारी रखने के लिए।

आप इसे अपने ब्राउज़र में यहाँ खेल सकते हैं

मैं भौतिकी का उपयोग करने के लिए निश्चित नहीं था, इसलिए मैंने एक सरल प्रतिबिंब विधि के साथ शुरुआत की और फिर कुछ विविधता को जोड़ा और इसके साथ थोड़ा प्रयोग किया। Y दिशा में गेंद के वेग से प्रभावित होता है जहां आप गेंद को हिट करते हैं, इसलिए गेंद पर आपका कुछ नियंत्रण होता है। एक्स दिशा में गेंद का वेग धीरे-धीरे रैली में प्रत्येक हिट के साथ बढ़ता है।

मुझे संदेह है कि पुस्तकालयों के उपयोग से समाधान द्वारा इसे बहुत आसानी से पीटा जाएगा, लेकिन मुझे इसे सादे जावास्क्रिप्ट में बनाने में मज़ा आया।


2
यह वास्तव में अच्छा कार्यान्वयन है।
फेलिपा

1
थोड़ा और घूमा जा सकता है, मुझे पता है कि मैं यहाँ लगभग दो साल लेट हूँ। लेकिन आप 20नाम के एक चर को असाइन कर सकते हैं और एक gबाइट को बचा सकते हैं ।
जकार्इ

अरे, यह मुश्किल से एक कीबोर्ड पर खेलने के लिए है ...
मंद

38

सेड, ३५

डाक टिकट-स्टैड सेड मेडिटेशन के साथ बार को थोड़ा ऊपर उठाएं।

s/> / >/
s/ </< /
s/0</0>/
s/>1/<1/

ध्यान दो कंप्यूटरों पर stdin / stdout का आनंद लेता है, जरूरी नहीं कि एक नेटवर्क से जुड़ा हो। ध्यान राज्य में शुरू होता है

0         <       1

बाईं ओर गुरु शून्य और दाईं ओर एक। कोण कोष्ठक बाईं और दाईं ओर चलता है, और यदि कोई गुरु उनके पक्ष में आने पर कर्सर से संपर्क करने के लिए उनकी संख्या को बढ़ाता है, तो उनका स्कोर एक से बढ़ जाता है, और वे खुशी के साथ अभ्यस्त हो जाते हैं।

उपरोक्त अवस्था को टाइप करके ध्यान शुरू किया जाता है sed -f medi.sed, और कंप्यूटर अगले राज्य के साथ प्रतिक्रिया करता है। कर्तव्यपरायण गुरु उस स्थिति को ध्यान में रखते हैं, जिसे पढ़कर वे अगली कुंजी को दबाएंगे, दोनों गुरु enterएक ही समय में भविष्य की पवित्र कुंजी को दबाएंगे । कर्तव्यपरायण कंप्यूटर अगले राज्य के साथ उत्तर देता है। यह, बदले में, जोर से पढ़ा जाता है जबकि पिछले के साथ एकरूप में टाइप किया जाता है। भविष्य में तब तक आगे बढ़ते रहें जब तक असीम आनंद की प्राप्ति न हो जाए।

एक चुनौती के इच्छुक गुरु 'टर्बो' मोड खेल सकते हैं, जिसमें गुरु कंप्यूटर की अगली स्थिति के बारे में सहयोग करने का प्रयास करते हैं, और वर्तमान स्थिति के बजाय इसे शीघ्रता से टाइप करते हैं। गुरुओं को भविष्य में प्रवेश करने से पहले अपनी भविष्यवाणियों के बीच समझौते को सत्यापित करने की बुद्धि होगी।


23
यार ... मैंने अभी क्या पढ़ा?
श्रीजेंडर

9
@ मर्जैंडर व्यापक चिंतन के माध्यम से ही ध्यान का ज्ञान प्रकट किया जा सकता है। यह चिंतन कार्यक्रम के निष्पादन के माध्यम से सहायता प्राप्त है।
18

15

पायथन ( pygame के साथ ) 650 बाइट्स

विशेषताएं

  • 1 और 2 खिलाड़ी मोड - जब खेल शुरू होता है, तो 11 खिलाड़ी या 22 खिलाड़ियों के लिए दबाएं । खेल तब तक शुरू नहीं होगा जब तक इनमें से एक कुंजी दबाया नहीं जाता।
  • गेंद की गति में वृद्धि - प्रत्येक वॉली, गेंद की गति इतनी बढ़ जाती है कि 10 वोल्ट के बाद यह लगभग 50% बढ़ गया है, 20 के बाद यह उससे 50% तेज होगा, आदि।
  • वियरेबल बॉल डिफ्लेक्शन - बॉल डिफ्लेक्शन दो कारकों पर आधारित है: पैडल का कौन सा भाग स्ट्राइक करता है, और पैडल प्रभाव पर चल रहा है या नहीं। यदि गेंद एक छोर के पास पैडल से टकराती है, तो यह बीच से ज्यादा जोर से डिफ्लेक्ट किया जाएगा, अगर यह बीच के करीब से टकराता है (लगभग मानो यह एक घुमावदार सतह थी)। इसके अतिरिक्त, यदि पैडल गति में है, तो पैडल की गति को विक्षेपण में जोड़ा जाता है। सबसे मजबूत विक्षेपण प्राप्त करने के लिए, गेंद को पैडल के अंत के पास स्ट्राइक करना होगा, और पैडल को उसी छोर की ओर गति में होना चाहिए। यह अटारी 2600 के लिए मूल पोंग के समान है।
  • रोकें - बार को दबाकर किसी भी समय खेल को रोका जा सकता है Space। प्ले दूसरी बार स्पेस बार दबाने पर फिर से शुरू होगा।
  • नियंत्रण - उदाहरण के साथ, खिलाड़ी 1 चाल Qऔर Aकुंजियों के साथ चलता है , और खिलाड़ी 2 चाल चलता है Pऔर L

अंतिम नोट के रूप में, मैं यह अनुरोध करना चाहूंगा कि इस समाधान को विभिन्न कारणों से स्वीकृत उत्तर के रूप में नहीं चुना जाना चाहिए।

from pygame import*
init();d=display;s=d.set_mode((640,480))
g=p=16;j=q=80;x=y=200;o=t=h=v=1;z=m=n=0;w=[255]*3
while s.fill(time.wait(3)):
 event.get();k=key.get_pressed();t^=o*k[32];o=1-k[32];z=z or-k[49]-k[50]*2;e=k[113]-k[97];f=[k[112]-k[108],(h>0)*cmp(y,q-32)][z];a=p<g;b=q-[y,x][a]
 if p%608<g:m,n,p,h,v=[m+1-a,m,n+a,n,g+a*592,p,1-a*2,h/-.96,1,b/32.+~[f,e][a]][-g<b<j::2]
 for r in[(0,x,g,j),(624,y,g,j),(p,q,g,g)]+[(316,i*31,8,15)for i in range(g)]:draw.rect(s,w,r)
 if z*t:v*=(0<q<464)*2-1;x-=(0<x-e<400)*e/.6;y-=(0<y-f<400)*f/.6;p+=h;q+=v
 c=font.SysFont('monospace',j,1).render('%3d %%-3d'%m%n,1,w);s.blit(c,(320-c.get_width()/2,0));d.flip()

नमूना स्क्रीन पर कब्जा:

नोट: स्कोर के लिए उपयोग किया जाने वाला फ़ॉन्ट सिस्टम से सिस्टम में भिन्न हो सकता है।


स्कोर मेरे लिए बाएं आधे हिस्से में
दिखता है

@aditsu आप लिनक्स के तहत काम कर रहे हैं? मैं देखूंगा कि क्या मुझे कोई ऐसा विकल्प मिल सकता है जो चयनित फ़ॉन्ट चेहरे की परवाह किए बिना काम करता है। विक्षेपण के पीछे का विचार यह है कि पैडल हिलने ( 1.67 ) की तुलना में तेज गति से गेंद को अधिकतम गति ( मेरे पैमाने पर अधिकतम 2.5 ) पर रोकना संभव होगा । यह तभी संभव है जब आप इसे कुछ 'स्पिन' देंगे। यदि गेंद के प्रहार के समय पैडल नहीं चल रहा है, तो अधिकतम वेग 1.5 होगा ।
प्रिमो

हाँ, मैं लिनक्स का उपयोग कर रहा हूँ। मुझे यह अजीब लगता है कि पैडल मारने के बाद गेंद वास्तव में "बैक" (ऊपर या नीचे) जा सकती है, एक ही दिशा में (शायद एक अलग कोण पर) जारी रखने के बजाय। लेकिन शायद अटारी संस्करण ने ऐसा किया है, मुझे नहीं पता।
aditsu

@aditsu यह कुछ बाइट्स की लागत है, लेकिन मेरा मानना ​​है कि चुने हुए फ़ॉन्ट (भले ही यह मोनोस्पेस है) की परवाह किए बिना स्कोर केंद्रित होना चाहिए। अगर यह आप के लिए काम करता है तो मुझे बतलाएगा। और हाँ, विक्षेपण अटारी संस्करण के समान (यद्यपि एक चिकनी वितरण) है, जिससे मैं परिचित था। यदि आप पैडल को एक (उत्तल) घुमावदार सतह (एयर हॉकी पैडल की तरह) की कल्पना करते हैं, तो मुझे लगता है कि यह अधिक सहज होना चाहिए।
प्रिमो

हाँ यह अब केंद्रित है
aditsu

8

HTML और जावास्क्रिप्ट (2 ले) - 525

चूंकि ओपी को "जितना संभव हो उतना करीब" भाग के बारे में परवाह नहीं थी, यहां एक वैकल्पिक समाधान है जिसे मैंने निर्दयता से सरलीकृत, छीन लिया और गोल्फ किया। क्यू / ए और पी / एल खेलने के लिए, लेकिन हर दूसरे कुंजी का भी प्रभाव पड़ता है। फिर से, कोड पूरी तरह से स्व-निहित है और मैंने इसे लिनक्स पर क्रोमियम 25 में परीक्षण किया। यदि आप ग्राफिक्स की गुणवत्ता / गेमप्ले के छोटे कीड़े या अधिक गिरावट को स्वीकार कर सकते हैं तो मैं इसे और भी आगे बढ़ा सकता हूं।

<canvas id=c><script>C=c.getContext('2d');f=C.fillRect.bind(C)
S=[-1,I=J=0];A=B=210;X=Y=1
function g(n){++S[n];N=Math.random(M=n*613+9)*471}D=document
D.onkeydown=D.onkeyup=function(e){d=!!e.type[5];k=e.keyCode
k&1?I=k&16?d:-d:J=k&4?-d:d}
g(0);setInterval(function(){A-=A<I|A>420+I?0:I
B-=B<J|B>420+J?0:J
M+=X;N+=Y
N<0|N>471?Y=-Y:0
M==622&N>B&N<B+51|M==9&N>A&N<A+51?X=-X:M>630?g(0):M||g(1)
f(0,0,c.width=640,c.height=480)
C.fillStyle='tan';C.font='4em x';C.fillText(S,280,60)
f(0,A,9,60);f(631,B,9,60);f(M,N,9,9)},6)</script>

धन्यवाद शमीद


मैं आपत्ति नहीं समझता। जहाँ तक मैं याद कर सकता हूँ, 715 बाइट संस्करण (इस पोस्ट से 3 घंटे पहले संपादित) लगभग पांग के मूल संस्करण के समान है जो मेरे अटारी 2600 के लिए था।
प्राइमो

@primo मैं मान रहा हूं कि आप मेरे निहित दावे के बारे में बात कर रहे हैं कि आपका समाधान "जितना संभव हो उतना करीब" मानदंड को पूरा नहीं करता है। ठीक है, ओपी ने अटारी 2600 संस्करण का उल्लेख नहीं किया, लेकिन एक विशिष्ट जावास्क्रिप्ट कार्यान्वयन जिसे उन्होंने लिंक किया था। और पहली नजर में आपके कोड में 2 स्पष्ट अंतर हैं: कोई कंप्यूटर प्लेयर और कोई "7-सेगमेंट" स्कोर डिस्प्ले नहीं। "यांत्रिकी" में संभवतः बहुत अधिक अंतर हैं। अगर ये चीजें महत्वपूर्ण नहीं हैं, तो मुझे लगता है कि यह समाधान भी मान्य होना चाहिए।
एडिट्स

यह मेरी गलती है। मेरा वास्तव में मतलब था "जितना संभव हो उतना करीब" इसलिए आपका पहला समाधान अब तक का सबसे अच्छा है।
फेलिपा

आप निकाल सकते हैं c=window.c। आप स्वयं को एक वैश्विक चर सौंप रहे हैं।
श्मिट

आप 1 से अधिक चरित्र को बचा सकते ++S[n]हैं.random(++S[n])
Shmiddty

5

HTML और जावास्क्रिप्ट - 1663

मेरे बेहतर फैसले के खिलाफ, मैंने डेमो से वास्तविक कोड को गोल्फ करने का पागल तरीका अपनाया। मैंने कुछ सुविधाओं और इंटरफ़ेस तत्वों को हटा दिया है, लेकिन आम तौर पर यह मानव खिलाड़ियों, Q / A और P / L की संख्या को चुनने के लिए 0, 1 या 2 के समान कार्य करता है।

जब तक मैंने कुछ गलतियाँ नहीं कीं, गेमप्ले समान होना चाहिए, पिक्सेल के लिए पिक्सेल और मिलीसेकंड के लिए मिलीसेकंड, 640 * 480 पर मूल के लिए (संकेत: ब्राउज़र विंडो का आकार बदलना डेमो में गेम का आकार बदलता है)। यह सिर्फ निर्देश नहीं देता है, विजेता की घोषणा नहीं करता है और esc को संभालता नहीं है।

कोड पूरी तरह से स्व-निहित है और मैंने इसे लिनक्स पर क्रोमियम 25 में परीक्षण किया है। फ़ायरफ़ॉक्स इसे बहुत पसंद नहीं करता है।

<body bgcolor=0><canvas id=c height=480><script>R=Math.random
C=c.getContext('2d');f=C.fillRect.bind(C)
S=[l=G=I=J=K=L=0,0];r=17;u=463;o=24;q=12;z=10;s=640;v=36
function T(z,t,u,v){P=0;if(e=v*E-u*F){a=(u*t-v*z)/e;b=(E*t-F*z)/e
a<0|a>1|b<0|b>1?0:P={x:M+a*E,y:N+a*F,d:u,s:0,X:X,Y:Y}}}function
i(p,q,h){T(p-22*(E<0),q,0,h)
P?0:T(p,q-h*(F<0),22,0)}function
U(p){if(p.a)if(M<p.x&X<0|M>p.x+q&X>0)p.u=0
else{P=p.P;if(P&&P.X*X>0&P.Y*Y>0&P.s<p.l/z)P.s+=t
else{E=X*z;F=Y*z;i(M-p.x+5,s*q,s*o)
if(p.P=P){y=P.y;while(y<r|y>u)y=y<r?34-y:y>u?u+u-y:y
P.y=y+R(e=(p.l+2)*(X<0?M-p.x-q:p.x-M)/64)*2*e-e}}P?p.u=P.y<p.y+25?1:P.y>p.y+35?-1:0:0}y=p.y-p.u*t*198
p.y=y<q?q:y>408?408:y}function
W(n,x){a=9.6;b=[~8,3,62,31,75,93,~2,7,-1,u][n]
b&4&&f(x,o,v,a);b&64&&f(x,o,a,o)
b&2&&f(x+v,o,-a,o);b&8&&f(x,43.2,v,a)
b&32&&f(x,48,a,o);b&1&&f(x+v,48,-a,o)
b&16&&f(x,72,v,-a)}A={u:0,x:0,y:210};B={u:0,x:628,y:210}
function g(n){if(++S[n]>8)G=A.a=B.a=0
else{N=R(M=n?635:5)*446+r;Y=157.5;X=n?-Y:Y
A.l=z+S[0]-S[1];B.l=20-A.l}}D=document
D.onkeydown=D.onkeyup=function(e){d=!!e.type[5]
k=e.keyCode-45;if(k>2&k<6&d&!G){G=S=[-1,0];A.a=k<4;B.a=k<5
g(0)}k^31?k^35?k^20?k^v?0:I=d:J=d:K=d:L=d
A.a?0:A.u=I-J;B.a?0:B.u=K-L}
setInterval(function(){t=new Date()/1000-l;l+=t;U(A);U(B)
if(G){E=t*X+4*t*t;F=t*Y+4*t*t
x=M+E;y=N+F;m=X+t*(X>0?8:-8);n=Y+t*(Y>0?8:-8)
if(n>0&y>u){y=u;n=-n}if(n<0&y<r){y=r;n=-n}p=m<0?A:B
i(M-p.x+5,N-p.y+5,70)
if(P){if(P.d){y=P.y;n=-n}else{x=P.x;m=-m}n*=n*p.u<0?.5:p.u?1.5:1}M=x;N=y
X=m;Y=n;M>645?g(0):M<-5&&g(1)}c.width=s;C.fillStyle='#fff'
f(0,0,s,q);f(0,468,s,q);for(j=o;j--;)f(314,6+o*j,q,q)
W(S[0],266.5);W(S[1],338.5)
f(0,A.y,q,60);f(s,B.y,-q,60);G&&f(M-5,N-5,z,z)},50/3)</script>

सुधार के लिए कुछ श्रेमी को श्रेय


4

प्रसंस्करण, 487 वर्ण

int a=320,b=240,c=2,d=2,e=0,f=0,g=0,h=0,i=15,j=80,k=640,
l=160,m;void setup(){size(k,b*2);}void draw(){background
(0);if(keyPressed){if(key=='q'&&g>0)g-=i;if(key=='a'&&g<
j*5)g+=i;if(key=='o'&&h>0)h-=i;if(key=='l'&&h<j*5)h+=i;}
rect(0,g,i,j);for(m=0;m<k;m+=30)rect(312,m,i,i);rect(a,b
,i,i);rect(625,h,i,j);a+=c;b+=d;c*=a<i&&(b>g&&b+i<g+j)||
a>610&&(b>h&&b+i<h+j)?-1:1;d*=b<0||b>=465?-1:1;if(a<0){f
++;a=0;b=240;c=2;}if(a>k){e++;a=625;b=240;c=-2;}textSize
(j);text(e,l,j);text(f,3*l,j);}

नमूना स्क्रीनशॉट:

यहाँ छवि विवरण दर्ज करें

इस कोड को संक्षिप्तता को ध्यान में रखते हुए बनाया गया था, इसलिए यह बहुत छोटी गाड़ी है (गेंद कभी-कभी पैडल के माध्यम से जाती है, या इसके चारों ओर लपेटती है)। नियंत्रण खिलाड़ी के लिए क्यू / ए और खिलाड़ी 2 के लिए ओ / एल हैं।


1
एक खेल के रूप में आपका पोंग संस्करण भी काफी अनुचित लगता है, क्योंकि प्रति फ्रेम केवल एक खिलाड़ी की चाबियाँ पंजीकृत होती हैं: पी
जोनाथन फ्रीच

2

C # - 1283 वर्ण

यह थोड़ा और अधिक गोल्फ हो सकता है, लेकिन यहाँ यह है।

using System;using System.Drawing;using System.Runtime.InteropServices;using System.Windows.Forms;using r=System.Drawing.RectangleF;namespace f{public partial class f:Form{public f(){InitializeComponent();}private void f_Load(object sender,EventArgs e){var t=this;var s=new r(0,0,300,300);var q=new r(0,0,15,50);var o=new r(0,0,15,50);var x=new PointF(150,150);var v=.06F;var h=v;var b=new r(x.X,x.Y,15,15);var p1=0;var p2=0;var p=new PictureBox{Size=t.Size,Location=new Point(0,0)};t.Controls.Add(p);p.Paint+=(wh,n)=>{var g=n.Graphics;Action<Brush,r>f=g.FillRectangle;var k=new SolidBrush(Color.Black);var w=new SolidBrush(Color.White);var d=new byte[256];GetKeyboardState(d);var l=q.Location;var _1=.1F;q.Location=new PointF(0,d[90]>1?l.Y+_1:d[81]>1?l.Y-_1:l.Y);l=o.Location;o.Location=new PointF(269,d[77]>1?l.Y+_1:d[79]>1?l.Y-_1:l.Y);f(k,s);f(w,q);f(w,o);Func<r,bool>i=b.IntersectsWith;h=i(q)||i(o)?-h:h;v=b.Top<1||b.Bottom>t.Height-30?-v:v;b.Offset(h,v);if(b.Left<0){p2++;b.Location=x;}if(b.Right>290){p1++;b.Location=x;}f(w,b);for(int j=0;j<19;)f(w,new r(140,(j+(j++%2))*15,10,10));var a=new Font("Arial",20);g.DrawString(p1.ToString(),a,w,100,12);g.DrawString(p2.ToString(),a,w,170,12);p.Invalidate();};}[DllImport("user32.dll")]static extern bool GetKeyboardState(byte[]s);}}

संपादित करें: एक मुफ्त, linux-runnable भाषा के लिए आवश्यकता नहीं देखी गई ...


2

Tcl / Tk , 932 बाइट्स

इंटरैक्टिव शेल में चलाया जाना चाहिए

gri [can .c -w 1024 -he 768 -bg #000]
proc A {} {set ::v [expr (int(rand()*36)+1)*20]}
proc R {C t\ X} {.c cr r $C -f #aaa -t $t}
proc I {} {incr ::v 20}
time {R "504 [I] 520 [I]"} 18
R "0 0 1024 20"
R "0 748 1024 768"
R "0 340 20 440" b
R "1004 340 1024 440" B
R "40 [A] 60 [I]" P
lmap n 4\ 5 T F\ S {.c cr t ${n}62 60 -ta $T -te 0 -fi #aaa -font {"" 56}}
proc C t\ n {lindex [.c coo $t] $n}
lmap {a b c d e} {q b 1 >20 -20 a b 3 <740 20 p B 1 >20 -20 l B 3 <740 20} {bind . $a "if \[C $b $c]$d {.c move $b 0 $e}"}
lassign {0 0 20 20} F S y x
proc M {} {lmap {_ a b c d e f} {0 <40 b 20 S 960 980 2 >984 B -20 F 80 100} {if [C P $_]$a {if [C P 1]>=[C $b 1]&&[C P 3]<=[C $b 3] {bell
set ::x $c} {.c itemco $d -te [incr ::$d]
if \$::$d>8 {tk_messageBox -message WINNER!
lmap T F\ S {.c itemco $T -te [set ::$T 0]}}
.c coo P $e [A] $f [I]}}}
.c move P $::x [set ::y [expr [C P 1]<40?20:[C P 3]>727?-20:$::y]]
after 99 M}
M
focus -f .

ध्यान दें:

 #There is an Enter at the end

पोंग का सिर्फ एक बहुत ही न्यूनतम संस्करण, जहां गेंद केवल विकर्ण कोणों में चलती है और हमेशा एक ही वेग होती है।

यहाँ छवि विवरण दर्ज करें


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