def do_POST(self): """ Paths: /action/createNewGame --> create a new game and set playerId cookie /action/joinGame --> join a game and set playerId cookie """ if self.path == '/action/createNewGame': msg = self.rfile.read(int(self.headers.getheader('content-length'))) post_data = parse_qs(msg) name = '' if 'name' in post_data: name = post_data['name'] playerId = GameHandler.createNewGame(name) self.send_response(303) self.send_header('Location', '/') self.send_header('Set-Cookie', 'playerId='+playerId+'; Path=/') self.end_headers() return None if self.path == '/action/joinGame': msg = self.rfile.read(int(self.headers.getheader('content-length'))) post_data = parse_qs(msg) name = '' if ('name' in post_data): name = post_data['name'] gamePattern = re.compile(r"http://.*/(?P<gameId>[a-zA-Z0-9]{24})") gameMatch = gamePattern.search(self.headers.getheader('referer')) if not gameMatch: self.send_error(400, 'No gameId given') return None try: playerId = GameHandler.joinGame(name, gameMatch.group('gameId')) except ValueError as e: self.send_error(404, str(e)) else: self.send_response(303) self.send_header('Location', '/') self.send_header('Set-Cookie', 'playerId='+playerId+'; Path=/') self.end_headers() return None postpattern = re.compile(r"^/action/(?P<action>[a-zA-Z]+?)$") postmatch = postpattern.search(self.path) if (postmatch): self.send_error(404, 'General path') return None """ Default action """ self.send_error(400, 'Incorrect post path') return None
def main(argv): game = GameHandler() game.start()
def do_GET(self): """ Paths: / --> www/index.html /style.css --> style.css /favicon.ico --> www/images/favicon.ico /images/[filename] --> images/[filename] /[gameId] --> Pattern match for /[gameId] Game Playing?| | | Yes | No Player in a game? | | --------------------+---------+--------- | | Yes | Watch(1)| Join(1,2) | | --------------------+---------+--------- | | No | Watch | Join | | (1) Check if player is in this game, if so go to path: '/' (2) Special case of join. Leave other game. """ if self.path == '/': try: CookieRead = CookieJar(self.headers) except TypeError: sendFile('www/index.html', 'text/html', self) else: try: game = GameHandler.getPlayerDict(CookieRead.playerId) except ValueError as e: self.send_error(400, str(e)) else: sendReplace('www/game'+game['gameState']+'.html', 'text/html', game, self) return None if self.path == '/style.css': sendFile('www/style.css', 'text/css', self) return None if self.path == '/favicon.ico': sendFile('www/images/favicon.ico', 'image/x-icon', self) return None imagepattern = re.compile(r"^/images/(?P<title>[a-zA-Z0-9 ]+?).(?P<type>(jpg|png))$") imgmatch = imagepattern.search(self.path) if imgmatch: sendFile('www/images/' + imgmatch.group('title') + '.' + imgmatch.group('type'), 'image/'+imgmatch.group('type'), self) return None gamepattern = re.compile(r"^/(?P<gameId>[a-zA-Z0-9]{24})$") gamematch = gamepattern.search(self.path) if gamematch: if GameHandler.gameExists(gamematch.group('gameId')): try: CookieRead = CookieJar(self.headers) except: CookieRead = None if CookieRead and GameHandler.playerInGame(gamematch.group('gameId'), CookieRead.playerId): sendFile('www/playerInLobby.html', 'text/html', self) return None if GameHandler.gamePlaying(gamematch.group('gameId')): sendFile('www/watchGame.html', 'text/html', self) else: if CookieRead: sendFile('www/forceJoinGame.html', 'text/html', self) else: sendFile('www/joinGame.html', 'text/html', self) else: self.send_error(404, 'Game doesn\'t exist.') return None """ Default action """ self.send_error(404) return None
# Color constants screen_clear_color = (0, 0, 0) # Variables is_game_running = True # Initialize PyGame pygame.init() pygame.font.init() # Setup the program window pygame.display.set_caption("Snake Game") # Initialize the screen game_screen = pygame.display.set_mode(screen_size, screen_flags, screen_depth) game_handler = GameHandler.GameHandler(game_screen) # Create the game clock game_clock = pygame.time.Clock() # Main game loop while is_game_running: # Process events for event in pygame.event.get(): if event.type == pygame.QUIT: is_game_running = False if event.type == pygame.KEYDOWN: game_handler.process_event(event) # Do game logic game_handler.game_logic()
import requests import json base_url = 'http://localhost:3000/api' import GameHandler gameHandler = GameHandler.GameHandler() def test_createGame(): req_body = {'playerName': 'test'} res = requests.post(base_url + '/creategame', data=req_body).json() if 'error' in res: return 'Server error: ' + res['error'] return 0 def test_joingame(): gameData = gameHandler.create_game() req_body = {'playerName': 'test2', 'gameCode': gameData['gameCode']} res = requests.post(base_url + '/creategame', data=req_body).json() if 'error' in res: return 'Server error: ' + res['error'] elif 'gameToken' not in res: return 'No gameToken' return 0 def test_getGameStatus_newGameReturns0(): gameData = gameHandler.create_game() req_body = {'gameToken': gameData['gameToken']} res = requests.post(base_url + '/gamestatus', data=req_body).json()
def Game(): renderer.erase() Hangman = GameEngine.RenderObject() Answer = GameEngine.RenderObject() border = GameEngine.RenderObject() input = GameEngine.InputHandler() health = GameEngine.RenderObject() debugObj = GameEngine.RenderObject() hangmanState = GameEngine.RenderObject() GameObject = GameHandler.Game() score = GameEngine.RenderObject() hangmanBox = GameEngine.RenderObject() lose = False while(lose == False): currentWord = FileHandler.getWord() GameObject.setCurrentWord(currentWord) UnansweredWord = GameObject.unanswered spaceIndex = [i for i, x in enumerate(GameObject.wordList) if x == " "] for l in spaceIndex: UnansweredWord[l] = " " while(GameObject.checkifAnswerCorrect() == False): border.drawBorder(GameEngine.WR) if cheat == True: cheatStr = "word: {}" score.drawObject(1, 1, cheatStr.format(GameObject.word), GameEngine.WR) HighscoreStr = "SCORE : " + str(GameObject.score) UnansweredStr = " ".join(UnansweredWord) hangmanArt = GameObject.hangman[GameObject.hangmanState].splitlines() for yPos, lines in enumerate(hangmanArt): Hangman.drawObject(15, (renderer.yBorder//2) - 4 + yPos, lines, GameEngine.WR) hangmanBox.drawRect(28, (renderer.yBorder//2)-4 , 12, 10) score.drawObject(renderer.xBorder//2 - len(HighscoreStr)//2, 1, HighscoreStr, GameEngine.WR) #health.drawObject(2,2, str(GameObject.health), GameEngine.WR) #hangmanState.drawObject(2,3, str(GameObject.hangmanState), GameEngine.WR) #DEBUG Answer.drawObject((renderer.xBorder // 2), (renderer.yBorder // 2) - 5, UnansweredStr.upper(), GameEngine.WR) renderer.refresh() ans = chr(input.getInput()) #index = GameObject.wordList.index(ans) index = [i for i, x in enumerate(GameObject.wordList) if x == ans] if index == []: GameObject.damagePlayer() for j in index: UnansweredWord[j] = ans GameObject.score += len(ans) * 10 #debugObj.drawObject(2, 5, str(UnansweredWord), GameEngine.WR) renderer.refresh() renderer.updateFrame() if (GameObject.health == 0): border.drawBorder(GameEngine.WR) HighscoreStr = "SCORE : " + str(GameObject.score) UnansweredStr = " ".join(GameObject.word) hangmanArt = GameObject.hangman[GameObject.hangmanState].splitlines() for yPos, lines in enumerate(hangmanArt): Hangman.drawObject(15, (renderer.yBorder // 2) - 4 + yPos, lines, GameEngine.WR) hangmanBox.drawRect(28, (renderer.yBorder // 2) - 4, 12, 10) score.drawObject(renderer.xBorder // 2 - len(HighscoreStr) // 2, 1, HighscoreStr, GameEngine.WR) Answer.drawObject((renderer.xBorder // 2), (renderer.yBorder // 2) - 5, UnansweredStr.upper(), GameEngine.WR) renderer.refresh() renderer.updateFrame() time.sleep(5) return GameObject.score GameObject.score += 100