示例#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))
示例#2
0
    def post(self, *args, **kwargs):
        log.error('self.request.POST = %s' %
                (unicode(self.request.POST),))

        if self.get_current_user() is None:
            raise Exception('Foo')
        log.info('Creating a new board')
        try:
            name = self.request.get('inputName', '')
            if not name:
                log.error('Name is false?')
                log.error('self.request.POST = %s' %
                        (unicode(self.request.POST.items()),))
                return super(CreateHandler, self).get(*args, **kwargs)

            board = Board(name=name, owner=self.get_current_user())
            board.put()
            log.info('Created a new board: %d' % (board.key().id(),))
            self.redirect_to('board', identifier=unicode(board.key().id()))
            return
        except:
            log.exception('Error creating a board')
            return super(CreateHandler, self).get(*args, **kwargs)
示例#3
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())
示例#4
0
文件: views.py 项目: Taejun/GAE
 def get(self):
     subject = self.request.get("subject")
     content = self.request.get("content")
     q = Board(subject=subject,content=content)
     q.put()