Pong ในรหัสที่สั้นที่สุด


28

ความท้าทายนั้นง่าย ให้รหัสที่สั้นที่สุดที่เป็นไปได้ในการทำซ้ำเกมคลาสสิกผู้เล่น 2 คนของพงษ์http://en.wikipedia.org/wiki/Pong ระดับของกราฟิกและฟังก์ชันการทำงานควรใกล้เคียงกับการสาธิตจาวาสคริปต์นี้มากที่สุดhttp://codeincomplete.com/posts/2011/5/14/javascript_pong/demo.html (แต่ไม่มีตัวเลือกเพิ่มเติม) คุณสามารถคลิกที่ด้านซ้าย หรือข้อมูลเฟรมเฟรมต่อวินาทีเป็นต้นที่ด้านล่างขวา)

เช่นเคยรหัสจะต้องเขียนในภาษาฟรี (ทั้งความรู้สึก) และควรจะทำงานได้บน linux ห้องสมุดใด ๆ ที่ใช้ต้องเป็นอิสระพร้อมใช้งานง่ายและไม่ต้องเขียนเพื่อจุดประสงค์ของการแข่งขันนี้ (และยังไม่มี Pong เวอร์ชันที่ใช้งานได้)


สุจริตคำถามนี้ยากเกินไปสำหรับการเล่นกอล์ฟ ฟิสิกส์ของลูกปิงปองค่อนข้างซับซ้อน
beary605

@ beary605 ฉันไม่คิดว่าฟิสิกส์บอลซับซ้อนเกินไป โซลูชันของฉันคือ 'ใกล้เคียงที่สุด' สำหรับการสาธิตจาวาสคริปต์และฟิสิกส์ค่อนข้างง่าย
บูธโดย

เพื่อการอ้างอิงมี [code-golf] อื่น ๆ ที่วิ่งไปได้ค่อนข้างนาน สร้างเครื่องยนต์สำหรับการเล่นเกมเขาวงกต , เอกซ์และกากบาท (aka โอเอกซ์) (ทั้งสามารถใช้รายการเพิ่มเติมที่ชอบที่จะ "ชนะ" โดยเริ่มต้น?) เขียนเซิร์ฟเวอร์ HTTP ขนาดเล็ก , Self-ล่ามแปลเอกสาร , ตนเอง คอมไพเลอร์คอมไพล์ , คอมไพล์ Regexes ...
dmckee

@felipa คุณช่วย 'ปิดให้มากที่สุด' ได้ไหม ฉันไม่รู้ว่าทำไมการแก้ปัญหาของฉันจึงไม่ได้เกิดขึ้น
บูธโดย

คำตอบ:


24

Javascript, 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 ได้รับผลกระทบจากตำแหน่งบนไม้ตีที่คุณตีลูกดังนั้นคุณจึงสามารถควบคุมตำแหน่งของลูกบอลได้ ความเร็วของลูกบอลในทิศทาง x เพิ่มขึ้นอย่างช้าๆเมื่อตีแต่ละครั้งในการชุมนุม

ฉันสงสัยว่ามันจะถูกเอาชนะได้ง่ายด้วยวิธีแก้ปัญหาโดยใช้ห้องสมุด แต่ฉันสนุกที่จะทำมันด้วยจาวาสคริปต์ธรรมดา


2
เป็นการใช้งานที่ดีจริงๆ
felipa

1
น่าจะเล่นกอล์ฟเพิ่มอีกสักหน่อยฉันรู้ว่าฉันดึกประมาณสองปีที่นี่ แต่คุณสามารถกำหนดให้20กับตัวแปรที่ชื่อว่าgและบันทึกหนึ่งไบต์ที่เลวร้ายได้
Zacharý

ประณามมันเป็นเรื่องยากที่จะเล่นบนแป้นพิมพ์ AZERTY ...
สลัว

38

sed, 35

ยกระดับขึ้นเล็กน้อยด้วยการทำสมาธิแบบประทับไปรษณีย์

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

การทำสมาธิมีความสุขใน stdin / stdout บนคอมพิวเตอร์สองเครื่องไม่จำเป็นต้องเชื่อมต่อกับเครือข่าย การทำสมาธิเริ่มขึ้นในรัฐ

0         <       1

ด้วยกูรูศูนย์ทางซ้ายและอีกอันอยู่ทางขวา ตัวยึดมุมเลื่อนไปทางซ้ายและขวาและหากกูรูทำการเคลื่อนที่จำนวนของพวกเขาเพื่อติดต่อเคอร์เซอร์เมื่อมันมาถึงด้านข้างของพวกเขาคะแนนของพวกเขาจะเพิ่มขึ้นทีละคน

การทำสมาธิเริ่มต้นด้วยการพิมพ์สถานะด้านบนลงsed -f medi.sedและคอมพิวเตอร์จะตอบกลับด้วยสถานะถัดไป ปรมาจารย์ที่เคารพนับถือประเภทที่กล่าวถึงการทำสมาธิอ่านออกเสียงกุญแจถัดไปที่พวกเขาจะกดด้วยปรมาจารย์ทั้งสองกดปุ่มศักดิ์สิทธิ์ไปสู่enterอนาคตในเวลาเดียวกัน คอมพิวเตอร์ตามหน้าที่ตอบกลับด้วยสถานะถัดไป ในทางกลับกันจะอ่านออกเสียงในขณะที่พิมพ์พร้อมเพรียงเช่นเดียวกับที่ผ่านมา ก้าวต่อไปสู่อนาคตจนกว่าความสุขจะเกิดขึ้น

ปรมาจารย์ที่ต้องการความท้าทายอาจเล่นโหมด 'เทอร์โบ' ซึ่งผู้เชี่ยวชาญจะพยายามทำนายสถานะถัดไปของคอมพิวเตอร์และพิมพ์ลงในพรอมต์แทนที่จะเป็นสถานะปัจจุบัน ปรมาจารย์จะมีสติปัญญาในการตรวจสอบข้อตกลงระหว่างการคาดการณ์ก่อนที่จะเข้าสู่อนาคต


23
เพื่อน ... ฉันเพิ่งอ่านอะไร
MrZander

9
@MrZander เฉพาะการไตร่ตรองอย่างถี่ถ้วนเท่านั้นที่อาจเปิดเผยภูมิปัญญาของการทำสมาธิ การทำสมาธินี้ได้รับความช่วยเหลือที่ดีที่สุดผ่านการดำเนินการของโปรแกรม
บูธตาม

15

Python (มีpygame ) 650 ไบต์

คุณสมบัติ

  • โหมดผู้เล่น 1 และ 2 - เมื่อเริ่มเกมให้กด1สำหรับผู้เล่น 1 คนหรือ2สำหรับผู้เล่น 2 คน เกมจะไม่เริ่มจนกว่าจะมีการกดปุ่มใดปุ่มหนึ่งเหล่านี้
  • การเพิ่มความเร็วของลูกกอล์ฟ - แต่ละวอลเลย์ความเร็วของลูกบอลจะเพิ่มขึ้นดังนั้นหลังจาก 10 ก้องมันเพิ่มขึ้นประมาณ 50% และ 20 หลังจากนั้นจะเร็วกว่านั้น 50% เป็นต้น
  • การเบี่ยงเบนลูกบอลแบบแปรผัน - การโก่งตัวของลูกบอลขึ้นอยู่กับปัจจัยสองประการ: ส่วนใดของไม้ตีที่มันกระทบและไม่ว่าไม้พายจะเคลื่อนที่เมื่อกระทบหรือไม่ ถ้าลูกบอลกระทบไม้พายใกล้กับปลายด้านใดด้านหนึ่งมันจะเบี่ยงเบนแรงกว่าถ้ามันกระทบกับกลาง (เกือบราวกับว่ามันเป็นพื้นผิวโค้ง) นอกจากนี้หากไม้พายกำลังเคลื่อนที่การเคลื่อนที่ของไม้พายจะถูกเพิ่มเข้าไปในการโก่งตัว เพื่อให้ได้การโก่งที่แรงที่สุดลูกบอลต้องตีใกล้กับปลายไม้พายและไม้พายจะต้องเคลื่อนที่ไปทางปลายเดียวกันนั้น ซึ่งคล้ายกับพงษ์ดั้งเดิมสำหรับอาตาริ 2600
  • หยุดชั่วคราว - เกมอาจหยุดชั่วคราวเมื่อใดก็ได้โดยกดSpaceแถบ การเล่นจะกลับมาทำงานต่อเมื่อกดแป้นเว้นวรรคเป็นครั้งที่สอง
  • การควบคุม - เช่นเดียวกับตัวอย่างเช่นผู้เล่น 1 ย้ายด้วยQและAกุญแจและ 2 ผู้เล่นย้ายด้วยและPL

ในฐานะที่เป็นบันทึกสุดท้ายฉันต้องการขอให้โซลูชันนี้ไม่ได้รับเลือกเป็นคำตอบที่ยอมรับได้ด้วยเหตุผลหลายประการ

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

@aditsu คุณทำงานภายใต้ linux หรือไม่ ฉันจะดูว่าฉันสามารถหาทางเลือกที่ใช้งานได้โดยไม่คำนึงถึงใบหน้าตัวอักษรที่เลือก แนวคิดที่อยู่เบื้องหลังการโก่งตัวคือมันเป็นไปได้ที่จะเบี่ยงเบนลูกบอลด้วยความเร็วที่เร็วกว่า (สูงสุด2.5ในระดับของฉัน) กว่าไม้พายสามารถเคลื่อนที่ได้ ( 1.67 ) สิ่งนี้จะเกิดขึ้นได้ก็ต่อเมื่อคุณให้ 'สปิน' บ้าง ถ้าพายไม่ได้เคลื่อนย้ายเมื่อนัดลูกสูงสุดคือความเร็วจะเป็น1.5
primo

ใช่ฉันใช้ Linux ฉันคิดว่ามันแปลกที่ลูกบอลสามารถ "กลับ" จริง ๆ (ขึ้นหรือลง) หลังจากตีไม้พายแทนที่จะไปต่อในทิศทางเดียวกัน (อาจอยู่ในมุมที่ต่างออกไป) แต่บางทีอาตาริก็ทำแบบนั้นฉันไม่รู้
aditsu

@aditsu มีค่าใช้จ่ายไม่กี่ไบต์ แต่ฉันเชื่อว่าคะแนนควรอยู่กึ่งกลางโดยไม่คำนึงถึงตัวอักษรที่เลือก (ตราบใดที่มันเป็น monospace) แจ้งให้เราทราบว่าเหมาะกับคุณหรือไม่ และใช่การโก่งตัวนั้นคล้ายกันมาก (ถึงแม้จะมีการกระจายที่ราบรื่นกว่า) กับเวอร์ชั่นอาตาริที่ฉันคุ้นเคย ถ้าคุณจินตนาการว่าไม้พายเป็นพื้นผิวโค้ง (นูน) (เหมือนไม้ฮอกกี้อากาศ) ฉันคิดว่ามันควรจะเป็นสัญชาตญาณมากกว่า
primo

ใช่มันอยู่ตรงกลางแล้ว
aditsu

8

HTML & JavaScript (รับ 2) - 525

เนื่องจาก OP ไม่ได้สนใจอะไรมากเกี่ยวกับส่วน "ใกล้เคียงที่สุด" นี่เป็นทางเลือกอื่นที่ฉันทำให้ง่ายถอดและถอดแบบกอล์ฟอย่างไร้ความปราณี Q / A และ P / L ที่จะเล่น แต่ทุกปุ่มอื่น ๆ ก็มีผลกระทบ อีกครั้งรหัสนั้นมีอยู่ในตัวเองอย่างสมบูรณ์และฉันทดสอบใน Chromium 25 บน Linux ฉันสามารถตีกอล์ฟให้ดียิ่งขึ้นถ้าคุณยอมรับข้อผิดพลาดเล็ก ๆ หรือลดคุณภาพกราฟิก / เกมเพลย์ลง

<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>

ขอบคุณ Shmiddty


ฉันไม่เข้าใจคำคัดค้าน เท่าที่ฉันสามารถจำได้รุ่น 715 ไบต์ (แก้ไข 3 ชั่วโมงก่อนโพสต์นี้) เกือบจะเหมือนกับรุ่นดั้งเดิมของ Pong ที่ฉันมีสำหรับ Atari 2600 ของฉัน
primo

@primo ฉันกำลังสมมติว่าคุณกำลังพูดถึงการอ้างสิทธิ์โดยนัยของฉันว่าโซลูชันของคุณไม่ตรงตามเกณฑ์ "ใกล้เคียงที่สุด" โอพีไม่ได้พูดถึงรุ่น Atari 2600 แต่เป็นการใช้งานจาวาสคริปต์เฉพาะที่เขาเชื่อมโยง และตั้งแต่แรกเห็นมีความแตกต่างที่เห็นได้ชัด 2 ประการในรหัสของคุณ: ไม่มีเครื่องเล่นคอมพิวเตอร์และไม่มีการแสดงคะแนนแบบ "7 ส่วน" อาจมีความแตกต่างมากขึ้นใน "กลศาสตร์" หากสิ่งเหล่านี้ไม่สำคัญฉันก็คิดว่าวิธีนี้ควรจะใช้ได้เช่นกัน
aditsu

นี่คือความผิดพลาดของฉัน ฉันหมายถึง "ใกล้เคียงที่สุด" จริงๆดังนั้นคำตอบแรกของคุณดีที่สุด
felipa

c=window.cคุณสามารถเอา คุณกำลังกำหนดตัวแปรโกลบอลให้กับตัวเอง
Shmiddty

คุณสามารถช่วยตัวละครอีก 1 ตัวได้โดยการย้าย++S[n]เข้าไปข้างใน.random(++S[n])
Shmiddty

5

HTML & JavaScript - 1663

กับการตัดสินที่ดีกว่าของฉันฉันใช้วิธีบ้าคลั่งของการเล่นกอล์ฟรหัสจริงจากการสาธิต ฉันลบฟีเจอร์และองค์ประกอบอินเทอร์เฟซบางส่วนออกไป แต่โดยทั่วไปแล้วมันจะทำงานเหมือนกัน - 0, 1 หรือ 2 เพื่อเลือกจำนวนผู้เล่นมนุษย์ Q / A และ P / L เพื่อย้าย

การเล่นเกมควรเหมือนกันพิกเซลสำหรับพิกเซลและมิลลิวินาทีเป็นมิลลิวินาทีเป็นต้นฉบับที่ 640 * 480 (คำแนะนำ: การปรับขนาดหน้าต่างเบราว์เซอร์จะเปลี่ยนขนาดของเกมในการสาธิต) มันไม่ได้ให้คำแนะนำไม่ประกาศผู้ชนะและไม่ได้จัดการกับ esc

รหัสมีอยู่ในตัวเองอย่างสมบูรณ์และฉันทดสอบใน Chromium 25 บน Linux Firefox ไม่ชอบมันมาก

<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>

ให้เครดิตกับ Shmiddty เพื่อการปรับปรุง


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);}

ภาพตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่

รหัสนี้ทำขึ้นโดยคำนึงถึงความสั้นดังนั้นจึงเป็นรถที่ค่อนข้างสวย (บางครั้งลูกบอลต้องผ่านไม้พายหรือพันรอบมัน) การควบคุมคือ Q / A สำหรับผู้เล่น 1 และ O / L สำหรับผู้เล่น 2


1
ในฐานะที่เป็นเกมเวอร์ชั่นพงษ์ของคุณก็ค่อนข้างไม่ยุติธรรมเนื่องจากมีการลงทะเบียนคีย์ของผู้เล่นเพียงคนเดียวต่อเฟรม: P
Jonathan Frech

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

เพียงรุ่นพงษ์ที่มีขนาดเล็กมากซึ่งลูกบอลจะวิ่งในมุมทแยงและมีความเร็วเท่ากันเสมอ

ป้อนคำอธิบายรูปภาพที่นี่


ล้มเหลว outgolf: bit.ly/2VSIGz8
sergiol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.