PageRenderTime 68ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/classes/send.py

https://gitlab.com/NakakapagpabagabagHm/cs145mp
Python | 595 lines | 428 code | 99 blank | 68 comment | 113 complexity | 08b022d75f6fef958426fef3821628f5 MD5 | raw file
  1. #Send thread
  2. import pygame
  3. import ConfigParser
  4. from pygame.locals import *
  5. import threading, os
  6. from time import time
  7. from random import randint
  8. from ship import *
  9. from planet import *
  10. from UI import *
  11. from titleSprite import *
  12. from receive import *
  13. class Send(threading.Thread):
  14. def __init__(self, socket, screen):
  15. threading.Thread.__init__(self)
  16. #End Game
  17. self.ongoing = True
  18. self.lead = []
  19. #Receive Thread
  20. self.receive = None
  21. #Initialize Input Values
  22. self.socket = socket
  23. self.screen = screen
  24. self.running = False
  25. self.time = 0.00
  26. #Background Initialization
  27. self.bg = pygame.Surface((800, 600))
  28. self.bg = self.bg.convert()
  29. self.bg.fill((255,255,255))
  30. self.image = pygame.image.load('resources/background.png').convert_alpha()
  31. self.imageRect = self.image.get_rect()
  32. #Initialize Sprite Group
  33. self.group = pygame.sprite.Group()
  34. #Initialize Ship List
  35. self.ships = []
  36. #Initialize Planet List
  37. self.planets = []
  38. #Initialize Orbit List
  39. self.orbits = []
  40. #Initialize Orbit Group
  41. self.orbitGroup = pygame.sprite.Group()
  42. #Initialize Bullet List and Group
  43. self.bullets = []
  44. self.bulletGroup = pygame.sprite.Group()
  45. #Initialize Timer
  46. self.timer = timer()
  47. self.group.add(self.timer)
  48. #Initialize Kill Message List
  49. self.killMessages = killMessages()
  50. #Initialize Running Values
  51. self.running = True
  52. self.resetControls()
  53. self.time = time()
  54. #Debug Key
  55. self.k_g = False
  56. def run(self):
  57. while self.running:
  58. #Debug
  59. if self.k_g:
  60. for i in self.planets:
  61. if i.ownership == None:
  62. print 'planet', i.name , i.instance, "ownership: None"
  63. else:
  64. print 'planet', i.name, i.instance, "ownership:", i.ownership.color
  65. raw_input()
  66. if self.ongoing == False:
  67. self.running = False
  68. rankings = Rankings(self.socket, self.screen, self.lead)
  69. rankings.start()
  70. return
  71. #Controls: Ship Movement
  72. #if time() - self.time >= 1.00/60:
  73. self.checkEvents()
  74. message = "k_w " + str(self.k_w) + " k_s " + str(self.k_s) + " k_q " + str(self.k_q) + " k_e " + str(self.k_e) + " k_space " + str(self.k_space) + "\n"
  75. self.socket.sendall(message)
  76. # self.time = time()
  77. #Draw Big Planet Orbits
  78. for i in self.planets:
  79. collided = False
  80. for j in self.ships:
  81. if pygame.sprite.collide_circle(i.orbit, j):
  82. collided = True
  83. i.orbit.drawOrbit(collided)
  84. #for i in self.ships:
  85. # for j in self.planets:
  86. # collided = False
  87. # if pygame.sprite.collide_circle(i, j.orbit):
  88. # collided = True
  89. # j.orbit.drawOrbit(collided)
  90. #Draw Background
  91. self.screen.blit(self.bg, (0,0))
  92. self.screen.blit(self.image, self.imageRect)
  93. #Update Sprites
  94. self.killMessages.updateMessages()
  95. self.orbitGroup.update()
  96. self.bulletGroup.update()
  97. self.group.update()
  98. #Draw Groups
  99. self.orbitGroup.draw(self.screen)
  100. self.bulletGroup.draw(self.screen)
  101. self.group.draw(self.screen)
  102. #Update Screen
  103. pygame.display.update()
  104. def resetControls(self):
  105. #Motion Keys
  106. self.k_w = False
  107. self.k_s = False
  108. self.k_q = False
  109. self.k_e = False
  110. self.k_space = False
  111. def checkEvents(self):
  112. for event in pygame.event.get():
  113. if event.type == QUIT:
  114. self.running = False
  115. os._exit(1)
  116. return
  117. if event.type == KEYDOWN:
  118. if event.key == K_ESCAPE:
  119. self.running = False
  120. return
  121. # A Ship Controls
  122. # w to accelerate
  123. if event.key == K_w:
  124. self.k_w = True
  125. else:
  126. self.k_w = False
  127. # s to deccelerate
  128. if event.key == K_s:
  129. self.k_s = True
  130. else:
  131. self.k_s = False
  132. # q to rotate counterclockwise
  133. if event.key == K_q:
  134. self.k_q = True
  135. # e to rotate clockwise
  136. if event.key == K_e:
  137. self.k_e = True
  138. # space to shoot
  139. if event.key == K_SPACE:
  140. self.k_space = True
  141. #Debug
  142. if event.key == K_g:
  143. self.k_g = True
  144. if event.type == KEYUP:
  145. if event.key == K_q:
  146. self.k_q = False
  147. if event.key == K_e:
  148. self.k_e = False
  149. if event.key == K_SPACE:
  150. self.k_space = False
  151. if event.key == K_g:
  152. self.k_g = False
  153. class Rankings:
  154. def __init__(self, socket, screen, names): #pass ship list here somewhere
  155. self.socket = socket
  156. self.screen = screen
  157. self.bg = pygame.Surface((800, 600))
  158. self.bg = self.bg.convert()
  159. self.bg.fill((255,255,255))
  160. self.image = pygame.image.load('resources/leaderboards.png').convert_alpha()
  161. self.imageRect = self.image.get_rect()
  162. self.running = True
  163. self.firstplace = pygame.image.load('resources/firstplace.png').convert_alpha()
  164. self.secondplace = pygame.image.load('resources/secondplace.png').convert_alpha()
  165. self.thirdplace = pygame.image.load('resources/thirdplace.png').convert_alpha()
  166. self.font = pygame.font.Font('resources/pixel.ttf',35)
  167. self.names = names
  168. def checkEvents(self):
  169. for event in pygame.event.get():
  170. if event.type == QUIT:
  171. self.running = False
  172. os._exit(1)
  173. return
  174. if event.type == KEYDOWN:
  175. if event.key == K_ESCAPE:
  176. self.running = False
  177. textmenu = TextMenu(socket.socket(socket.AF_INET, socket.SOCK_STREAM), self.screen)
  178. textmenu.start()
  179. return
  180. def start(self):
  181. while(self.running):
  182. #Check Events
  183. self.checkEvents()
  184. #Background
  185. self.screen.blit(self.bg, (0,0))
  186. self.screen.blit(self.image, self.imageRect)
  187. for i in range(0,len(self.names)):
  188. if i == 0:
  189. self.screen.blit(self.firstplace, (27,102))
  190. self.screen.blit(self.font.render(self.names[i],0,(255,255,255)),(220, 132))
  191. elif i == 1:
  192. self.screen.blit(self.secondplace, (27,208))
  193. self.screen.blit(self.font.render(self.names[i],0,(255,255,255)),(220, 238))
  194. elif i == 2:
  195. self.screen.blit(self.thirdplace, (27,315))
  196. self.screen.blit(self.font.render(self.names[i],0,(255,255,255)),(220, 345))
  197. elif i == 3:
  198. self.screen.blit(self.font.render("4",0,(255,255,255)),(63, 430))
  199. self.screen.blit(self.font.render(self.names[i],0,(255,255,255)),(220, 430))
  200. elif i == 4:
  201. self.screen.blit(self.font.render("5",0,(255,255,255)),(63, 490))
  202. self.screen.blit(self.font.render(self.names[i],0,(255,255,255)),(220, 490))
  203. pygame.display.update()
  204. class TextMenu:
  205. def __init__(self, socket, screen):
  206. self.caretPos = 1
  207. self.screen = screen
  208. self.socket = socket
  209. self.bg = pygame.Surface((800, 600))
  210. self.bg = self.bg.convert()
  211. self.bg.fill((255,255,255))
  212. self.image = pygame.image.load('resources/mainmenu.png').convert_alpha()
  213. self.imageRect = self.image.get_rect()
  214. self.caret = pygame.image.load('resources/caret.png').convert_alpha()
  215. self.running = True
  216. self.spriteGroup = pygame.sprite.Group()
  217. self.titleSpriteGroup = pygame.sprite.Group()
  218. a_titleSprite = titleSprite()
  219. a_titleOrbit = titleOrbit(-150,250,1)
  220. b_titleOrbit = titleOrbit(900,250,-1)
  221. a_obstacle = titleFloat(-10,400)
  222. a_asteroid = titleFly()
  223. b_asteroid = titleFly()
  224. self.titleSpriteGroup.add(a_titleSprite)
  225. self.spriteGroup.add(a_titleOrbit)
  226. self.spriteGroup.add(b_titleOrbit)
  227. self.spriteGroup.add(a_obstacle)
  228. self.spriteGroup.add(a_asteroid)
  229. self.spriteGroup.add(b_asteroid)
  230. self.orbitSpriteGroup = pygame.sprite.Group()
  231. #set defaults here??
  232. config = ConfigParser.ConfigParser()
  233. config.read('settings.cfg')
  234. self.ipAddress = config.get('Playerdata', 'ip')
  235. self.port = config.get('Playerdata', 'port')
  236. self.name = config.get('Playerdata', 'name')
  237. self.skin = config.get('Playerdata', 'skin')
  238. self.color = config.get('Playerdata', 'color')
  239. def checkEvents(self):
  240. for event in pygame.event.get():
  241. if event.type == QUIT:
  242. self.running = False
  243. os._exit(1)
  244. return
  245. if event.type == KEYDOWN:
  246. if event.key == K_DOWN:
  247. if self.caretPos < 4:
  248. self.caretPos += 1
  249. else:
  250. self.caretPos = 1
  251. if event.key == K_UP:
  252. if self.caretPos > 1:
  253. self.caretPos -= 1
  254. else:
  255. self.caretPos = 4
  256. if event.key == K_RETURN:
  257. if self.caretPos == 1:
  258. ####START GAME####
  259. #game = Game(self.screen)
  260. #game.start()
  261. self.running = False
  262. self.socket.connect((self.ipAddress, int(self.port)))
  263. send = Send(self.socket, self.screen)
  264. send.start()
  265. receive = Receive(self.socket)
  266. receive.start()
  267. receive.send = send
  268. send.receive = receive
  269. elif self.caretPos == 2:
  270. self.sett()
  271. elif self.caretPos == 3:
  272. self.help()
  273. elif self.caretPos == 4:
  274. self.running = False
  275. os._exit(1)
  276. return
  277. # if event.type == KEYUP:
  278. # Help Menu
  279. def help(self):
  280. self.pimage = pygame.image.load('resources/help.png')
  281. self.pimageRect = self.pimage.get_rect()
  282. while(True):
  283. for event in pygame.event.get():
  284. if event.type == QUIT:
  285. self.running = False
  286. os._exit(1)
  287. return
  288. if event.type == KEYDOWN:
  289. if event.key == K_ESCAPE:
  290. return
  291. self.checkEvents()
  292. self.screen.blit(self.pimage, self.pimageRect)
  293. pygame.display.flip()
  294. # Settings Menu
  295. def sett(self):
  296. config = ConfigParser.RawConfigParser()
  297. self.pimage = pygame.image.load('resources/settings.png')
  298. self.pimageRect = self.pimage.get_rect()
  299. self.hcaretPos = 1
  300. self.font = pygame.font.Font('resources/pixel.ttf',35)
  301. while(True):
  302. for event in pygame.event.get():
  303. if event.type == QUIT:
  304. self.running = False
  305. os._exit(1)
  306. return
  307. if event.type == KEYDOWN:
  308. # print event.key
  309. if event.key == K_ESCAPE:
  310. config.add_section('Playerdata')
  311. config.set('Playerdata','IP',self.ipAddress)
  312. config.set('Playerdata','Port',self.port)
  313. config.set('Playerdata','Name',self.name)
  314. config.set('Playerdata','Skin',self.skin)
  315. config.set('Playerdata','Color',self.color)
  316. with open('settings.cfg','wb') as configfile:
  317. config.write(configfile)
  318. return
  319. if event.key == K_DOWN:
  320. if self.hcaretPos < 5:
  321. self.hcaretPos += 1
  322. else:
  323. self.hcaretPos = 1
  324. if event.key == K_UP:
  325. if self.hcaretPos > 1:
  326. self.hcaretPos -= 1
  327. else:
  328. self.hcaretPos = 5
  329. if event.key == K_BACKSPACE:
  330. if self.hcaretPos == 1:
  331. self.ipAddress = self.ipAddress[:-1]
  332. elif self.hcaretPos == 2:
  333. self.port = self.port[:-1]
  334. elif self.hcaretPos == 3:
  335. self.name = self.name[:-1]
  336. elif self.hcaretPos == 4:
  337. self.skin = self.skin[:-1]
  338. elif self.hcaretPos == 5:
  339. self.color = self.color[:-1]
  340. if event.key >= 97 and event.key <= 122 or event.key >= 48 and event.key <= 57 or event.key == 46 or event.key == 44:
  341. if self.hcaretPos == 1:
  342. self.ipAddress += chr(event.key)
  343. elif self.hcaretPos == 2:
  344. self.port += chr(event.key)
  345. elif self.hcaretPos == 3:
  346. self.name += chr(event.key)
  347. elif self.hcaretPos == 4:
  348. self.skin += chr(event.key)
  349. elif self.hcaretPos == 5:
  350. self.color += chr(event.key)
  351. self.checkEvents()
  352. self.screen.blit(self.pimage, self.pimageRect)
  353. self.screen.blit(self.font.render(self.ipAddress,0,(255,255,255)),(150, 172))
  354. self.screen.blit(self.font.render(self.port,0,(255,255,255)),(190, 226))
  355. self.screen.blit(self.font.render(self.name,0,(255,255,255)),(215, 280))
  356. self.screen.blit(self.font.render(self.skin,0,(255,255,255)),(425, 388))
  357. self.screen.blit(self.font.render(self.color,0,(255,255,255)),(370, 442))
  358. if self.hcaretPos == 1:
  359. self.screen.blit(self.caret,(40,166))
  360. elif self.hcaretPos == 2:
  361. self.screen.blit(self.caret,(40,220))
  362. elif self.hcaretPos == 3:
  363. self.screen.blit(self.caret,(40,274))
  364. elif self.hcaretPos == 4:
  365. self.screen.blit(self.caret,(40,382))
  366. elif self.hcaretPos == 5:
  367. self.screen.blit(self.caret,(40,436))
  368. pygame.display.flip()
  369. # Start
  370. def start(self):
  371. while(self.running):
  372. #Check Events
  373. self.checkEvents()
  374. #Background
  375. self.screen.blit(self.bg, (0,0))
  376. self.screen.blit(self.image, self.imageRect)
  377. if self.caretPos == 1:
  378. self.screen.blit(self.caret,(23,353))
  379. elif self.caretPos == 2:
  380. self.screen.blit(self.caret,(58,407))
  381. elif self.caretPos == 3:
  382. self.screen.blit(self.caret,(95,461))
  383. elif self.caretPos == 4:
  384. self.screen.blit(self.caret,(131,515))
  385. #Updates
  386. self.titleSpriteGroup.update()
  387. self.spriteGroup.update()
  388. self.orbitSpriteGroup.update()
  389. #Render
  390. self.spriteGroup.draw(self.screen)
  391. self.titleSpriteGroup.draw(self.screen)
  392. self.orbitSpriteGroup.draw(self.screen)
  393. #Update Screen
  394. pygame.display.update()
  395. class MainMenu:
  396. def __init__(self, socket, screen):
  397. self.screen = screen
  398. self.socket = socket
  399. self.bg = pygame.Surface((800, 600))
  400. self.bg = self.bg.convert()
  401. self.bg.fill((255,255,255))
  402. self.image = pygame.image.load('resources/background.png').convert_alpha()
  403. self.imageRect = self.image.get_rect()
  404. self.running = True
  405. self.spriteGroup = pygame.sprite.Group()
  406. self.titleSpriteGroup = pygame.sprite.Group()
  407. a_titleSprite = titleSprite()
  408. a_titleOrbit = titleOrbit(-150,250,1)
  409. b_titleOrbit = titleOrbit(900,250,-1)
  410. a_obstacle = titleFloat(-10,400)
  411. a_asteroid = titleFly()
  412. b_asteroid = titleFly()
  413. self.titleSpriteGroup.add(a_titleSprite)
  414. self.spriteGroup.add(a_titleOrbit)
  415. self.spriteGroup.add(b_titleOrbit)
  416. self.spriteGroup.add(a_obstacle)
  417. self.spriteGroup.add(a_asteroid)
  418. self.spriteGroup.add(b_asteroid)
  419. self.a_ship = ship(400-10,280)
  420. self.a_ship.mainMenuInit()
  421. self.spriteGroup.add(self.a_ship)
  422. self.resetControls()
  423. self.orbitSpriteGroup = pygame.sprite.Group()
  424. self.earthPlanet = earthPlanet(400-37,400,0,1)
  425. self.orbitSpriteGroup.add(self.earthPlanet.orbit)
  426. self.orbitSpriteGroup.add(self.earthPlanet.s_orbit)
  427. self.spriteGroup.add(self.earthPlanet)
  428. def checkEvents(self):
  429. for event in pygame.event.get():
  430. if event.type == QUIT:
  431. self.running = False
  432. os._exit(1)
  433. return
  434. if event.type == KEYDOWN:
  435. # w to accelerate
  436. if event.key == K_w:
  437. self.k_w = True
  438. else:
  439. self.k_w = False
  440. # s to deccelerate
  441. if event.key == K_s:
  442. self.k_s = True
  443. else:
  444. self.k_s = False
  445. # q to rotate counterclockwise
  446. if event.key == K_q:
  447. self.k_q = True
  448. # e to rotate clockwise
  449. if event.key == K_e:
  450. self.k_e = True
  451. if event.type == KEYUP:
  452. if event.key == K_q:
  453. self.k_q = False
  454. if event.key == K_e:
  455. self.k_e = False
  456. def start(self):
  457. while(self.running):
  458. #Check Events
  459. self.checkEvents()
  460. #Ship Movement
  461. self.a_ship.move(self.k_w, self.k_s, self.k_q, self.k_e)
  462. #Collision
  463. #Earth Planet
  464. if(pygame.sprite.collide_circle(self.earthPlanet.orbit,self.a_ship)):
  465. if(self.earthPlanet.orbit.shipInOrbit != None):
  466. pass
  467. else:
  468. self.earthPlanet.orbit.initOrbit(self.a_ship)
  469. self.earthPlanet.orbit.drawOrbit(True)
  470. else:
  471. self.earthPlanet.orbit.drawOrbit(False)
  472. #Earth Planet Orbit
  473. if self.earthPlanet.ownership != None:
  474. self.running = False
  475. textmenu = TextMenu(self.socket, self.screen)
  476. textmenu.start()
  477. return
  478. #Background
  479. self.screen.blit(self.bg, (0,0))
  480. self.screen.blit(self.image, self.imageRect)
  481. #Updates
  482. self.titleSpriteGroup.update()
  483. self.spriteGroup.update()
  484. self.orbitSpriteGroup.update()
  485. #Render
  486. self.spriteGroup.draw(self.screen)
  487. self.titleSpriteGroup.draw(self.screen)
  488. self.orbitSpriteGroup.draw(self.screen)
  489. #Update Screen
  490. pygame.display.update()
  491. def resetControls(self):
  492. #Motion Keys
  493. self.k_w = False
  494. self.k_s = False
  495. self.k_q = False
  496. self.k_e = False