Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from class_in_other_file._snakeFood import SnakeFood
- from class_in_other_file._movement import Movement
- import tkinter.messagebox as msgbox
- """
- Main
- """
- class SnakeGame:
- def __init__(self, master, canvas):
- self._master = master
- self._c = canvas
- self._title = "The Real Snake Game"
- self._headRow = 0
- self._headCol = 0
- self._newHeadRow = None
- self._newHeadCol = None
- # photo = tk.PhotoImage("/cross.gif")
- # BINDINGS
- self._master.bind('<Right>', lambda _: self.moveSnake(0, 1))
- self._master.bind('<Left>', lambda _: self.moveSnake(0, -1))
- self._master.bind('<Down>', lambda _: self.moveSnake(1, 0))
- self._master.bind('<Up>', lambda _: self.moveSnake(-1, 0))
- self._master.bind('<r>', lambda _: self.load_game())
- self._master.bind('<q>', lambda _: window.destroy())
- # LOADER GAME
- self.load_game()
- def load_game(self):
- """ Sætter spillet op """
- self._master.title(self._title)
- self.load_board()
- self.re_draw()
- def re_draw(self):
- """ Opdaterer boardet """
- self._c.delete()
- self.draw_board()
- def load_board(self):
- """ starter boardet """
- self.snakeBoard = \
- [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 1, 2, 3, 4, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- ]
- # SnakeFood.placeFood(self, self.snakeBoard)
- #self._headCol, self._headRow = Movement.findSnakeHead(self)
- self.findSnakeHead()
- def draw_board(self):
- """ Kalder draw_cells for hver celle """
- self.rows = len(self.snakeBoard)
- self.cols = len(self.snakeBoard[0])
- for self.row in range(self.rows):
- for self.col in range(self.cols):
- self.draw_cells(self.row, self.col, self.snakeBoard)
- # print(str(self.row) + " " + str(self.col))
- def draw_cells(self, row, col, snakeBoard):
- """ Tegner seperat cellerne ud fra snakeBoardet """
- self.margen = 5
- self.cellsize = 30
- self.x1 = self.margen + col * self.cellsize # x1
- self.x2 = self.x1 + self.cellsize # x2
- self.y1 = self.margen + row * self.cellsize # y1
- self.y2 = self.y1 + self.cellsize # y2
- self._c.create_rectangle(self.x1, self.y1, self.x2, self.y2, fill="white", outline="black")
- if snakeBoard[row][col] > 0:
- self._c.create_oval(self.x1, self.y1, self.x2, self.y2, fill="blue")
- elif snakeBoard[row][col] < 0:
- self._c.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")
- self.removeTail()
- def findSnakeHead(self):
- """ Finder hovedet af slangen via den maksimale værdi """
- self.rows = len(self.snakeBoard)
- self.cols = len(self.snakeBoard[0])
- for self.row in range(self.rows):
- for self.col in range(self.cols):
- if self.snakeBoard[self.row][self.col] > self.snakeBoard[self._headRow][self._headCol]:
- self._headRow = self.row
- self._headCol = self.col
- #return self._headRow, self._headCol
- def removeTail(self):
- """ Subtraherer alle tal < 0 i hele talrækken og gentegner. """
- self.rows = len(self.snakeBoard)
- self.cols = len(self.snakeBoard[0])
- for self.row in range(self.rows):
- for self.col in range(self.cols):
- if self.snakeBoard[self.row][self.col] > 0:
- self.snakeBoard[self.row][self.col] -= 1
- self.re_draw()
- def moveSnake(self, drow, dcol):
- """ Flytter Snake i en ny retning. Tager en ny tillagt row/col værdi"""
- self._newHeadRow = self._headRow + drow
- self._newHeadCol = self._headCol + dcol
- if ((self._newHeadRow < 0) or (self._newHeadRow >= self.rows) or
- (self._newHeadCol < 0) or (self._newHeadCol >= self.cols)):
- # Løb ind i en væg
- self.gameOver()
- # Løb ind i sig selv
- elif self.snakeBoard[self._newHeadRow][self._newHeadCol] > 0:
- self.gameOver()
- else:
- print("fejl")
- self.snakeBoard[self._newHeadRow][self._newHeadCol] = self.snakeBoard[self._headRow][self._headCol] + 1
- self._headRow = self._newHeadRow
- self._headCol = self._newHeadCol
- self.removeTail()
- def gameOver(self):
- """ Slutter spillet og viser spilleren antal point opnået """
- # self._master.MessageBox.showinfo("Game Over")
- print("gameover")
- self._c.create_text(155, 155, text="Game Over!", font=("Helvetica", 32, "bold"))
- if __name__ == "__main__":
- """ Kører fra starten af """
- window = tk.Tk()
- c = tk.Canvas(window, width=310, height=310)
- c.pack()
- game = SnakeGame(window, c)
- window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement