Generell bin ich ein ziemlicher Anfänger in Sachen programmieren.
Ich möchte euch mein Snake Multiplayer Spiel zeigen und gerne erfahren was ihr darüber denkt.(Kritik, Verbesserungsvorschläge, alles woraus ich was lernen kann )
Code: Alles auswählen
from tkinter import *
import random
class Snake:
def Right(self, event):
self._Richtung = "Right"
def Up(self, event):
self._Richtung = "Up"
def Left(self, event):
self._Richtung = "Left"
def Down(self, event):
self._Richtung = "Down"
def Laufe(self):
if self._Richtung == "Right":
canvas.create_line (self._x, self._y, self._x + 2, self._y, fill = self._color, width = 1)
self._x = self._x + 2
if self._Richtung == "Up":
canvas.create_line (self._x, self._y, self._x, self._y - 2, fill = self._color)
self._y = self._y - 2
if self._Richtung == "Left":
canvas.create_line (self._x, self._y, self._x - 2, self._y, fill = self._color)
self._x = self._x - 2
if self._Richtung == "Down":
canvas.create_line (self._x, self._y, self._x, self._y + 2, fill = self._color)
self._y = self._y + 2
self._Koordinate = str(self._x) + "/" + str(self._y)
if self._Koordinate in Spiel._Speicher or self._x < 0 or self._x > 800 or self._y < 0 or self._y > 800:
if self._Leben > 0:
self._Leben -= 1
Anzeige.delete(self._Leben_Menge)
self._Leben_Menge = Anzeige.create_text(self._x_Lebensanzeige, 25, text = str(self._Leben), font = ("Elephant", 20), fill = self._color)
canvas.after(self._Geschwindigkeit, self.Laufe)
else:
self._Text = self._Farbe + " hat Verloren!"
canvas.create_text(400, 400, text = self._Text, font = ("Arial", 70), fill = "white")
Snake1._Check = True
Snake2._Check = True
Spiel.Punkte(self._Farbe)
elif self._Check == False:
if str(self._Koordinate + "Leben") in Spiel._Speicher:
self._Leben += 1
Anzeige.delete(self._Leben_Menge)
self._Leben_Menge = Anzeige.create_text(self._x_Lebensanzeige, 25, text = str(self._Leben), font = ("Elephant", 20), fill = self._color)
Spiel.Leben_eingesammelt()
Spiel._Speicher.append(self._Koordinate)
if Spiel._Pausiert != True:
canvas.after(self._Geschwindigkeit, self.Laufe)
else:
self.Pausiert()
def Pausiert(self):
if Spiel._Pausiert == True:
canvas.after(100, self.Pausiert)
else:
self.Laufe()
class Snake1(Snake):
def __init__(self):
self._Richtung = "Right"
self._x = 500
self._y = 400
self._color = "red"
self._Farbe = "Rot"
self._Check = False
self._Leben = 0
self._x_Lebensanzeige = 200
self._Geschwindigkeit = 30
self._Leben_Menge = Anzeige.create_text(self._x_Lebensanzeige, 25, text = str(self._Leben), font = ("Elephant", 20), fill = self._color)
fenster.bind("<Right>", self.Right)
fenster.bind("<Up>", self.Up)
fenster.bind("<Left>", self.Left)
fenster.bind("<Down>", self.Down)
self.Laufe()
class Snake2(Snake):
def __init__(self):
self._Richtung = "Left"
self._x = 300
self._y = 400
self._color = "green"
self._Farbe = "Grün"
self._Check = False
self._Leben = 0
self._x_Lebensanzeige = 150
self._Geschwindigkeit = 30
self._Leben_Menge = Anzeige.create_text(self._x_Lebensanzeige, 25, text = str(self._Leben), font = ("Elephant", 20), fill = self._color)
fenster.bind("<d>", self.Right)
fenster.bind("<w>", self.Up)
fenster.bind("<a>", self.Left)
fenster.bind("<s>", self.Down)
self.Laufe()
class Spiel:
def __init__(self):
self._Speicher = ["L", "L", "L", "L"]
self._x = 0
self._y = 0
self._Geschwindigkeit = 30
self._Pausiert = False
self._Punkte_Rot = 0
self._Punkte_Grün = 0
self._Turbo_Zähler_rot = 3
self._Turbo_Zähler_grün = 3
Anzeige.create_text(50, 25, text = "Leben:", font = ("Elephant", 20))
Anzeige.create_rectangle(50, 50, 250, 250, fill = "yellow", outline = "darkgreen", width = 5, tags = "Nochmal")
Anzeige.create_text(150, 150, text = "NOCHMAL", font = ("Chiller", 40), tags = "Nochmal")
Anzeige.tag_bind("Nochmal", "<1>", self.Nochmal)
fenster.bind("<space>", self.Nochmal)
Anzeige.create_text(150, 300, text = "Geschwindigkeit:", font = ("Elephant", 20))
Anzeige.create_text(150, 330, text = "x1/1000 Sekunde pro Pixel", font = ("Arial", 10))
Anzeige.create_line(50, 350, 250, 350)
self._Geschwindigkeitszahl = Anzeige.create_text(150, 370, text = "30", font = ("Arial", 15))
self._Knopf = Anzeige.create_rectangle(40 + self._Geschwindigkeit, 340, self._Geschwindigkeit + 60, 360, fill = "lightblue", tags = "Geschwindigkeitsregler")
Anzeige.tag_bind("Geschwindigkeitsregler", "<1>", self.Geschwindigkeit_einstellen_Press)
Anzeige.tag_bind("Geschwindigkeitsregler", "<B1-Motion>", self.Geschwindigkeit_einstellen_Motion)
Anzeige.create_rectangle(220, 10, 290, 40, fill = "yellow", outline = "darkgreen", width = 3, tags = "Lebensreset")
Anzeige.create_text(255, 25, text = "Reset", font = ("Arial", 18), tags = "Reset")
Anzeige.tag_bind("Reset", "<ButtonPress-1>", self.Reset)
Anzeige.create_rectangle(50, 400, 250, 440, fill = "yellow", outline = "darkgreen", width = 3, tags = "Pause")
self._Pause = Anzeige.create_text(150, 420, text = "Pause", font = ("Elephant", 20), tags = "Pause")
Anzeige.tag_bind("Pause", "<1>", self.Pause)
fenster.bind("<p>", self.Pause)
Anzeige.tag_bind("Weiter", "<1>", self.Weiter)
fenster.bind("<Return>", self.Weiter)
Anzeige.create_line(20, 490, 280, 490, width = 3)
Anzeige.create_line(150, 470, 150, 530, width = 3)
Anzeige.create_text(200, 480, text = "ROT", font = ("Elephant", 16), fill = "red")
Anzeige.create_text(100, 480, text = "GRÜN", font = ("Elephant", 16), fill = "green")
self._Punkte_Grün_Anzeige = Anzeige.create_text(100, 510, text = self._Punkte_Grün, font = ("Chiller", 30))
self._Punkte_Rot_Anzeige = Anzeige.create_text(200, 510, text = self._Punkte_Rot, font = ("Chiller", 30))
Anzeige.create_text(50, 570, text = "Turbo:", font = ("Elephant", 20))
self._Turbo_rot_1 = Anzeige.create_rectangle(100, 560, 150, 570, fill = "red")
self._Turbo_rot_2 = Anzeige.create_rectangle(160, 560, 210, 570, fill = "red")
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
self._Turbo_grün_1 = Anzeige.create_rectangle(100, 580, 150, 590, fill = "green")
self._Turbo_grün_2 = Anzeige.create_rectangle(160, 580, 210, 590, fill = "green")
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
fenster.bind("<Shift_L>", self.Turbo_grün)
fenster.bind("<0>", self.Turbo_rot)
self.Leben()
def Turbo_rot(self, event):
if self._Turbo_Zähler_rot != 0:
if Snake1._Geschwindigkeit > 20:
Snake1._Geschwindigkeit -= 20
else:
Snake1._Geschwindigkeit = 1
if self._Turbo_Zähler_rot == 3:
Anzeige.delete(self._Turbo_rot_3)
if self._Turbo_Zähler_rot == 2:
Anzeige.delete(self._Turbo_rot_2)
if self._Turbo_Zähler_rot == 1:
Anzeige.delete(self._Turbo_rot_1)
self._Turbo_Zähler_rot -= 1
canvas.after(3000, self.Turbo_ende)
def Turbo_grün(self, event):
if self._Turbo_Zähler_grün != 0:
if Snake2._Geschwindigkeit > 20:
Snake2._Geschwindigkeit -= 20
else:
Snake2._Geschwindigkeit = 1
if self._Turbo_Zähler_grün == 3:
Anzeige.delete(self._Turbo_grün_3)
if self._Turbo_Zähler_grün == 2:
Anzeige.delete(self._Turbo_grün_2)
if self._Turbo_Zähler_grün == 1:
Anzeige.delete(self._Turbo_grün_1)
self._Turbo_Zähler_grün -= 1
canvas.after(3000, self.Turbo_ende)
def Turbo_ende(self):
Snake1._Geschwindigkeit = self._Geschwindigkeit
Snake2._Geschwindigkeit = self._Geschwindigkeit
def Punkte(self, Farbe):
if Farbe == "Rot":
self._Punkte_Grün += 1
elif Farbe == "Grün":
self._Punkte_Rot += 1
Anzeige.delete(self._Punkte_Grün_Anzeige, self._Punkte_Rot_Anzeige)
self._Punkte_Grün_Anzeige = Anzeige.create_text(100, 510, text = self._Punkte_Grün, font = ("Chiller", 30))
self._Punkte_Rot_Anzeige = Anzeige.create_text(200, 510, text = self._Punkte_Rot, font = ("Chiller", 30))
def Weiter(self, event):
self._Pausiert = False
Anzeige.delete(self._Pause)
self._Pause = Anzeige.create_text(150, 420, text = "Pause", font = ("Elephant", 20), tags = "Pause")
def Pause(self, event):
Anzeige.delete(self._Pause)
self._Pause = Anzeige.create_text(150, 420, text = "Weiter", font = ("Elephant", 20), tags = "Weiter")
self._Pausiert = True
self.Warten()
def Warten(self):
if self._Pausiert == True:
Anzeige.after(100, self.Warten)
def Reset(self, event):
Snake1._Leben = 0
Snake2._Leben = 0
Anzeige.delete(Snake1._Leben_Menge, Snake2._Leben_Menge)
Snake1._Leben_Menge = Anzeige.create_text(Snake1._x_Lebensanzeige, 25, text = str(Snake1._Leben), font = ("Elephant", 20), fill = Snake1._color)
Snake2._Leben_Menge = Anzeige.create_text(Snake2._x_Lebensanzeige, 25, text = str(Snake2._Leben), font = ("Elephant", 20), fill = Snake2._color)
self._Punkte_Grün = 0
self._Punkte_Rot = 0
Anzeige.delete(self._Punkte_Grün_Anzeige, self._Punkte_Rot_Anzeige)
self._Punkte_Grün_Anzeige = Anzeige.create_text(100, 510, text = self._Punkte_Grün, font = ("Chiller", 30))
self._Punkte_Rot_Anzeige = Anzeige.create_text(200, 510, text = self._Punkte_Rot, font = ("Chiller", 30))
if self._Turbo_Zähler_grün == 2:
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
if self._Turbo_Zähler_grün == 1:
self._Turbo_grün_2 = Anzeige.create_rectangle(160, 580, 210, 590, fill = "green")
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
if self._Turbo_Zähler_grün == 0:
self._Turbo_grün_1 = Anzeige.create_rectangle(100, 580, 150, 590, fill = "green")
self._Turbo_grün_2 = Anzeige.create_rectangle(160, 580, 210, 590, fill = "green")
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
if self._Turbo_Zähler_rot == 2:
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
if self._Turbo_Zähler_rot == 1:
self._Turbo_rot_2 = Anzeige.create_rectangle(160, 560, 210, 570, fill = "red")
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
if self._Turbo_Zähler_rot == 0:
self._Turbo_rot_1 = Anzeige.create_rectangle(100, 560, 150, 570, fill = "red")
self._Turbo_rot_2 = Anzeige.create_rectangle(160, 560, 210, 570, fill = "red")
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
self._Turbo_Zähler_grün = 3
self._Turbo_Zähler_rot = 3
def Geschwindigkeit_einstellen_Press(self, event):
self._Knopf_x = event.x
def Geschwindigkeit_einstellen_Motion(self, event):
delta_x = event.x - self._Knopf_x
if 50 < event.x < 250:
Anzeige.move(self._Knopf, delta_x, 0)
Anzeige.delete(self._Geschwindigkeitszahl)
self._Geschwindigkeitszahl = Anzeige.create_text(150, 370, text = str(event.x - 50), font = ("Arial", 15))
Snake1._Geschwindigkeit = str(event.x - 50)
Snake2._Geschwindigkeit = str(event.x - 50)
self._Knopf_x = event.x
def Nochmal(self, event):
for item in canvas.find_all():
canvas.delete(item)
self._Speicher = ["L", "L", "L", "L"]
Snake1._x = 500
Snake1._y = 400
Snake1._Richtung = "Right"
Snake1._Check = False
if self._Turbo_Zähler_grün == 2:
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
if self._Turbo_Zähler_grün == 1:
self._Turbo_grün_2 = Anzeige.create_rectangle(160, 580, 210, 590, fill = "green")
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
if self._Turbo_Zähler_grün == 0:
self._Turbo_grün_1 = Anzeige.create_rectangle(100, 580, 150, 590, fill = "green")
self._Turbo_grün_2 = Anzeige.create_rectangle(160, 580, 210, 590, fill = "green")
self._Turbo_grün_3 = Anzeige.create_rectangle(220, 580, 270, 590, fill = "green")
if self._Turbo_Zähler_rot == 2:
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
if self._Turbo_Zähler_rot == 1:
self._Turbo_rot_2 = Anzeige.create_rectangle(160, 560, 210, 570, fill = "red")
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
if self._Turbo_Zähler_rot == 0:
self._Turbo_rot_1 = Anzeige.create_rectangle(100, 560, 150, 570, fill = "red")
self._Turbo_rot_2 = Anzeige.create_rectangle(160, 560, 210, 570, fill = "red")
self._Turbo_rot_3 = Anzeige.create_rectangle(220, 560, 270, 570, fill = "red")
self._Turbo_Zähler_grün = 3
self._Turbo_Zähler_rot = 3
Snake2._x = 300
Snake2._y = 400
Snake2._Richtung = "Left"
Snake2._Check = False
Snake1.Laufe()
Snake2.Laufe()
self.Leben()
def Leben(self):
self._x = random.randint(0, 798)
self._y = random.randint(0, 798)
self._Leben = canvas.create_rectangle(self._x, self._y, self._x, self._y, outline = "blue", fill = "blue")
self._Speicher.insert(0, str(self._x) + "/" + str(self._y) + "Leben")
self._Speicher.insert(1, str(self._x + 1) + "/" + str(self._y) + "Leben")
self._Speicher.insert(2, str(self._x) + "/" + str(self._y + 1) + "Leben")
self._Speicher.insert(3, str(self._x + 1) + "/" + str(self._y + 1) + "Leben")
def Leben_eingesammelt(self):
canvas.delete(self._Leben)
del self._Speicher[:4]
self.Leben()
fenster = Tk()
canvas = Canvas(fenster, width = 800, height = 800, background = "black")
Anzeige = Canvas(fenster, width = 300, height = 800, background = "white")
Spiel = Spiel()
Snake1 = Snake1()
Snake2 = Snake2()
canvas.pack(side = "left")
Anzeige.pack(side = "right")
fenster.mainloop()
Ich hoffe auf reichlich Feedback
Dark_Skorpion