Advertisement
tokyoedtech

Simple Python AGAR.IO Game (Single Player) Demo

Mar 17th, 2017
4,614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.66 KB | None | 0 0
  1. # Simple Python AGAR.IO Game (Single Player) Demo by @TokyoEdTech
  2. # YouTube Python Tutorial Channel:
  3. # https://www.youtube.com/channel/UC2vm-0XX5RkWCXWwtBZGOXg/playlists
  4. # Use the arrow keys to move your player and eat the smaller enemies
  5. # While avoiding the bigger enemies
  6. # NOTE: This is a work in progress so there is some ugly code
  7. import turtle
  8. import random
  9. import math
  10. import os
  11. import time
  12.  
  13. #Set up screen
  14. wn = turtle.Screen()
  15. wn.bgcolor("black")
  16. wn.title("AGAR.IO Single Player Demo by @TokyoEdTech")
  17. wn.setup(800, 800)
  18.  
  19. class Game(turtle.Turtle):
  20.  
  21.     def __init__(self):
  22.         turtle.Turtle.__init__(self)
  23.         self.penup()
  24.         self.hideturtle()
  25.         self.speed(0)
  26.         self.color("white")
  27.         self.goto(-390, 380)
  28.         self.score = 0
  29.         self.x_offset = 0
  30.         self.y_offset = 0
  31.         self.world_size = 1000
  32.         self.colors = ["red", "orange", "green", "blue", "yellow", "purple"]
  33.         self.high_score = 0
  34.  
  35.     def show_score(self):
  36.         self.clear()
  37.         msg = "Score: {} Enemies  Remaining: {}  High Score: {}".format(int(self.score), len(enemies), int(self.high_score))
  38.         self.write(msg, False, align="left", font=("Arial",14, "normal"))
  39.  
  40.     def change_score(self, points):
  41.         self.score += points
  42.         self.show_score()
  43.  
  44.     def play_sound(self, filename):
  45.         os.system("afplay {}&".format(filename))
  46.  
  47. class Player(turtle.Turtle):
  48.  
  49.     def __init__(self):
  50.         turtle.Turtle.__init__(self)
  51.         self.penup()
  52.         self.speed(0)
  53.         self.shape("circle")
  54.         self.color("white")
  55.         self.speed = 3.5
  56.         self.size = 1.0
  57.  
  58.     def move(self):
  59.         pass
  60.  
  61.         #Border Checking for the Player
  62.         if self.xcor() > game.world_size:
  63.             self.setx(game.world_size)
  64.             self.left(180)
  65.                    
  66.         if self.xcor() < -game.world_size:
  67.             self.setx(-game.world_size)
  68.             self.left(180)
  69.            
  70.         if self.ycor() > game.world_size:
  71.             self.sety(game.world_size)
  72.             self.left(180)
  73.            
  74.         if self.ycor() < -game.world_size:
  75.             self.sety(-game.world_size)
  76.             self.left(180)
  77.    
  78.     #What happens if the user presses the left arrow?
  79.     def left_arrow(self):
  80.         game.x_offset = self.speed
  81.  
  82.     #What happens if the user presses the right arrow?
  83.     def right_arrow(self):
  84.         game.x_offset = -self.speed
  85.  
  86.     #What happens if the user presses the up arrow?
  87.     def up_arrow(self):
  88.         game.y_offset = -self.speed
  89.  
  90.     #What happens if the user presses the down arrow?
  91.     def down_arrow(self):
  92.         game.y_offset = self.speed
  93.        
  94.     def set_size(self, size):
  95.         #Set the size
  96.         self.size = size
  97.         #Change the size that is shown
  98.         self.shapesize(stretch_wid=size, stretch_len=size, outline=None)
  99.  
  100.  
  101. class Enemy(turtle.Turtle):
  102.  
  103.     def __init__(self):
  104.         turtle.Turtle.__init__(self)
  105.         self.penup()
  106.         self.speed(0)
  107.         self.color(random.choice(game.colors))
  108.         self.shape("circle")
  109.         self.speed = 3
  110.         self.size = float(random.randint(5, 15)) / 10
  111.         self.shapesize(stretch_wid=self.size, stretch_len=self.size, outline=None)
  112.         self.goto(random.randint(-game.world_size, game.world_size), random.randint(-game.world_size, game.world_size))
  113.         self.setheading(random.randint(0, 360))
  114.        
  115.     def move(self):
  116.         self.forward(self.speed)
  117.         self.setx(self.xcor() + game.x_offset)
  118.         self.sety(self.ycor() + game.y_offset)
  119.  
  120.         #Border Checking for the Enemy
  121.         if self.xcor() > game.world_size:
  122.             self.setx(game.world_size)
  123.             self.left(180)
  124.                    
  125.         if self.xcor() < -game.world_size:
  126.             self.setx(-game.world_size)
  127.             self.left(180)
  128.            
  129.         if self.ycor() > game.world_size:
  130.             self.sety(game.world_size)
  131.             self.left(180)
  132.            
  133.         if self.ycor() < -game.world_size:
  134.             self.sety(-game.world_size)
  135.             self.left(180)
  136.            
  137.         #Simple AI
  138.         #Randomly set heading towards player if the player is smaller
  139.         #ATTACK
  140.         if random.randint(1, 100) == 50 and player.size < self.size:
  141.             #print ("ATTACK")
  142.             #Four options
  143.             attack_heading = self.get_heading(player)
  144.             self.setheading(attack_heading)
  145.  
  146.         #Randomly set heading away from player if the player is bigger     
  147.         #RUN
  148.         if random.randint(1, 1000) == 50 and player.size > self.size:
  149.             #print ("RUN")
  150.             #Four options
  151.             attack_heading = self.get_heading(player)
  152.             run_heading = attack_heading + 180
  153.             self.setheading(run_heading)
  154.  
  155.     def get_heading(self, other):
  156.         if player.xcor() > self.xcor() and player.ycor() > self.ycor():
  157.             return 45
  158.  
  159.         if player.xcor() < self.xcor() and player.ycor() > self.ycor():
  160.             return 135
  161.  
  162.         if player.xcor() < self.xcor() and player.ycor() < self.ycor():
  163.             return 225
  164.  
  165.         if player.xcor() > self.xcor() and player.ycor() < self.ycor():
  166.             return 315     
  167.            
  168.     def set_size(self, size):
  169.         #Update self size variable
  170.         self.size = size
  171.         #Change display size
  172.         self.shapesize(stretch_wid=size, stretch_len=size, outline=None)
  173.  
  174.     def destroy(self):
  175.         self.clear()
  176.         self.hideturtle()
  177.         self.goto(10000, 10000)    
  178.  
  179. #Collision checking function
  180. #Uses the Pythagorean Theorem to Measure The Distance Between Two Objects
  181. def isCollision(t1, t2):
  182.     a = t1.xcor()-t2.xcor()
  183.     b = t1.ycor()-t2.ycor()
  184.     distance = math.sqrt((a ** 2) + (b ** 2))
  185.    
  186.     #Calculate Gap based on size of object
  187.     gap = ((t1.size * 20.0) + (t2.size * 20.0)) / 2.0
  188.  
  189.     if distance < gap:
  190.         return True
  191.     else:
  192.         return False
  193.  
  194. #Create class instances
  195. player = Player()
  196. game = Game()
  197.  
  198. #Create multiple enemies
  199. enemies = []
  200. for count in range(50):
  201.     enemies.append(Enemy())
  202.    
  203. #Show the score
  204. game.show_score()
  205.  
  206. #Set keyboard bindings
  207. turtle.listen()
  208. turtle.onkey(player.left_arrow, "Left")
  209. turtle.onkey(player.right_arrow, "Right")
  210. turtle.onkey(player.up_arrow, "Up")
  211. turtle.onkey(player.down_arrow, "Down")
  212.  
  213. #Speed Up the Game
  214. wn.tracer(0)
  215.  
  216. #Main Loop
  217. while True:
  218.     wn.update()
  219.     player.move()
  220.  
  221.     #Iterate through enemies
  222.     for enemy in enemies:
  223.         enemy.move()
  224.  
  225.         #Check for a collision between the player and goal
  226.         if isCollision(player, enemy):
  227.             #Compare sizes
  228.             #Player is larger
  229.             if player.size >= enemy.size:
  230.                 #Hide the enemy
  231.                 enemy.hideturtle()
  232.                 enemy.goto(10000, 10000)
  233.                 #Increase the player size
  234.                 player.set_size(player.size + (enemy.size / 2))
  235.                 #Update the score
  236.                 game.change_score(enemy.size * 100)
  237.                 #Remove the enemy from the list of enemies
  238.                 enemies.remove(enemy)
  239.  
  240.             else:
  241.                 game.clear()
  242.                 game.write("GAME OVER...GAME OVER...GAME OVER", False, align="left", font=("Arial",14, "normal"))
  243.                 wn.update()
  244.                 time.sleep(1)
  245.                 for enemy in enemies:
  246.                     enemy.destroy()
  247.                 enemies = []
  248.                 #Create multiple enemies
  249.                 enemies = []
  250.                 for count in range(50):
  251.                     enemies.append(Enemy())
  252.                 player.set_size(1)
  253.                 if game.score > game.high_score:
  254.                     game.high_score = game.score
  255.                 game.score = 0
  256.                
  257.                
  258.     #Iterate through enemies and see if they collide with each other
  259.     for enemy in enemies:
  260.         for enemy2 in enemies:
  261.             if enemy != enemy2:
  262.                 if isCollision(enemy, enemy2):
  263.                     if enemy.size > enemy2.size:
  264.                         #Hide the enemy2
  265.                         enemy2.destroy()
  266.                         #Increase the enemy size
  267.                         enemy.set_size(enemy.size + (enemy2.size / 1.5))
  268.                         #Remove enemy2 from the list of enemies
  269.                         enemies.remove(enemy2)
  270.                         break
  271.                     else:
  272.                         #Hide enemy2
  273.                         enemy.destroy()
  274.                         #Increase the enemy size
  275.                         enemy2.set_size(enemy.size + (enemy2.size / 1.5))
  276.                         #Remove enemy2 from the list of enemies
  277.                         enemies.remove(enemy)
  278.                         break
  279.                        
  280.     game.show_score()
  281.     #Check to see how many enemies are still in the game
  282.     if len(enemies) == 0:
  283.         game.clear()
  284.         game.write("Congratulations - you win!", False, align="left", font=("Arial",14, "normal"))
  285.         wn.update()
  286.         time.sleep(1)
  287.         enemies = []
  288.         #Create multiple enemies
  289.         enemies = []
  290.         for count in range(50):
  291.             enemies.append(Enemy())
  292.         player.set_size(1)
  293.         #Set High Score
  294.         if game.score > game.high_score:
  295.             game.high_score = game.score
  296.         game.score = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement