pong5.py

Created by wperez274

Created on July 11, 2023

9.78 KB

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)

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.