Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time, math
- from tkinter import *
- from random import randint
- width = 700
- height = 700
- r = 10
- class Game():
- def __init__(self, width = 1000, height = 1000):
- self.root = Tk()
- self.root.title("Kim_Chen_In")
- self.root.resizable(False,False)
- self.canvas = Canvas(self.root, width = width, height = height, highlightthickness = 0)
- self.canvas.pack()
- self.root.update()
- self.sprite = []
- self.width = self.canvas.winfo_width()
- self.height = self.canvas.winfo_height()
- def mainloop(self):
- while True:
- for z in self.sprite:
- z.move()
- self.colision_with_borders()
- self.colision_with_sprites()
- self.root.update_idletasks()
- self.root.update()
- time.sleep(1/100)
- def get_center(self, obj1):
- obj1_x1, obj1_y1, obj1_x2, obj1_y2 = self.canvas.coords(obj1.ball)
- obj1_center = ((obj1_x2 + obj1_x1)/2, (obj1_y2 + obj1_y1)/2)
- return obj1_center
- def get_dist(self,obj1_center, obj2_center):
- kx = obj1_center[0] - obj2_center[0]
- ky = obj1_center[1] - obj2_center[1]
- g = math.sqrt(kx ** 2 + ky ** 2)
- return g
- def colision_with_sprites(self):
- remove_sprites = []
- for i in range(len(self.sprite)-1):
- for k in range(i+1,len(self.sprite)):
- if self.sprite[i].team == self.sprite[k].team:
- continue
- i_center = self.get_center(self.sprite[i])
- k_center = self.get_center(self.sprite[k])
- if self.get_dist(i_center, k_center) <= self.sprite[i].r + self.sprite[k].r:
- remove_sprites.append(i)
- remove_sprites.append(k)
- new_sprites = [self.sprite[w] for w in range(len(self.sprite)) if w not in remove_sprites]
- for i in remove_sprites:
- self.canvas.delete(self.sprite[i].ball)
- self.sprite = new_sprites
- def colision_with_borders(self):
- for i in self.sprite:
- if self.canvas.coords(i.ball)[0] < 0: self.canvas.move(i.ball, self.width, 0)
- if self.canvas.coords(i.ball)[2] > self.width: self.canvas.move(i.ball, -self.width, 0)
- if self.canvas.coords(i.ball)[1] < 0: self.canvas.move(i.ball, 0, self.height)
- if self.canvas.coords(i.ball)[3] > self.height: self.canvas.move(i.ball, 0, -self.height)
- class Sprite:
- def __init__(self, game, x, y, r, color):
- self.deltax = 0
- self.deltay = 0
- self.x1 = x-r
- self.y1 = y-r
- self.x2 = x+r
- self.y2 = y+r
- self.r = r
- self.game = game
- self.ball = self.game.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill = color)
- def move(self):
- self.game.canvas.move(self.ball, self.deltax, self.deltay)
- class Enemy(Sprite):
- def __init__(self, game, x, y, r, color):
- Sprite.__init__(self, game, x, y, r, color)
- self.deltax = randint(-5,5)
- self.deltay = randint(-5,5)
- game.canvas.bind_all('<KeyPress-space>', self.enemy_fire)
- def enemy_fire(self, event):
- x,y = self.game.get_center(self)
- e_deltax = self.deltax
- e_deltay = self.deltay
- ene_bul = Enemy_Bullet(self.game, x+e_deltax+self.r*3, y+e_deltax+self.r*3, 3, e_deltax*2, e_deltay*2, "green")
- self.game.sprite.append(ene_bul)
- class Enemy_Bullet(Sprite):
- def __init__(self, game, x, y, r, deltax, deltay, color):
- Sprite.__init__(self, game, x, y, r, color)
- self.deltax = deltax
- self.deltay = deltay
- class Bullet(Sprite):
- def __init__(self, game, x, y, r, deltax, deltay, color):
- Sprite.__init__(self, game, x, y, r, color)
- self.deltax = deltax
- self.deltay = deltay
- class Tank(Sprite):
- def __init__(self, game, x, y, r, color):
- Sprite.__init__(self, game, x, y, r, color)
- game.canvas.bind_all('<KeyPress-Left>', self.turn_left)
- game.canvas.bind_all('<KeyPress-Right>', self.turn_right)
- game.canvas.bind_all('<KeyPress-Up>', self.turn_up)
- game.canvas.bind_all('<KeyPress-Down>', self.turn_down)
- game.canvas.bind_all('<KeyPress-space>', self.fire)
- def turn_left(self, event):
- self.deltax = self.deltax - 1
- def turn_right(self, event):
- self.deltax = self.deltax + 1
- def turn_up(self, event):
- self.deltay = self.deltay - 1
- def turn_down(self, event):
- self.deltay = self.deltay + 1
- def fire(self,event):
- x,y = self.game.get_center(self)
- b_deltax = self.deltax
- b_deltay = self.deltay
- bul = Bullet(self.game, x+b_deltax+self.r*2, y+b_deltax+self.r*2, 3, b_deltax*1.5, b_deltay*1.5, "black")
- self.game.sprite.append(bul)
- g = Game(width, height)
- for i in range(1):
- x=randint(r,width-r)
- y=randint(r,height-r)
- g.sprite.append(Enemy(g, x, y, r, 'red'))
- Enemy.team = 0
- Enemy_Bullet.team = 0
- Bullet.team = 1
- Tank.team = 1
- g.sprite.append(Tank(g, width/2, height/2, 20, 'black'))
- g.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement