Guest User

Untitled

a guest
Mar 3rd, 2016
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.09 KB | None | 0 0
  1. import pygame
  2. from pygame.locals import *
  3. import sys
  4. import socket
  5. import threading
  6. import textwrap
  7.  
  8. class Entity(pygame.sprite.Sprite):
  9. def __init__(self):
  10. pygame.sprite.Sprite.__init__(self)
  11.  
  12. class UI_Element(Entity):
  13. def __init__(self, pos_x, pos_y, width, height, color):
  14. super(UI_Element, self).__init__()
  15. self.pos_x = pos_x
  16. self.pos_y = pos_y
  17. self.height = height
  18. self.width = width
  19. self.color = color
  20. self.image = pygame.Surface([self.width, self.height])
  21. self.image.fill((color))
  22. self.rect = self.image.get_rect(bottomleft = ((self.pos_x, self.pos_y)))
  23. ui_elements.add(self)
  24.  
  25. class UI_Picture(Entity):
  26. def __init__(self, pos_x, pos_y, image):
  27. super(UI_Picture, self).__init__()
  28. self.pos_x = pos_x
  29. self.pos_y = pos_y
  30. self.image = pygame.image.load(image)
  31. self.image.set_colorkey((255, 255, 255), RLEACCEL)
  32. self.rect = self.image.get_rect(bottomleft = ((self.pos_x, self.pos_y)))
  33. ui_pictures.add(self)
  34.  
  35. class UI_Text(Entity):
  36. def __init__(self, pos_x, pos_y, text, fontcolor, is_chat):
  37. super(UI_Text, self).__init__()
  38. self.is_chat = is_chat
  39. self.text = text
  40. self.fontcolor = fontcolor
  41. self.pos_x = pos_x
  42. self.pos_y = pos_y
  43. self.font = pygame.font.Font('courier.ttf', 16)
  44. self.image = self.font.render(self.text, True, fontcolor)
  45. self.rect = self.image.get_rect(bottomleft = ((self.pos_x, self.pos_y)))
  46. if self.is_chat:
  47. chat.add(self)
  48. else:
  49. ui_text.add(self)
  50.  
  51. def update(self, newtext, max_x):
  52. self.max_x = max_x
  53. self.image = self.font.render(newtext, True, self.fontcolor)
  54. self.rect = self.image.get_rect(bottomleft = ((self.pos_x, self.pos_y)))
  55. if self.rect.bottomright[0] > self.max_x:
  56. self.rect.x -= (self.rect.bottomright[0] - self.max_x)
  57.  
  58. class Client():
  59. sock = None
  60.  
  61. def __init__(self):
  62. self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  63. # self.sock.connect(("192.168.0.7", 1234))
  64. threading.Thread(target = self.recvData).start()
  65.  
  66. def sendData(self, data):
  67. self.sock.sendto(data.encode(), ("174.100.18.82", 1234))
  68.  
  69. def recvData(self):
  70. print("recvData")
  71. while True:
  72. try:
  73. data = self.sock.recv(5000)
  74.  
  75. if data:
  76. data = data.decode()
  77. print(data)
  78. makeChat(data)
  79.  
  80. except:
  81. pass
  82.  
  83. def makeChat(data):
  84. for x in chat:
  85. x.kill()
  86. print("here!!!")
  87. all_chat = textwrap.wrap(data, 20)
  88. # while len(all_chat) > 25:
  89. # all_chat.pop(0)
  90. y = 450
  91. for line in all_chat:
  92. UI_Text(0, y, line, (255, 255, 255), True)
  93. y += 18
  94.  
  95. # Initialize PyGame
  96. pygame.init()
  97.  
  98. # Create the client
  99.  
  100. client = Client()
  101.  
  102. # Screen Settings
  103. screen_x = 1440
  104. screen_y = 900
  105. screen = (screen_x, screen_y)
  106. screen = pygame.display.set_mode(screen)
  107.  
  108. # Title
  109. pygame.display.set_caption("Test")
  110.  
  111. # Groups
  112. ui_elements = pygame.sprite.Group()
  113. ui_text = pygame.sprite.Group()
  114. ui_pictures = pygame.sprite.Group()
  115. chat = pygame.sprite.Group()
  116.  
  117. # UI Initialization (pos_x, pos_y, width, height, (co, lo, r))
  118. # THIS CAN BE CLEANED UP
  119. chatboxlower = UI_Element(0, screen_y + 00, 250, 18, (66, 66, 66))
  120. chatboxupper = UI_Element(0, screen_y - 18, 250, 450, (117, 117, 117))
  121. loginimage = UI_Picture((screen_x / 2 - 125), (screen_y / 2 + 125), 'LoginBox.png')
  122. messagetext = UI_Text(0, screen_y, "", (255, 255, 255), False)
  123. logintext = UI_Text(645, 444, "", (0, 0, 0), False)
  124. passwordtext = UI_Text(645, 492, "", (0, 0, 0), False)
  125. message = ""
  126.  
  127. # Clock
  128. clock = pygame.time.Clock()
  129.  
  130. # Misc.
  131. username_entered = False
  132. password_entered = False
  133. logged_in = False
  134. username = ""
  135. password = ""
  136.  
  137.  
  138. # Let's GO!
  139. running = True
  140.  
  141. while running:
  142. dt = clock.tick(60)
  143. screen.fill(Color(0, 0, 0))
  144. # print(pygame.mouse.get_pos())
  145. events = pygame.event.get()
  146. keys = pygame.key.get_pressed()
  147. for event in events:
  148. if event.type == pygame.QUIT or keys[K_ESCAPE]:
  149. running = False
  150. elif keys[K_BACKSPACE]:
  151. message = message[:-1]
  152. elif keys[K_RETURN] and len(message) > 0:
  153. print(message)
  154. if logged_in:
  155. print("sent this to the server")
  156. client.sendData(username + message)
  157. message = ""
  158. elif username_entered:
  159. print("Password Entered")
  160. print("Login Attempted")
  161. password_entered = True
  162. logged_in = True
  163. loginimage.kill()
  164. logintext.kill()
  165. passwordtext.kill()
  166. password = message
  167. message = ""
  168. else:
  169. print("Username Entered")
  170. username_entered = True
  171. username = message + ": "
  172. print(username + "test message")
  173. message = ""
  174. elif event.type == KEYDOWN:
  175. message += str(event.unicode)
  176.  
  177. if logged_in:
  178. # print("Logged in")
  179. if len(message) > 100:
  180. message = message[:-1]
  181. messagetext.update(message, 250)
  182. elif username_entered:
  183. # print("Username Entered, now for password")
  184. if len(message) > 15:
  185. message = message[:-1]
  186. passwordtext.update(message, 2500)
  187. else:
  188. # print("Waiting on Username")
  189. if len(message) > 15:
  190. message = message[:-1]
  191. logintext.update(message, 2500)
  192.  
  193. for entity in ui_elements:
  194. screen.blit(entity.image, entity.rect)
  195. for entity in ui_pictures:
  196. screen.blit(entity.image, entity.rect)
  197. for entity in ui_text:
  198. screen.blit(entity.image, entity.rect)
  199. for entity in chat:
  200. screen.blit(entity.image, entity.rect)
  201.  
  202. pygame.display.flip()
  203.  
  204. pygame.quit()
  205. sys.exit()
Add Comment
Please, Sign In to add comment