# pong.py

Created by jblbeurope

Created on March 18, 2019

2.31 KB

Pong game (requires https://github.com/numworks/epsilon/pull/746).

```# Pong for NumWorks by boricj

from time import *
from kandinsky import *
from random import *

def pong():
WIDTH=320
HEIGHT=224

def __init__(self, x):
self.width=16
self.height=64
self.x=x
self.y=((224-self.height)/2)
def move(self,dy):
self.y=min(max(self.y+dy,0),HEIGHT-self.height)

class Ball:
def __init__(self):
self.width=16
def reset(self):
self.x=(WIDTH-self.width)/2
self.y=(HEIGHT-self.width)/2
self.dx=(random()+3)*16
self.dy=(random()+3)*16
bx1=self.x
by1=self.y
bx2=self.x+self.width
by2=self.y+self.width
if bx1 < px2 and bx2 > px1 and by1 < py2 and by2 > py1:
return True
return False

B=Ball()
B.reset()
score1=0
score2=0
fill_rect(0,0,WIDTH,HEIGHT,color(0,0,0))

prevTime=monotonic()
while True:
curTime=monotonic()
dTime=curTime-prevTime
prevTime=curTime
keys=get_keys()
oldp1x=P1.x
oldp1y=P1.y
oldp2x=P2.x
oldp2y=P2.y
oldbx=B.x
oldby=B.y
B.x+=B.dx*dTime
B.y+=B.dy*dTime
if "up" in keys:
P1.move(-128*dTime)
elif "down" in keys:
P1.move(128*dTime)
if P2.y+P2.height/2>B.y+B.width/2:
P2.move(-160*dTime)
else:
P2.move(160*dTime)
if B.collide(P1):
B.x=P1.x+P1.width+1
B.dx*=-1.1
B.dy*=1.1
elif B.collide(P2):
B.x=P2.x-B.width-1
B.dx*=-1.1
B.dy*=1.1
if B.x<0:
B.reset()
score2+=1
elif B.x>WIDTH:
B.reset()
score1+=1
if B.y<0:
B.y=1
B.dy=-B.dy
elif B.y>HEIGHT-B.width:
B.y=HEIGHT-B.width-1
B.dy=-B.dy
wait_vblank()
fill_rect(int(oldp1x),int(oldp1y),P1.width,P1.height,color(0,0,0))
fill_rect(int(oldp2x),int(oldp2y),P2.width,P2.height,color(0,0,0))
fill_rect(int(oldbx),int(oldby),B.width,B.width,color(0,0,0))
fill_rect(int(P1.x),int(P1.y),P1.width,P1.height,color(0,0,255))
fill_rect(int(P2.x),int(P2.y),P2.width,P2.height,color(255,0,0))
fill_rect(int(B.x),int(B.y),B.width,B.width,color(255,255,255))
draw_string(str(score1),int(WIDTH/4),16)
draw_string(str(score2),int(3*WIDTH/4),16)```