Beispiel #1
0
	def new_game(self, request):
		"""Start a new game"""

		#Check if players have registered
		player1 = User.query(User.name == request.player1).get()
		if not player1:
			raise endpoints.ConflictException('Player 1 must register')
		
		player2 = User.query(User.name == request.player2).get()
		if not player2:
			raise endpoints.ConflictException('Player 2 must register')

		if player1 == player2:
			raise endpoints.ConflictException('Cannot play against oneself')

		#Create new game and put in datastore
		game = Game(player1=player1.key, 
				    player2=player2.key, 
					playerTurn=player1.key,
					game_over=False
				)
		game.put()

		#Create initial game board and set as ancestor of game
		boardId = Board.allocate_ids(size=1, parent=game.key)[0]
		boardKey = ndb.Key(Board, boardId, parent=game.key)

		board = Board(key=boardKey)
		board.put()

		game.state = boardKey
		game.put()

		return StringMessage(message="Game between {0} and {1} created! {2}".format(player1.name, player2.name, game.key))
Beispiel #2
0
	def _updateGame(self, request):

		# Get updated board
		game = ndb.Key('Game', request.game).get()
		board = game.state.get()
		rows = [board.row1, board.row2, board.row3]
		spaces = []

		for row in rows:
			for col in row:
				spaces.append(col)

		boardId = Board.allocate_ids(size=1, parent=game.key)[0]
		boardKey = ndb.Key(Board, boardId, parent=game.key)
		board = Board(row1=board.row1, row2=board.row2, row3=board.row3, key=boardKey)
		board.put()

		# Check for ties
		tie_count = 0
		for item in spaces:
			if item == 'X' or item == 'O':
				tie_count += 1

		if tie_count == 9:
			game.game_tie = True
			game.put()
			p1 = game.player1.get()
			p2 = game.player2.get()
			p1.ties += 1
			p2.ties += 1
			p1.put()
			p2.put()
			return BoardMessage(message="game is a tie")

		# Check for win
		if self._checkForWin(rows) == 1:
			game.game_over = True
			game.game_winner = game.player1
			game.game_loser = game.player2
			game.game_winner.get().wins += 1
			game.game_winner.get().points += 3
			game.game_loser.get().losses += 1
			game.game_loser.get().points -= 1
			game.put()
			game.game_winner.get().put()
			game.game_loser.get().put()
			return BoardMessage(message="Player 1 wins")
		elif self._checkForWin(rows) == 2:
			game.game_over = True
			game.game_winner = game.player2
			game.game_loser = game.player1
			game.game_winner.get().wins += 1
			game.game_winner.get().points += 3
			game.game_loser.get().losses += 1
			game.game_loser.get().points -= 1
			game.put()
			game.game_winner.get().put()
			game.game_loser.get().put()
			return BoardMessage(message="Player 2 wins")
		else:
			taskqueue.add(params={'email': game.playerTurn.get().email,
	        	'gameState': str(self._printBoard(game.state.get())),
	        	'gameNumber': request.game},
	        	url='/tasks/send_reminder'
	        )
	    	return self._printBoard(game.state.get())