AyanUpadhaya

DX Ball in Python Turtle Under Develop Game

Aug 26th, 2021
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.94 KB | None | 0 0
  1. # Dx ball game in python @ Ayan Upadhaya
  2. # Press 'r' to play and pause
  3. # under develop game
  4.  
  5. import turtle
  6. import random
  7. import math
  8.  
  9. class Tiles:
  10.     def __init__(self,number):
  11.         self.number = number
  12.         self.tiles_list = []
  13.         self.space = 0
  14.     def CreateTiles(self,side,top):
  15.         for i in range(0,self.number):
  16.             self.tiles_list.append(turtle.Turtle())
  17.         for tile in self.tiles_list:
  18.             tile.shape('square')
  19.             tile.color('white','yellow')
  20.             tile.speed(0)
  21.             tile.shapesize(stretch_wid = 1,stretch_len=2)
  22.             tile.penup()
  23.             tile.setposition(side+self.space,top)
  24.             self.space+=45
  25.  
  26.     #for checking collision with ball and tiles
  27.     def checkCollision(self,t1,t2):
  28.         distance=math.sqrt(math.pow(t1.xcor()-t2.xcor(),2)+math.pow(t1.ycor()-t2.ycor(),2))
  29.         if distance<15:
  30.             return True
  31.  
  32.         else:
  33.             return False
  34.            
  35.    
  36.  
  37. class Paddle:
  38.     def __init__(self,master,shape,shapesize,color,speed,position):
  39.         self.master = master
  40.         self.shape = shape
  41.         self.shapesize = shapesize
  42.         self.color = color
  43.         self.speed = speed
  44.         self.position = position
  45.     def draw(self):
  46.         self.master.shape(self.shape)
  47.         self.master.shapesize(stretch_wid = self.shapesize[0],stretch_len = self.shapesize[1])
  48.         self.master.color(self.color)
  49.         self.master.speed(self.speed)
  50.         self.master.penup()
  51.         self.master.goto(self.position[0],self.position[1])
  52.  
  53.     def paddle_move_left(self):
  54.         x = self.master.xcor()
  55.         x-=20
  56.         self.master.setx(x)
  57.  
  58.     def paddle_move_right(self):
  59.         x = self.master.xcor()
  60.         x+=20
  61.         self.master.setx(x)
  62.  
  63.  
  64. class Ball(Paddle):
  65.     def __init__(self,master,shape,shapesize,color,speed,position,dx,dy):
  66.         super().__init__(master,shape,shapesize,color,speed,position)
  67.         self.dx = dx #sine
  68.         self.dy = dy #cosine
  69.  
  70.     def moveball(self):
  71.         self.master.setx(self.master.xcor()+self.dx)
  72.         self.master.sety(self.master.ycor()+self.dy)
  73.  
  74.  
  75. class TitleWriter:
  76.     def __init__(self,headeTitle,color,position):
  77.         self.headTitle=headeTitle
  78.         self.color = color
  79.         self.position = position
  80.         self.pen = turtle.Turtle()
  81.         self.pen.hideturtle()
  82.         self.pen.color(self.color)
  83.  
  84.     def writeTitle(self):
  85.         self.pen.clear()
  86.         self.pen.speed(0)
  87.         self.pen.penup()
  88.         self.pen.hideturtle()
  89.         self.pen.goto(self.position[0],self.position[1])
  90.         self.pen.write("{}".format(self.headTitle),align = "center",font=('Courier',18,'bold'))
  91.  
  92.  
  93.  
  94. #Game Class
  95. class Game:
  96.     def __init__(self,title,width,height,background,tracer):
  97.        
  98.         #window attributes
  99.  
  100.         self.window = turtle.Screen()
  101.         self.title = title
  102.         self.width = width
  103.         self.height = height
  104.         self.background = background
  105.         self.tracer = tracer
  106.         self.isPause = True
  107.         self.limitScore = 0
  108.         self.istileHide = False
  109.  
  110.  
  111.  
  112.         #objects
  113.         self.paddle = Paddle(turtle.Turtle(),'square',[1,10],'white',0,[0,-250])
  114.         self.ball = Ball(turtle.Turtle(),'circle',[1,1],'white',3,[0,0],1,-1)
  115.        
  116.         # tiles
  117.         self.tiles = Tiles(12)
  118.         self.tiles2 = Tiles(12)
  119.    
  120.  
  121.         #Title Writer
  122.         self.headTitle = TitleWriter('DX Ball','white',[0,260])
  123.  
  124.  
  125.  
  126.     #for pause and playing game press 'r'
  127.     def pause_play(self):
  128.         if self.isPause:
  129.             self.isPause = False
  130.         else:
  131.             self.isPause = True
  132.  
  133.  
  134.  
  135.     def run(self):
  136.         self.window.title(self.title)
  137.         self.window.setup(width = self.width,height =self.height)
  138.         self.window.bgcolor(self.background)
  139.         self.window.tracer(self.tracer)
  140.  
  141.         #create objects
  142.  
  143.         self.paddle.draw()
  144.         self.ball.draw()
  145.  
  146.         self.tiles.CreateTiles(-230,200)
  147.         self.tiles2.CreateTiles(-230,175)
  148.  
  149.         #write head title
  150.         self.headTitle.writeTitle()
  151.  
  152.         #event listener
  153.         self.window.listen()
  154.         self.window.onkeypress(self.paddle.paddle_move_left,"Left")
  155.         self.window.onkeypress(self.paddle.paddle_move_right,"Right")
  156.         self.window.onkeypress(self.pause_play,"r")
  157.        
  158.  
  159.         run = True
  160.         while run:
  161.  
  162.             if not self.isPause:
  163.                 self.ball.moveball()
  164.  
  165.                 #controll ball
  166.                 if self.ball.master.ycor() > 290:
  167.                     self.ball.master.sety(290)
  168.                     self.ball.dy *= -1
  169.  
  170.                 if self.ball.master.ycor() < -290:
  171.                     self.ball.master.sety(-290)
  172.                     self.ball.dy *= -1
  173.  
  174.                 if self.ball.master.xcor() > 390:
  175.                     self.ball.master.setx(390)
  176.                     self.ball.dx *= -1
  177.  
  178.                 if self.ball.master.xcor() < -390:
  179.                     self.ball.master.setx(-390)
  180.                     self.ball.dx *= -1
  181.  
  182.            
  183.  
  184.                 #paddle hitting by checking collision
  185.                 if (self.ball.master.ycor() < -235 and self.ball.master.ycor()> -250) and (self.paddle.master.xcor()+60 > self.ball.master.xcor() and self.paddle.master.xcor()-60 < self.ball.master.xcor())
  186.                     self.ball.dy *=-1
  187.  
  188.  
  189.                 #ball collision with tiles
  190.                 for tile in self.tiles.tiles_list:
  191.                     if self.tiles.checkCollision(tile,self.ball.master):
  192.                         tile.hideturtle()
  193.  
  194.                        
  195.            
  196.                 for tile2 in self.tiles2.tiles_list:
  197.                     if self.tiles.checkCollision(tile2,self.ball.master):
  198.                         tile2.hideturtle()
  199.                
  200.  
  201.  
  202.                 self.window.update()
  203.             else:
  204.                 self.window.update()
  205.  
  206.  
  207.  
  208. dxballGame = Game('Dx Ball',800,600,'black',3)
  209.  
  210. if __name__=="__main__":
  211.     dxballGame.run()
Advertisement
Add Comment
Please, Sign In to add comment