-
-
Save HarryET/70ac101b6848c14601705488995bce9d to your computer and use it in GitHub Desktop.
My first ever program!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from tkinter import * | |
HEIGHT = 500 | |
WIDTH = 800 | |
window = Tk() | |
window.title('Bubble Destroyer') | |
'' | |
c = Canvas(window, width=WIDTH, height=HEIGHT, bg='darkblue') | |
c.pack() | |
ship_id = c.create_polygon(5, 5, 5, 25, 30, 15, fill='green') | |
ship_id2 = c.create_oval(0, 0, 30, 30, outline='green') | |
SHIP_R = 15 | |
MID_X = WIDTH / 2 | |
MID_Y = HEIGHT / 2 | |
c.move(ship_id, MID_X, MID_Y) | |
c.move(ship_id2, MID_X, MID_Y) | |
SHIP_SPD = 10 | |
def move_ship(event): | |
if event.keysym == 'Up': | |
c.move(ship_id, 0, -SHIP_SPD) | |
c.move(ship_id2, 0, -SHIP_SPD) | |
elif event.keysym == 'Down': | |
c.move(ship_id, 0, SHIP_SPD) | |
c.move(ship_id2, 0, SHIP_SPD) | |
elif event.keysym == 'Left': | |
c.move(ship_id, -SHIP_SPD, 0) | |
c.move(ship_id2, -SHIP_SPD, 0) | |
elif event.keysym == 'Right': | |
c.move(ship_id, SHIP_SPD, 0) | |
c.move(ship_id2, SHIP_SPD, 0) | |
c.bind_all('<Key>', move_ship) | |
from random import randint | |
bub_id = list() | |
bub_r = list () | |
bub_speed = list() | |
MIN_BUB_R = 10 | |
MAX_BUB_R =30 | |
MAX_BUB_SPD = 10 | |
GAP = 100 | |
def create_bubble(): | |
x = WIDTH + GAP | |
y = randint(0, HEIGHT) | |
r = randint (MIN_BUB_R, MAX_BUB_R) | |
id1 = c.create_oval(x - r, y - r, x + r, y + r, outline='green') | |
bub_id.append(id1) | |
bub_r.append(r) | |
bub_speed.append(randint(1, MAX_BUB_SPD)) | |
#part 5 - checked ok | |
def move_bubbles(): | |
for i in range(len(bub_id)): | |
c.move(bub_id[i], -bub_speed[i], 0) | |
#part 7 - checked ok | |
def get_coords(id_num): | |
pos = c.coords(id_num) | |
x = (pos[0] + pos[2])/2 | |
y = (pos[1] + pos[3])/2 | |
return x, y | |
#part 8 - ok | |
def del_bubble(i): | |
del bub_r[i] | |
del bub_speed[i] | |
c.delete(bub_id[i]) | |
del bub_id[i] | |
#part 9 - ok | |
def clean_up_bubs(): | |
for i in range(len(bub_id)-1, -1, -1): | |
x, y = get_coords(bub_id[i]) | |
if x < -GAP: | |
del_bubble(i) | |
#part 11 - ok | |
from math import sqrt | |
def distance(id1, id2): | |
x1, y1 = get_coords(id1) | |
x2, y2 = get_coords(id2) | |
return sqrt((x2 - x1)**2 + (y2 - y1)**2) | |
#part 12 - ok | |
def collision(): | |
points = 0 | |
for bub in range(len(bub_id)-1, -1, -1): | |
if distance(ship_id2, bub_id[bub]) < (SHIP_R + bub_r[bub]): | |
points += (bub_r[bub] + bub_speed[bub]) | |
del_bubble(bub) | |
return points | |
#part 14 - | |
c.create_text(50, 30, text='TIME', fill='green' ) | |
c.create_text(150, 30, text='score', fill='green') | |
time_text = c.create_text(50, 50, fill='green' ) | |
score_text = c.create_text(150, 50, fill='green' ) | |
def show_score(score): | |
c.itemconfig(score_text, text=str(score)) | |
def show_time(time_left): | |
c.itemconfig(time_text, text=str(time_left)) | |
from time import sleep, time | |
BUB_CHANCE = 10 | |
TIME_LIMIT = 60 | |
BONUS_SCORE = 1000 | |
score = 0 | |
bonus = 0 | |
end = time() + TIME_LIMIT | |
#MAIN GAME LOOP | |
while time() < end: | |
if randint(1, BUB_CHANCE) == 1: | |
create_bubble() | |
move_bubbles() | |
clean_up_bubs() | |
score += collision() | |
if (int(score / BONUS_SCORE)) > bonus: | |
bonus += 1 | |
end += TIME_LIMIT | |
show_score(score) | |
show_time(int(end - time())) | |
print(score) | |
window.update() | |
sleep(0.01) | |
c.create_text(MID_X, MID_Y, \ | |
text='GAME OVER!!!!!!!!!', fill='green', font=('Helvetica', 30)) | |
c.create_text(MID_X, MID_Y + 30, \ | |
text='score: '+ str(score), fill='green') | |
c.create_text(MID_X, MID_Y + 45, \ | |
text='Bonus time: '+ str(bonus*TIME_LIMIT), fill='green') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment