Code: Alles auswählen
from tkinter import *
lives_player_1 = 3
lives_player_2 = 3
death = 1
HEIGHT = 500
WIDTH = 800
window = Tk()
window.title('Deathly Spikes')
c = Canvas(window, width=WIDTH, height = HEIGHT, bg ='green')
c.pack()
mensch_id2 = c.create_oval(0, 0, 30, 30, fill='yellow')
mensch_id = c.create_oval(5, 20, 25, 25, fill='red')
mensch_id3 = c.create_oval(20, 10, 30, 15, fill='green')
mensch_id4 = c.create_oval(0, 10, 10, 15, fill='green')
mensch_id6 = c.create_oval(0, 0, 30, 30, fill='yellow')
mensch_id5 = c.create_oval(5, 20, 25, 25, fill='red')
mensch_id7 = c.create_oval(20, 10, 30, 15, fill='blue')
mensch_id8 = c.create_oval(0, 10, 10, 15, fill='blue')
MENSCH_R = 20
MID_X = WIDTH / 2
MID_Y = HEIGHT / 2
c.move(mensch_id, MID_X + 25, MID_Y)
c.move(mensch_id2, MID_X + 25, MID_Y)
c.move(mensch_id3, MID_X + 25, MID_Y)
c.move(mensch_id4, MID_X + 25, MID_Y)
c.move(mensch_id5, MID_X - 25, MID_Y)
c.move(mensch_id6, MID_X - 25, MID_Y)
c.move(mensch_id7, MID_X - 25, MID_Y)
c.move(mensch_id8, MID_X - 25, MID_Y)
MENSCH_GESCHW = 10
def menschen_beweg(event):
if event.keysym == 'Up':
c.move(mensch_id, 0, -MENSCH_GESCHW)
c.move(mensch_id2, 0, -MENSCH_GESCHW)
c.move(mensch_id3, 0, -MENSCH_GESCHW)
c.move(mensch_id4, 0, -MENSCH_GESCHW)
elif event.keysym == 'Down':
c.move(mensch_id, 0, MENSCH_GESCHW)
c.move(mensch_id2, 0, MENSCH_GESCHW)
c.move(mensch_id3, 0, MENSCH_GESCHW)
c.move(mensch_id4, 0, MENSCH_GESCHW)
elif event.keysym == 'Left':
c.move(mensch_id, -MENSCH_GESCHW, 0)
c.move(mensch_id2, -MENSCH_GESCHW, 0)
c.move(mensch_id3, -MENSCH_GESCHW, 0)
c.move(mensch_id4, -MENSCH_GESCHW, 0)
elif event.keysym == 'Right':
c.move(mensch_id, MENSCH_GESCHW, 0)
c.move(mensch_id2, MENSCH_GESCHW, 0)
c.move(mensch_id3, MENSCH_GESCHW, 0)
c.move(mensch_id4, MENSCH_GESCHW, 0)
elif event.keysym == 'w':
c.move(mensch_id5, 0, -MENSCH_GESCHW)
c.move(mensch_id6, 0, -MENSCH_GESCHW)
c.move(mensch_id7, 0, -MENSCH_GESCHW)
c.move(mensch_id8, 0, -MENSCH_GESCHW)
elif event.keysym == 's':
c.move(mensch_id5, 0, MENSCH_GESCHW)
c.move(mensch_id6, 0, MENSCH_GESCHW)
c.move(mensch_id7, 0, MENSCH_GESCHW)
c.move(mensch_id8, 0, MENSCH_GESCHW)
elif event.keysym == 'a':
c.move(mensch_id5, -MENSCH_GESCHW, 0)
c.move(mensch_id6, -MENSCH_GESCHW, 0)
c.move(mensch_id7, -MENSCH_GESCHW, 0)
c.move(mensch_id8, -MENSCH_GESCHW, 0)
elif event.keysym == 'd':
c.move(mensch_id5, MENSCH_GESCHW, 0)
c.move(mensch_id6, MENSCH_GESCHW, 0)
c.move(mensch_id7, MENSCH_GESCHW, 0)
c.move(mensch_id8, MENSCH_GESCHW, 0)
c.bind_all('<Key>', menschen_beweg)
from random import randint
spike_id = list()
spike_r = list()
spike_geschw = list()
MIN_spike_R = 8
MAX_spike_R = 12
MAX_spike_GESCHW = 7
GAP = 100
def erstelle_spike():
y = -HEIGHT - GAP
x = randint(0, WIDTH)
r = randint(MIN_spike_R, MAX_spike_R)
id1 = c.create_polygon(x + 5, y + 5, x + 30, y + 5, x + 15, y + 30, fill='black')
spike_id.append(id1)
spike_r.append(r)
spike_geschw.append(randint(5, MAX_spike_GESCHW))
def bewege_spikes():
for i in range(len(spike_id)):
c.move(spike_id[i], 0, spike_geschw[i])
from time import sleep, time
spike_CHANCE = 7
TIME_LIMIT = 100
BONUS_SCORE = 500
def hole_koord(id_num):
pos = c.coords(id_num)
x = (pos[0] + pos[2])/2
y = (pos[1] + pos[3])/2
return x, y
def lösche_spike(i):
del spike_r[i]
del spike_geschw[i]
c.delete(spike_id[i])
del spike_id[i]
def entf_spikes():
for i in range(len(spike_id)-1, -1, -1):
x, y = hole_koord(spike_id[i])
if x < -GAP:
lösche_spike(i)
from math import sqrt
def distanz(id1, id2):
x1, y1 = hole_koord(id1)
x2, y2 = hole_koord(id2)
return sqrt((x2 - x1)**2 + (y2 - y1)**2)
def kollision():
points = 0
for spike in range(len(spike_id)-1, -1, -1):
if distanz(mensch_id2, spike_id[spike]) < (MENSCH_R + spike_r[spike]):
global lives_player_1
lives_player_1 -= 1
lösche_spike(spike)
elif distanz(mensch_id6, spike_id[spike]) < (MENSCH_R + spike_r[spike]):
global lives_player_2
lives_player_2 -= 1
lösche_spike(spike)
return points
c.create_text(50, 30, text='ZEIT', fill='white' )
c.create_text(150, 30, text='LEBEN SPIELER 1', fill='white' )
c.create_text(300, 30, text='LEBEN SPIELER 2', fill='white' )
time_text = c.create_text(50, 50, fill='white' )
lives_text1 = c.create_text(150, 50, fill='white' )
lives_text2 = c.create_text(300, 50, fill='white' )
def zeige_leben1(lives_player_1):
c.itemconfig(lives_text1, text=str(lives_player_1))
def zeige_leben2(lives_player_2):
c.itemconfig(lives_text2, text=str(lives_player_2))
def zeige_zeit(time_left):
c.itemconfig(time_text, text=str(time_left))
score = 0
bonus = 0
ende = time() + TIME_LIMIT
#HAUPTSCHLEIFE
def haupt_schleife():
global ende
global score
global bonus
while death <= lives_player_1 and death <= lives_player_2 and time() < ende:
if randint(1, spike_CHANCE) == 1:
erstelle_spike()
bewege_spikes()
entf_spikes()
score += kollision()
if (int(score / BONUS_SCORE)) > bonus:
bonus += 1
ende += 5
zeige_leben1(lives_player_1)
zeige_leben2(lives_player_2)
zeige_zeit(int(ende - time()))
window.update()
sleep(0.01)
if death - 1 >= lives_player_1:
c.create_text(MID_X, MID_Y, \
text='SPIELER 2 HAT GEWONNEN', fill='white', font=('Helvetica',30))
elif death - 1 >= lives_player_2:
c.create_text(MID_X, MID_Y, \
text='SPIELER 1 HAT GEWONNEN', fill='white', font=('Helvetica',30))
else:
c.create_text(MID_X, MID_Y, \
text='UNENTSCHIEDEN', fill='white', font=('Helvetica',30))
window.update()
sleep(5)
menu_schleife()
def menu_schleife():
lives_player_1 = 3
lives_player_2 = 3
haupt_schleife()
haupt_schleife()
Ich benutze idle 3.5(32bit) Wenn ich das Programm starte funktioniert alles aber wenn haupt_schleife endet setzt menu_schleife die werte nicht zurück. kann mir jemand helfen ?