Advertisement
CrispyCabot

Untitled

Feb 20th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.83 KB | None | 0 0
  1. #SnakeVsRoyale.py
  2. import pygame
  3. import os
  4. import math
  5. from random import randint
  6. from pygame.locals import *
  7. import time
  8.  
  9. pygame.init()
  10.  
  11. width = 800
  12. height = 500
  13. size = 10
  14. win = pygame.display.set_mode((width,height))
  15. pygame.display.set_caption("Snake Royale")
  16.  
  17. PATH = os.path.abspath(__file__)
  18. PATH = PATH[0:-16] #-16 to chop off SnakeVsRoyale.py
  19. font = pygame.font.SysFont('', 24)
  20. bigFont = pygame.font.SysFont('', 30)
  21.  
  22. clock = pygame.time.Clock()
  23.  
  24. length = 1
  25.  
  26. class Snake:
  27. global length
  28. def __init__(self, pos, dir, name):
  29. self.bod = [pos] #Lists [[x,y], [x,y]...]
  30. self.dir = dir #String 'direction'
  31. self.pos = pos.copy() #List [x,y]
  32. self.name = name #Name 'Chris'
  33. self.length = 1
  34. self.kills = 0
  35. self.alive = True
  36. self.color = (randint(100,255),randint(100,255),randint(100,255)) #Start at 100 so it's not black or dark
  37. def getInfo(self):
  38. return [self.bod.copy(), self.dir, self.pos.copy()]
  39. def setDir(self, info):
  40. self.dir = getattr(playerUpdates, self.name)(self.pos.copy(), self.bod.copy(), self.dir, info.copy())
  41. def update(self, win):
  42. if self.alive:
  43. if self.dir == 'right':
  44. self.pos[0]+=size
  45. elif self.dir == 'left':
  46. self.pos[0]-=size
  47. elif self.dir == 'up':
  48. self.pos[1]-=size
  49. elif self.dir == 'down':
  50. self.pos[1]+=size
  51. else:
  52. print("No direction set", self.name)
  53. self.bod.append([self.pos[0], self.pos[1]])
  54. if len(self.bod) > length: #length is global, self.length is the class variable
  55. self.bod.pop(0)
  56. if self.alive:
  57. for i in self.bod:
  58. pygame.draw.rect(win, self.color, pygame.Rect(i[0], i[1], size, size))
  59. nameText = font.render(self.name, True, (100,100,100))
  60. loc = nameText.get_rect()
  61. loc.center = (self.pos[0]+10, self.pos[1]-14)
  62. w, h = loc.size
  63. pygame.draw.rect(win, (255,255,255), pygame.Rect(loc.x, loc.y, w, h))
  64. win.blit(nameText, loc)
  65. else:
  66. self.bod = []
  67. self.pos =[-100,-100]
  68.  
  69. def main():
  70. global length
  71. players = ['Chris', 'Chris']
  72. snakeList = []
  73. info = []
  74. tickRate = 5
  75. feed = []
  76.  
  77. dirs = ['right', 'left', 'up', 'down']
  78. for i in players:
  79. snake = Snake([randint(1,(width/size)-2)*size, randint(1,(height/size)-2)*size], dirs[randint(0,3)], i)
  80. snakeList.append(snake)
  81.  
  82. end = True
  83. playing = True
  84. tStart = time.time()
  85. while playing:
  86. clock.tick(tickRate)
  87. for event in pygame.event.get():
  88. if event.type == QUIT:
  89. playing = False
  90. end = False
  91.  
  92. info = []
  93. for i in snakeList:
  94. info.append(i.getInfo())
  95. for i in snakeList:
  96. i.setDir(info.copy())
  97. #Check hit
  98. for i in snakeList:
  99. if i.alive:
  100. inf = i.getInfo()
  101. loc = inf[2]
  102. for x in info:
  103. if loc in x[0]:
  104. if inf[0]==x[0]: #Checks if it is itself
  105. temp = x[0].copy()
  106. temp.remove(loc)
  107. if loc in temp: #Checks to see if the value is in the list twice
  108. i.alive = False
  109. snakeList.remove(i)
  110. feed.append([i.name+' is out (Hit itself)', 0])
  111. else: #Makes sure it isn't current position
  112. i.alive = False
  113. snakeList.remove(i)
  114. feed.append([i.name+' is out (Hit Snake)', 0])
  115. if loc[0] < 0 or loc[0]>=width or loc[1]<0 or loc[1]>=height:
  116. i.alive = False
  117. snakeList.remove(i)
  118. feed.append([i.name+' is out (Border)', 0])
  119. if (time.time()-tStart) > 1:
  120. length += 1
  121. tStart = time.time()
  122. if length > 3:
  123. tickRate = 30
  124.  
  125. keys = pygame.key.get_pressed()
  126. for i in keys:
  127. if i:
  128. end = False
  129. playing = False
  130.  
  131. #Draw everything
  132. pygame.draw.rect(win, (0,0,0), pygame.Rect(0,0,width,height)) #black background
  133. for i in snakeList:
  134. i.update(win)
  135. ycounter = 20
  136. for i in feed:
  137. text = bigFont.render(i[0], True, (0,0,0))
  138. loc = text.get_rect()
  139. loc.topleft = (20,ycounter)
  140. w, h = loc.size
  141. pygame.draw.rect(win, (255,255,255), pygame.Rect(loc.x-5, loc.y-5, w+10, h+10))
  142. win.blit(text, loc)
  143. ycounter+=h+15
  144. i[1] += 2
  145. if i[1] > 200:
  146. feed.remove(i)
  147. pygame.draw.rect(win, (255,255,255), pygame.Rect(0,0,width,height), 1) #White border
  148. pygame.display.update()
  149.  
  150. while end: #This doesn't do anything I think
  151. clock.tick(tickRate)
  152. for event in pygame.event.get():
  153. if event.type == QUIT:
  154. end = False
  155. #Draw everything
  156. pygame.draw.rect(win, (0,0,0), pygame.Rect(0,0,width,height)) #Background
  157.  
  158.  
  159. pygame.display.update()
  160. pygame.quit()
  161.  
  162.  
  163. class playerUpdates:
  164. #pos is [x,y] bod is [[x,y],[x,y]...]
  165. #info is [[bod, dir, pos], [bod, dir, pos]...]
  166. def Chris(pos, bod, dir, info):
  167. def hit(dirr, info, bod, pos):
  168. newX, newY = pos[0], pos[1]
  169. if dirr == 'right':
  170. newX += size
  171. if dirr == 'left':
  172. newX -= size
  173. if dirr == 'up':
  174. newY -= size
  175. if dirr == 'down':
  176. newY += size
  177. if newX >= width or newX < 0 or newY >= height or newY < 0:
  178. return True
  179. for i in info:
  180. badX, badY = i[2][0], i[2][1]
  181. if i[1] == 'right':
  182. badX += size
  183. if i[1] == 'left':
  184. badX -= size
  185. if i[1] == 'up':
  186. badY -= size
  187. if i[1] == 'down':
  188. badY += size
  189.  
  190. if [newX, newY] in i[0]:
  191. return True
  192. if [newX, newY] == [badX, badY]:
  193. return True
  194. return False
  195. if not(hit(dir, info, bod, pos)):
  196. return dir
  197. else:
  198. dirs = ['right', 'left', 'up', 'down']
  199. for i in range(0,3):
  200. newDir = dirs.pop(randint(0,len(dirs)-1))
  201. if not(hit(newDir, info, bod, pos)):
  202. return newDir
  203. return dir
  204.  
  205. newX, newY = pos[0], pos[1]
  206. if dir == 'right':
  207. newX += size
  208. if dir == 'left':
  209. newX -= size
  210. if dir == 'up':
  211. newY -= size
  212. if dir == 'down':
  213. newY += size
  214.  
  215. if newX >= width:
  216. return 'up'
  217. if newX < 0:
  218. return 'down'
  219. if newY >= height:
  220. return 'right'
  221. if newY < 0:
  222. return 'left'
  223. return dir
  224. def Person(pos, bod, dir, info):
  225. newX, newY = pos[0], pos[1]
  226. if dir == 'right':
  227. newX += size
  228. if dir == 'left':
  229. newX -= size
  230. if dir == 'up':
  231. newY -= size
  232. if dir == 'down':
  233. newY += size
  234.  
  235. if newX >= width:
  236. return 'up'
  237. if newX < 0:
  238. return 'down'
  239. if newY >= height:
  240. return 'right'
  241. if newY < 0:
  242. return 'left'
  243. return dir
  244. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement