Skip to content

Commit

Permalink
add ability to create a new game
Browse files Browse the repository at this point in the history
  • Loading branch information
Sharynne Azhar committed Aug 12, 2016
1 parent a5f53e7 commit 962d07b
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
28 changes: 28 additions & 0 deletions api.py
Expand Up @@ -12,6 +12,8 @@
from google.appengine.api import taskqueue

from models import WarGame
from models import WarGameForm, NewWarGameForm

from models import User, Game, Score
from models import StringMessage, NewGameForm, GameForm, MakeMoveForm,\
ScoreForms
Expand All @@ -26,6 +28,9 @@
USER_REQUEST = endpoints.ResourceContainer(user_name=messages.StringField(1),
email=messages.StringField(2))


NEW_WAR_GAME_REQUEST = endpoints.ResourceContainer(NewWarGameForm)

MEMCACHE_MOVES_REMAINING = 'MOVES_REMAINING'

@endpoints.api(name='war', version='v1')
Expand All @@ -46,6 +51,29 @@ def create_user(self, request):
return StringMessage(message='User {} created!'.format(
request.user_name))

@endpoints.method(request_message=NEW_WAR_GAME_REQUEST,
response_message=WarGameForm,
path='game',
name='new_game',
http_method='POST')
def new_game(self, request):
"""Creates new game"""
user = User.query(User.name == request.user_name).get()
if not user:
raise endpoints.NotFoundException(
'A User with that name does not exist!')

try:
game = WarGame.new_game(user.key)
except ValueError:
raise endpoints.BadRequestException('Error creating new game.')

# Use a task queue to update the average attempts remaining.
# This operation is not needed to complete the creation of a new game
# so it is performed out of sequence.
#taskqueue.add(url='/tasks/cache_average_attempts')
return game.to_form('Good luck playing the game of War!')

# -----------------------------------------------------------------------------

@endpoints.api(name='guess_a_number', version='v1')
Expand Down
44 changes: 44 additions & 0 deletions models.py
Expand Up @@ -21,6 +21,50 @@ class WarGame(ndb.Model):
bot_deck = ndb.StringProperty(repeated=True)
game_over = ndb.BooleanProperty(required=True, default=False)

@classmethod
def new_game(cls, user):
"""Creates and returns a new game"""
# Generate card deck and shuffle
deck = ['2','3','4','5','6','7','8','9','10','J','Q','K','A'] * 4
random.shuffle(deck)
deck1 = deck[0:26]
deck2 = deck[26:52]

game = WarGame(user=user,
user_deck=deck1,
bot_deck=deck2,
game_over=False)
game.put()
return game

def to_form(self, message):
"""Returns a WarGameForm representation of the WarGame"""
form = WarGameForm()
form.urlsafe_key = self.key.urlsafe()
form.user_name = self.user.get().name
form.user_deck = self.user_deck
form.bot_deck = self.bot_deck
form.game_over = self.game_over
form.message = message
return form


class WarGameForm(messages.Message):
"""Game form for outbound api response data"""
urlsafe_key = messages.StringField(1, required=True)
user_name = messages.StringField(2, required=True)
user_deck = messages.StringField(3, repeated=True)
bot_deck= messages.StringField(4, repeated=True)
message = messages.StringField(5, required=True)
game_over = messages.BooleanField(6, required=True)


class NewWarGameForm(messages.Message):
"""Used to create a new game"""
user_name = messages.StringField(1, required=True)

# -----------------------------------------------------------------------------

class Game(ndb.Model):
"""Game object"""
target = ndb.IntegerProperty(required=True)
Expand Down

0 comments on commit 962d07b

Please sign in to comment.