Skip to content

Instantly share code, notes, and snippets.

@ewuehler
Created December 8, 2017 05:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ewuehler/671c11f105578623960edc2df909e50b to your computer and use it in GitHub Desktop.
Save ewuehler/671c11f105578623960edc2df909e50b to your computer and use it in GitHub Desktop.
from __future__ import print_function
import boto3
import json
import logging
from boto3.dynamodb.conditions import Attr
print('Loading function')
logger = logging.getLogger()
logger.setLevel(logging.INFO)
sns = boto3.client('sns')
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
def lambda_handler(event, context):
# Find the current player
serialNumber = event['serialNumber']
table = dynamodb.Table('eric_lambda_rps')
getplayer = table.get_item( Key={'playerid':serialNumber})
player = getplayer['Item']
logger.info('Player data: ' + json.dumps(player))
# Get the player's roll - convert from clickType to RPS
rpsroll = convertRoll(event['clickType'])
logger.info('Rolled: ' + rpsroll)
#Update current player's roll and set "rolled" to True
table.update_item(
Key={ 'playerid':serialNumber},
UpdateExpression='SET rolled = :val1, lastroll = :val2',
ExpressionAttributeValues={ ':val1': True, ':val2': rpsroll }
)
#See if both players have "true" as rolled
response = table.scan(
FilterExpression=Attr('rolled').eq(True)
)
players = response['Items']
if len(players) == 2:
player1 = players[0]
player2 = players[1]
p1_roll = player1['lastroll']
p2_roll = player2['lastroll']
winner = checkWinner(p1_roll, p2_roll)
sendMessage(winner, p1_roll, p2_roll, player1, player2)
# now reset them back to both false
table.update_item(
Key={
'playerid': player1['playerid']
},
UpdateExpression = 'SET rolled = :val1',
ExpressionAttributeValues={
':val1': False
}
)
table.update_item(
Key={
'playerid': player2['playerid']
},
UpdateExpression = 'SET rolled = :val1',
ExpressionAttributeValues={
':val1': False
}
)
else:
sendWaitingMessage(player)
logger.info('Received event: ' + json.dumps(event))
def sendWaitingMessage(player):
message = "You are {}, waiting for other player...".format(player['name'])
sns.publish(PhoneNumber=player['phonenumber'], Message=message)
def sendMessage(winner, p1roll, p2roll, player1, player2):
message = ""
if winner == 0:
message = "TIE\nYou both played {}".format(p1roll)
sns.publish(PhoneNumber=player1['phonenumber'], Message=message)
sns.publish(PhoneNumber=player2['phonenumber'], Message=message)
if winner == 1:
message = "{}\n\n{} played {}\n{} played {}".format("You win!", player1['name'], p1roll, player2['name'], p2roll)
sns.publish(PhoneNumber=player1['phonenumber'], Message=message)
message = "{}\n\n{} played {}\n{} played {}".format("You lose!", player1['name'], p1roll, player2['name'], p2roll)
sns.publish(PhoneNumber=player2['phonenumber'], Message=message)
if winner == 2:
message = "{}\n\n{} played {}\n{} played {}".format("You win!", player1['name'], p1roll, player2['name'], p2roll)
sns.publish(PhoneNumber=player2['phonenumber'], Message=message)
message = "{}\n\n{} played {}\n{} played {}".format("You lose!", player1['name'], p1roll, player2['name'], p2roll)
sns.publish(PhoneNumber=player1['phonenumber'], Message=message)
def convertRoll(clickType):
if clickType == 'SINGLE':
return "rock"
if clickType == 'DOUBLE':
return "scissors"
if clickType == 'LONG':
return "paper"
return "#fail"
def checkWinner(p1roll, p2roll):
if p1roll == p2roll:
return 0
if p1roll == 'rock':
if p2roll == 'paper':
return 2
else:
return 1
if p1roll == 'paper':
if p2roll == 'scissors':
return 2
else:
return 1
if p1roll == 'scissors':
if p2roll == 'rock':
return 2
else:
return 1
return 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment