from github
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
from tkinter import *
|
||||
|
||||
from Game import Game
|
||||
|
||||
|
||||
# maze.pac Datei wird ausgelesen
|
||||
def read_current_maze(filename):
|
||||
cells = []
|
||||
|
||||
try:
|
||||
with open("../Game_Package/" + filename, "r") as file:
|
||||
data = file.read()
|
||||
lines = data.split("\n")
|
||||
|
||||
for line in lines:
|
||||
inner_list = []
|
||||
cells.append(inner_list)
|
||||
for f in line:
|
||||
inner_list.append(int(f))
|
||||
|
||||
# rotate
|
||||
temp = []
|
||||
for i in range(len(cells)):
|
||||
temp.append([])
|
||||
for j in range(len(cells)):
|
||||
temp[i].append(
|
||||
cells[j][i]) # füllt das 2d Array an richtiger Stelle mit den Werten aus der maze.pac Datei
|
||||
|
||||
return temp
|
||||
|
||||
except FileNotFoundError:
|
||||
print("File Not Found")
|
||||
|
||||
|
||||
# überschreibt aktuelles Labyrinth in maze.pac mit neu gezeichnetem Labyrinth
|
||||
def write_maze():
|
||||
output = ""
|
||||
|
||||
for x, i in enumerate(cells):
|
||||
for y, j in enumerate(i):
|
||||
if cells[y][x] == 3:
|
||||
cells[y][x] = 1
|
||||
if cells[y][x] == 4:
|
||||
cells[y][x] = 0
|
||||
|
||||
output += str(cells[y][x])
|
||||
|
||||
if x < 29:
|
||||
output += "\n"
|
||||
|
||||
with open("../Game_Package/maze.pac", "w") as file:
|
||||
file.write(output)
|
||||
|
||||
|
||||
cells = read_current_maze("maze.pac")
|
||||
|
||||
|
||||
def on_mouse_down(e, left):
|
||||
x = e.x // 26
|
||||
y = e.y // 26
|
||||
|
||||
if cells[x][y] == 0 or cells[x][y] == 1:
|
||||
if left:
|
||||
cells[x][y] = 1
|
||||
canvas.create_rectangle(x * 26 + 1, y * 26 + 1, x * 26 + 26, y * 26 + 26, fill="#969696", width=0)
|
||||
else:
|
||||
cells[x][y] = 0
|
||||
canvas.create_rectangle(x * 26 + 1, y * 26 + 1, x * 26 + 26, y * 26 + 26, fill="#FFFFFF", width=0)
|
||||
|
||||
|
||||
def draw_canvas_content():
|
||||
canvas.delete("all")
|
||||
canvas.create_rectangle(0, 0, 780, 780, fill="#FFFFFF", width=0)
|
||||
for x, i in enumerate(cells):
|
||||
for y, j in enumerate(i):
|
||||
if cells[x][y] == 1:
|
||||
canvas.create_rectangle(x * 26, y * 26, x * 26 + 26, y * 26 + 26, fill="#969696", width=0)
|
||||
if cells[x][y] == 2 or cells[x][y] == 3:
|
||||
canvas.create_rectangle(x * 26, y * 26, x * 26 + 26, y * 26 + 26, fill="#556dad", width=0)
|
||||
if cells[x][y] == 4:
|
||||
canvas.create_rectangle(x * 26, y * 26, x * 26 + 26, y * 26 + 26, fill="#55ad68", width=0)
|
||||
|
||||
canvas.create_line(0, y * 26, 780, y * 26, fill="#919191", width=1)
|
||||
|
||||
canvas.create_line(x * 26, 0, x * 26, 780, fill="#919191", width=1)
|
||||
|
||||
|
||||
def on_start_clicked():
|
||||
write_maze()
|
||||
root.withdraw()
|
||||
Game()
|
||||
root.deiconify()
|
||||
block_important_cells()
|
||||
|
||||
|
||||
def reload_standard_maze():
|
||||
global cells
|
||||
cells = read_current_maze("standardmaze.pac")
|
||||
block_important_cells()
|
||||
draw_canvas_content()
|
||||
|
||||
|
||||
def block_important_cells():
|
||||
# Idle-Points werden blockiert
|
||||
cells[2][1] = cells[2][27] = cells[27][1] = cells[27][27] = 4
|
||||
|
||||
for x, i in enumerate(cells):
|
||||
for y, j in enumerate(i):
|
||||
if x <= 1 or y < 1 or y >= 28 or x >= 28:
|
||||
cells[x][y] = 3
|
||||
|
||||
# Labyrinth-Öffnung an den Seiten wird blockiert.
|
||||
cells[0][13] = cells[1][13] = cells[28][13] = cells[29][13] = 4
|
||||
|
||||
|
||||
# Labyrinth wird geleert
|
||||
def clear_all():
|
||||
for x, i in enumerate(cells):
|
||||
for y, j in enumerate(i):
|
||||
cells[x][y] = 0 if cells[x][y] != 2 else 2
|
||||
# wichtige Zellen werden blockiert
|
||||
block_important_cells()
|
||||
draw_canvas_content()
|
||||
|
||||
|
||||
root = Tk()
|
||||
|
||||
# Center Window
|
||||
screen_width = root.winfo_screenwidth()
|
||||
screen_height = root.winfo_screenheight()
|
||||
|
||||
x = (screen_width / 2) - (1000 / 2)
|
||||
y = (screen_height / 2) - (780 / 2)
|
||||
|
||||
root.geometry('%dx%d+%d+%d' % (1000, 780, x, y))
|
||||
# End Center Window
|
||||
|
||||
# Tkinter wird angepasst
|
||||
root.resizable(False, False)
|
||||
root.title("PacMan")
|
||||
root.iconphoto(False, PhotoImage(file="../Game_Package/PacMan.png"))
|
||||
|
||||
canvas = Canvas(root, width=780, height=780)
|
||||
canvas.pack(side=LEFT)
|
||||
canvas.bind("<B1-Motion>", lambda x: on_mouse_down(x, True))
|
||||
canvas.bind("<B3-Motion>", lambda x: on_mouse_down(x, False))
|
||||
canvas.bind("<1>", lambda x: on_mouse_down(x, True))
|
||||
canvas.bind("<3>", lambda x: on_mouse_down(x, False))
|
||||
|
||||
font = ("Comic Sans MS", 15)
|
||||
|
||||
# Buttons werden generiert und mit Funktionen ausgestattet
|
||||
button = Button(root, text="Start", width=10, height=1, command=on_start_clicked, borderwidth=0, background="#55ad68",
|
||||
font=font)
|
||||
button.pack(anchor=CENTER, side=TOP, pady=10)
|
||||
|
||||
button_reload = Button(root, text="Standard", width=10, height=1, command=reload_standard_maze, borderwidth=0,
|
||||
background="#e08c70", font=font)
|
||||
button_reload.pack(anchor=CENTER, side=TOP, pady=10)
|
||||
|
||||
button_reload = Button(root, text="Speichern", width=10, height=1,
|
||||
command=lambda: [write_maze(), block_important_cells(), draw_canvas_content()], borderwidth=0,
|
||||
background="#55ad68", font=font)
|
||||
button_reload.pack(anchor=CENTER, side=TOP, pady=10)
|
||||
|
||||
button_reload = Button(root, text="Clear", width=10, height=1, command=clear_all, borderwidth=0, background="#e08c70",
|
||||
font=font)
|
||||
button_reload.pack(anchor=CENTER, side=TOP, pady=10)
|
||||
|
||||
label_hello = Label(root, font=font,
|
||||
text="Willkommen bei PacMan! \n male dein eigenes Labyrinth oder verwende das Vorhandene",
|
||||
wraplength=220)
|
||||
label_hello.pack(anchor=CENTER, side=TOP, pady=10)
|
||||
|
||||
label = Label(root, font=font,
|
||||
text="Verwende \n 'Linke Maustaste' \n um eine Wand zu malen, \n 'Rechte Maustaste'"
|
||||
" um eine Wand zu löschen \n <--",
|
||||
wraplength=220)
|
||||
label.pack(anchor=CENTER, side=TOP, pady=10)
|
||||
|
||||
block_important_cells()
|
||||
|
||||
draw_canvas_content()
|
||||
|
||||
root.mainloop()
|
||||
Reference in New Issue
Block a user