Snake Multiplayer Spiel
Verfasst: Freitag 14. Februar 2014, 19:16
Hallo liebe Python Community
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
)
Ich hoffe auf reichlich Feedback
Dark_Skorpion
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