Advertisement
Guest User

Untitled

a guest
May 21st, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.31 KB | None | 0 0
  1. import tkinter as tk
  2.  
  3. from class_in_other_file._snakeFood import SnakeFood
  4. from class_in_other_file._movement import Movement
  5.  
  6. import tkinter.messagebox as msgbox
  7.  
  8. """
  9. Main
  10. """
  11.  
  12.  
  13. class SnakeGame:
  14. def __init__(self, master, canvas):
  15. self._master = master
  16. self._c = canvas
  17. self._title = "The Real Snake Game"
  18.  
  19. self._headRow = 0
  20. self._headCol = 0
  21.  
  22. self._newHeadRow = None
  23. self._newHeadCol = None
  24. # photo = tk.PhotoImage("/cross.gif")
  25.  
  26. # BINDINGS
  27. self._master.bind('<Right>', lambda _: self.moveSnake(0, 1))
  28. self._master.bind('<Left>', lambda _: self.moveSnake(0, -1))
  29. self._master.bind('<Down>', lambda _: self.moveSnake(1, 0))
  30. self._master.bind('<Up>', lambda _: self.moveSnake(-1, 0))
  31. self._master.bind('<r>', lambda _: self.load_game())
  32. self._master.bind('<q>', lambda _: window.destroy())
  33.  
  34. # LOADER GAME
  35. self.load_game()
  36.  
  37. def load_game(self):
  38. """ Sætter spillet op """
  39. self._master.title(self._title)
  40. self.load_board()
  41. self.re_draw()
  42.  
  43. def re_draw(self):
  44. """ Opdaterer boardet """
  45. self._c.delete()
  46. self.draw_board()
  47.  
  48. def load_board(self):
  49. """ starter boardet """
  50. self.snakeBoard = \
  51. [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  52. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  53. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  54. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  55. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  56. [0, 0, 0, 1, 2, 3, 4, 0, 0, 0],
  57. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  58. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  59. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  60. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  61. ]
  62. # SnakeFood.placeFood(self, self.snakeBoard)
  63. #self._headCol, self._headRow = Movement.findSnakeHead(self)
  64. self.findSnakeHead()
  65.  
  66.  
  67. def draw_board(self):
  68. """ Kalder draw_cells for hver celle """
  69. self.rows = len(self.snakeBoard)
  70. self.cols = len(self.snakeBoard[0])
  71.  
  72. for self.row in range(self.rows):
  73. for self.col in range(self.cols):
  74. self.draw_cells(self.row, self.col, self.snakeBoard)
  75. # print(str(self.row) + " " + str(self.col))
  76.  
  77.  
  78. def draw_cells(self, row, col, snakeBoard):
  79. """ Tegner seperat cellerne ud fra snakeBoardet """
  80. self.margen = 5
  81. self.cellsize = 30
  82. self.x1 = self.margen + col * self.cellsize # x1
  83. self.x2 = self.x1 + self.cellsize # x2
  84. self.y1 = self.margen + row * self.cellsize # y1
  85. self.y2 = self.y1 + self.cellsize # y2
  86.  
  87. self._c.create_rectangle(self.x1, self.y1, self.x2, self.y2, fill="white", outline="black")
  88.  
  89. if snakeBoard[row][col] > 0:
  90. self._c.create_oval(self.x1, self.y1, self.x2, self.y2, fill="blue")
  91. elif snakeBoard[row][col] < 0:
  92. self._c.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")
  93.  
  94. self.removeTail()
  95.  
  96. def findSnakeHead(self):
  97. """ Finder hovedet af slangen via den maksimale værdi """
  98. self.rows = len(self.snakeBoard)
  99. self.cols = len(self.snakeBoard[0])
  100.  
  101. for self.row in range(self.rows):
  102. for self.col in range(self.cols):
  103. if self.snakeBoard[self.row][self.col] > self.snakeBoard[self._headRow][self._headCol]:
  104. self._headRow = self.row
  105. self._headCol = self.col
  106. #return self._headRow, self._headCol
  107.  
  108. def removeTail(self):
  109. """ Subtraherer alle tal < 0 i hele talrækken og gentegner. """
  110. self.rows = len(self.snakeBoard)
  111. self.cols = len(self.snakeBoard[0])
  112.  
  113. for self.row in range(self.rows):
  114. for self.col in range(self.cols):
  115. if self.snakeBoard[self.row][self.col] > 0:
  116. self.snakeBoard[self.row][self.col] -= 1
  117.  
  118. self.re_draw()
  119.  
  120. def moveSnake(self, drow, dcol):
  121. """ Flytter Snake i en ny retning. Tager en ny tillagt row/col værdi"""
  122. self._newHeadRow = self._headRow + drow
  123. self._newHeadCol = self._headCol + dcol
  124.  
  125. if ((self._newHeadRow < 0) or (self._newHeadRow >= self.rows) or
  126. (self._newHeadCol < 0) or (self._newHeadCol >= self.cols)):
  127. # Løb ind i en væg
  128. self.gameOver()
  129.  
  130. # Løb ind i sig selv
  131. elif self.snakeBoard[self._newHeadRow][self._newHeadCol] > 0:
  132. self.gameOver()
  133.  
  134. else:
  135. print("fejl")
  136. self.snakeBoard[self._newHeadRow][self._newHeadCol] = self.snakeBoard[self._headRow][self._headCol] + 1
  137.  
  138. self._headRow = self._newHeadRow
  139. self._headCol = self._newHeadCol
  140.  
  141. self.removeTail()
  142.  
  143. def gameOver(self):
  144. """ Slutter spillet og viser spilleren antal point opnået """
  145. # self._master.MessageBox.showinfo("Game Over")
  146. print("gameover")
  147.  
  148. self._c.create_text(155, 155, text="Game Over!", font=("Helvetica", 32, "bold"))
  149.  
  150.  
  151. if __name__ == "__main__":
  152. """ Kører fra starten af """
  153. window = tk.Tk()
  154.  
  155. c = tk.Canvas(window, width=310, height=310)
  156. c.pack()
  157. game = SnakeGame(window, c)
  158.  
  159. window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement