Pong Game
from math import * from random import * from random import randint as R from kandinsky import * from kandinsky import fill_rect as F from kandinsky import draw_string as S from ion import * from time import * SW=322 SH=222 M=255 BLACK=(0,0,0) WHITE=(M,M,M) CYAN=(0,M,M) GRAY=(170,170,170) RED=(M,0,0) GREEN=(0,M,0) BLUE=(0,0,M) RR=R(0,M) RG=R(0,M) RB=R(0,M) numworks_c=(253, 190, 4) b_amount=0 bx=R(1400,2700) by=R(21,170) bw=bh=12 bc=numworks_c MAGNET_ON=False m_t=0 mx=R(2400,3800) my=150 mw=7 mh=12 mc=(200,0,0) rtx=R(2400,3650) rth=R(20,50) rty=R(20,SH-rth) rtw=R(20,40) rtc=(R(0,255),R(0,255),R(0,255)) comp_goes_auto=False comp_t=0 game_max=20 bg=(R(0,255),R(0,255),R(0,255)) ball_b_c=(R(0,255),R(0,255),R(0,255)) GAME=True plife=3 px=0 py=100 pw=10 ph=40 pc=(0,255,255) pscore=0 p_points=0 p2x=311 p2y=100 p2w=10 p2h=40 p2c=BLACK p2score=0 line_c=(R(0,255),R(0,255),R(0,255)) #ball size line_w=7 def vec(s,a): a = radians(a) x = s * cos(a) y = s * sin(a) return x,y def simp(a): return a%360 def collide(a1,a2): a_i=simp(a1-a2) return a2-a_i x1=160 y1=R(40,150) v=1.5 a=0 F(x1,y1,1,1,BLACK) F(0,0,SW,SH,bg) F(0,0,SW,20,BLACK) while GAME: a = simp(a) x2,y2 = vec(v,a) x1,y1 = x1+x2,y1+y2 F(int(x1),int(y1),line_w,line_w,line_c) if x1<0: plife-=1 x1=155 y1=100 p2score+=1 a=collide(a,270)+R(-10,10) ball_b_c=(R(0,255),R(0,255),R(0,255)) F(0,21,SW,SH,BLACK) v=1.5 rtw=R(20,40) rtx=R(5400,7000) rth=R(20,50) rty=R(-100,SH-rth) rtc=(R(0,255),R(0,255),R(0,255)) S("Computer Scored",40,80,(255,255,255),BLACK) sleep(1.5) F(0,21,SW,SH,bg) S("Computer Scored",40,110,bg,bg) if pscore>=game_max or plife<=0: GAME=False if x1<px+pw and x1+line_w>=px and y1+line_w>=py and y1<py+ph: F(px,py,pw,ph,(0,155,0)) F(int(x1),int(y1),line_w,line_w,(0,255,255)) a=collide(a,270)+R(-10,10) F(0,0,SW,20,BLACK) v+=choice([0.2,0.4]) ball_b_c=(R(0,255),R(0,255),R(0,255)) bg=(R(0,255),R(0,255),R(0,255)) pc=(R(150,255),R(150,255),R(150,255)) line_c=(R(0,255),R(0,255),R(0,255)) F(0,21,SW,219,bg) if x1+line_w>SW: F(0,21,SW,219,BLACK) ball_b_c=(R(0,255),R(0,255),R(0,255)) pscore+=1 plife+=1 a=collide(a,270)+R(-10,10) x1=155 y1=100 v=R(1,2) a=collide(a,270)+R(-10,10) rtw=R(20,40) rtx=R(4400,6000) rth=R(20,50) rty=R(-100,SH-rth) rtc=(R(0,255),R(0,255),R(0,255)) S("YOU SCORED!!",90,100,(0,255,255),BLACK) sleep(1.5) F(0,21,SW,SH,bg) S("YOU SCORED!!",90,100,bg,bg) S("lives: "+str(round(plife)),40,100,bg,bg) if x1+line_w>p2x and x1<=p2x+p2w and y1+line_w>=p2y and y1<p2y+p2h: F(0,0,SW,20,BLACK) ball_b_c=(R(0,255),R(0,255),R(0,255)) comp_goes_auto=False a=collide(a,270)+R(-10,10) line_c=(R(0,255),R(0,255),R(0,255)) v+=choice([0.25,0.5]) p2c=(R(0,155),R(0,155),R(0,155)) bg=(R(0,100),R(0,100),R(0,100)) F(0,22,SW,219,bg) F(int(x1),int(y1),1,line_w,ball_b_c) F(int(x1)+line_w-1,int(y1),1,line_w,ball_b_c) F(int(x1),int(y1),line_w,1,ball_b_c) F(int(x1),int(y1)+line_w-1,line_w,1,ball_b_c) #erase trail... F(int(x1)-1,int(y1),1,line_w,bg) F(int(x1)+line_w+1,int(y1),1,line_w,bg) F(int(x1),int(y1)-1,line_w,1,bg) F(int(x1),int(y1)+line_w+1,line_w,1,bg) if MAGNET_ON==False: F(px,py,pw,ph,pc) F(px,py,1,ph,BLACK) F(px+pw-1,py,1,ph,BLACK) F(px,py,pw,1,BLACK) F(px,py+ph-1,pw,1,BLACK) F(p2x,p2y,p2w,p2h,p2c) F(p2x,p2y,1,p2h,(0,0,100)) F(p2x+p2w-1,p2y,1,p2h,(0,0,100)) F(p2x,p2y,p2w,1,(0,0,100)) F(p2x,p2y+p2h-1,p2w,1,(0,0,100)) if keydown(KEY_UP) or keydown(KEY_LEFTPARENTHESIS): F(px,py+ph+1,pw,2,bg) py-=2 if keydown(KEY_OK) or keydown(KEY_SEVEN): F(px,py+ph+1,pw,3,bg) py-=3 if keydown(KEY_DOWN) or keydown(KEY_RIGHTPARENTHESIS): F(px,py-2,pw,2,bg) py+=2 if keydown(KEY_OK) or keydown(KEY_SEVEN): F(px,py-3,pw,3,bg) py+=3 if py<20: py=20 if py+ph>SH: py=SH-ph if p2y<20: p2y=20 if p2y+p2h>SH: p2y=SH-p2h S("You:",1,1,(0,255,255),BLACK) S(str(pscore),43,1,(255,255,255),BLACK) F(136,0,4,19,(0,255,255)) S(str(game_max),143,1,(0,100,0),(230,255,230)) F(166,0,4,19,(0,255,255)) S("Computer:",209,1,(0,255,0),BLACK) S(str(p2score),301,1,(255,255,255),BLACK) if p2y+20<y1 and x1>R(80,150): p2y+=choice([2,2,3,3,4,5]) F(p2x,p2y-3,p2w,3,bg) if p2y+20>y1 and x1>R(80,150): p2y-=choice([2,2,3,3,4,5]) F(p2x,p2y+p2h+1,p2w,3,bg) if x1>165 and x1<280 and p2x>250: comp_goes_auto=choice([False,True]) if p2x<280: comp_goes_auto=False if comp_goes_auto==False: p2x+=1 F(p2x-1,p2y,1,p2h,bg) if p2x+p2w>=SW: p2x=SW-p2w if comp_goes_auto: F(p2x+p2w+1,p2y,2,p2h,bg) p2x-=R(0,2) if keydown(KEY_LEFT) and px>0: F(px+pw+1,py,2,ph,bg) px-=2 if keydown(KEY_OK): F(px,py-3,pw,3,bg) px-=3 F(px+pw+1,py,3,ph,bg) if keydown(KEY_RIGHT) and px<50: F(px-2,py,2,ph,bg) px+=2 if keydown(KEY_OK): F(px,py-3,pw,3,bg) px+=3 F(px-3,py,3,ph,bg) F(0,20,SW,1,(0,255,0)) F(0,221,SW,1,(0,255,0)) F(0,20,SW,1,BLACK) F(0,221,SW,1,BLACK) if y1<=20: F(0,20,SW,1,(255,0,0)) v+=choice([0,0.1,0.2]) if y1+line_w>=SH: F(0,220,SW,1,(255,0,0)) v+=choice([0,0.1,0.2]) #note: v=velocity of ball if v>6: v=6 if v>2.5: comp_goes_auto=False if keydown(KEY_BACKSPACE) or keydown(KEY_EXE): font1=(R(100,255),R(0,255),R(0,255)) font2=(R(0,255),R(100,255),R(0,255)) while not keydown(KEY_OK) and not keydown(KEY_ANS): S("PAUSED",90,90,font1,BLACK) S("Press OK to resume",50,150,font2,BLACK) S("PAUSED",90,90,bg,bg) S("Press OK to resume",50,150,bg,bg) F(rtx,rty,rtw,rth,rtc) F(rtx+rtw+1,rty,3,rth,bg) F(rtx,rty,1,rth,BLACK) F(rtx+rtw-1,rty,1,rth,BLACK) F(rtx,rty,rtw,1,BLACK) F(rtx,rty+rth-1,rtw,1,BLACK) rtx-=choice([1,2,3]) if rtx+rtw<=0-R(20,50): rtw=R(20,50) rtx=R(4400,6000) rth=R(15,40) rty=R(-20,270) rtc=(R(0,255),R(0,255),R(0,255)) if rty+int(rth/2)<y1: rty+=2 F(rtx+rtw+1,rty,3,rth,bg) F(rtx,rty-2,rtw,2,bg) if rty+int(rth/2)>y1: rty-=2 rtx-=choice([0,1]) F(rtx,rty+rth+1,rtw,2,bg) F(rtx+rtw+1,rty,3,rth,bg) if px+pw>=rtx and px<=rtx+rtw and py+ph>=rty and py<=rty+rth: sleep(0.02) F(0,21,SW,SH,(255,0,0)) sleep(0.02) F(0,21,SW,SH,bg) plife-=0.05 if x1+line_w>=rtx and x1<=rtx+rtw and y1+line_w>=rty and y1<=rty+rth and x1+line_w>90 and x1+line_w<150: a=collide(a,270)+R(-5,5) v+=choice([0,0.1,0.2]) if keydown(KEY_TOOLBOX): F(px,py+ph-25,pw,25,bg) ph=25 py=py-3 else: ph=40 if keydown(KEY_COMMA): F(px,py-25,pw,25,bg) ph=25 py=py+3 F(mx,my,mw,mh,mc) F(mx+mw+1,my,2,mh,bg) F(mx,my+int(mh/2),mw,int(mh/2),(200,200,200)) F(mx,my,1,mh,(R(0,255),R(0,255),R(0,255))) F(mx+mw-1,my,1,mh,(R(0,255),R(0,255),R(0,255))) F(mx,my,mw,1,(R(0,255),R(0,255),R(0,255))) F(mx,my+mh-1,mw,1,(R(0,255),R(0,255),R(0,255))) mx-=2 if mx+mw<R(-30,-20): mx=R(3200,5200) my=R(21,220-my+mh) mc=(R(0,255),R(0,255),R(0,255)) if px+pw>=mx and px<=mx+mw and py+ph>=my and py<=my+mh: sleep(0.1) MAGNET_ON=True plife+=1 S("1+",px+16,py-16,(0,255,255),bg) sleep(0.1) S("1+",px+16,py-16,bg,bg) F(mx,my,mw+3,mh,bg) mx=R(3500,5000) my=R(20,160) F(bx,by-1,bw+2,bh+2,bg) F(bx,by,bw,bh,bc) F(bx+3,by+3,bw-6,bh-6,BLACK) F(bx,by,1,bh,BLACK) F(bx+bw-1,by,1,bh,BLACK) F(bx,by,bw,1,BLACK) F(bx,by+bh-1,bw,1,BLACK) bx-=2 by+=R(-2,2) if px+pw>=bx and px<=bx+bw and py+ph>=by and py<=by+bh: F(bx,by,bw,bh,bg) sleep(0.02) b_amount+=3 bx=R(2800,4500) by=R(21,170) plife+=1 S("1+",px+16,py-16,(0,255,255),bg) sleep(0.1) S("1+",px+16,py-16,bg,bg) if by<21: by=21 if by+bh>220: by=220-bh if b_amount>0: F(px+pw-4,py+17,4,4,(255,0,0)) if keydown(KEY_VAR): F(px+pw+1,py+R(17,19),SW-px,2,(255,0,0)) sleep(0.02) F(px+pw+1,py+15,SW-px,6,bg) b_amount-=0.45 if y1+line_w>=py+17 and y1<=py+19: if x1>100 and x1<220: sleep(0.015) a=collide(a,270)+R(-5,5) p_points+=R(10,50) if rty+rth>=py+17 and rty<=py+19: sleep(0.015) F(rtx,rty,rtw,rth,bg) rtx=R(1000,2500) rty=R(21,170) if bx+bw<-R(20,50): bx=R(2500,4000) by=R(21,170) bc=(R(0,255),R(0,255),R(0,255)) if MAGNET_ON: m_t+=0.014 F(px+1,py+1,pw-2,ph-2,(R(0,255),R(0,255),R(0,255))) if x1<145: if y1+int(line_w/2)<py+int(ph/2): y1+=1 if y1+int(line_w/2)>py+int(ph/2): y1-=1 if m_t>=5: m_t=0 MAGNET_ON=False if v==3.5: bg=BLACK F(0,21,SW,SH,BLACK) if plife<=1.5: F(px+1,py+1,pw-2,ph-2,(255,0,0)) F(px,py-1,pw,1,bg) py+=R(0,2) if y1<=20: y1=20 v+=choice([0.25,0.5]) a=collide(a,180)+R(-10,10) if y1+line_w>=221: y1=221-line_w v+=choice([0.25,0.5]) a=collide(a,180)+R(-10,10) if x1+line_w>=p2x and x1<=p2x+3 and y1+line_w>=p2y and y1<=p2y+p2h and comp_goes_auto: v+=1 p_points+=R(0,2) #******************************* #game over :-( sleep(0.5) font1=(R(100,255),R(0,255),R(0,255)) font2=(R(0,255),R(100,255),R(0,255)) bg=BLACK F(0,0,SW,SH,bg) S("GAME OVER",90,90,font1,bg) sleep(1) S("SCORE: "+str(p_points),90,140,font2,bg)