def play_game(request, game_id, deal_number_str, params={}): from models.pgtile import PGTile from pghand import PGHand player_id = request.session.get('player_id', False) if (not player_id): return goto_home(request) player = PGPlayer.objects.get(id=player_id) # get the game from the db game = PGGame.with_id(game_id) if (not game): messages.add_message( request, messages.ERROR, "WTF? That game has disappeared into the ether (which doesn't exist)" ) return goto_home(request) params['game'] = game # get the deal number deal_number = int(deal_number_str) params['deal_number'] = deal_number # set the score for the other player. players_in_game = game.players() # make sure you're in the game: you can't look at other games. if not (player in players_in_game): messages.add_message( request, messages.ERROR, "I'm sorry, you are not allowed in that game, it's only for VIPs") return goto_home(request) # this sets up pig, don't get it fgirst params['pgsets'] = game.sets_for_player(session_player(request), deal_number) # set the game and score for you pid = game.player_in_deal(player, deal_number) params['score_player'] = game.score_as_of_deal_for_player( player, deal_number) # set up the opponent for the template opponent = session_player(request).opponent_for_deal(game, deal_number) # get your opponent's score #pido = game.player_in_deal( opponent, deal_number ) params['score_opponent'] = game.score_as_of_deal_for_player( opponent, deal_number) # create the hands for this player (sets_for_player should be called first) params['pgtile_size'] = "medium" params['current_player_state'] = PGPlayerInDeal.state_ui(pid.state()) return render_to_response('game_play.html', request_context(request, params))
def home( request, params = {} ): player = session_player( request ) if not player: return render_to_response( 'user_login.html', request_context( request, params ) ) params['games'] = session_player( request ).games() params['all_opponents_in_all_games'] = session_player( request ).all_opponents_in_all_games() wins, losses = session_player( request ).overall_record() params['overall_record'] = str(wins) + " - " + str(losses) return render_to_response( 'home.html', request_context( request, params ) )
def home(request, params={}): player = session_player(request) if not player: return render_to_response('user_login.html', request_context(request, params)) params['games'] = session_player(request).games() params['all_opponents_in_all_games'] = session_player( request).all_opponents_in_all_games() wins, losses = session_player(request).overall_record() params['overall_record'] = str(wins) + " - " + str(losses) return render_to_response('home.html', request_context(request, params))
def play_game( request, game_id, deal_number_str, params = {} ): from models.pgtile import PGTile from pghand import PGHand player_id = request.session.get('player_id', False) if ( not player_id ): return goto_home( request ) player = PGPlayer.objects.get( id = player_id ) # get the game from the db game = PGGame.with_id( game_id ) if ( not game ): messages.add_message( request, messages.ERROR, "WTF? That game has disappeared into the ether (which doesn't exist)" ) return goto_home( request ) params['game'] = game # get the deal number deal_number = int( deal_number_str ) params['deal_number'] = deal_number # set the score for the other player. players_in_game = game.players() # make sure you're in the game: you can't look at other games. if not ( player in players_in_game ): messages.add_message( request, messages.ERROR, "I'm sorry, you are not allowed in that game, it's only for VIPs" ) return goto_home( request ) # this sets up pig, don't get it fgirst params['pgsets'] = game.sets_for_player( session_player( request ), deal_number ) # set the game and score for you pid = game.player_in_deal( player, deal_number ) params['score_player'] = game.score_as_of_deal_for_player( player, deal_number ) # set up the opponent for the template opponent = session_player( request ).opponent_for_deal( game, deal_number ) # get your opponent's score #pido = game.player_in_deal( opponent, deal_number ) params['score_opponent'] = game.score_as_of_deal_for_player( opponent, deal_number ) # create the hands for this player (sets_for_player should be called first) params['pgtile_size'] = "medium" params['current_player_state'] = PGPlayerInDeal.state_ui( pid.state() ) return render_to_response( 'game_play.html', request_context( request, params ) )
def show_opponent_summary( context, opponent ): player = session_player( context['request'] ) context['opponent'] = opponent context['games'] = player.games_against_opponent( opponent ) wins, losses, in_progress = player.record_against_opponent( opponent ) context['record_against_opponent'] = str( wins ) + " - " + str( losses ) return context
def tiles_are_set(request, game_id, deal_number): game = PGGame.objects.get(id=game_id) player = session_player(request) pgpid = game.player_in_deal(player, deal_number) pgpid.player_is_ready(request.GET['set1'], request.GET['set2'], request.GET['set3']) return HttpResponse("OK")
def add_game(request, params={}): player = session_player(request) if not player: return goto_home(request) # create a new game game = PGGame.create(request.POST['game_name']) game.save() # must be done before adding player, so we have an ID # add ourselves and the opponent (which automatically saves) game.add_player(session_player(request)) game.add_player(posted_player_from_id_field(request, 'game_opponent')) #messages.add_message( request, messages.INFO, "Game \"" + game.name + "\" created." ) return redirect("/paigow/game/" + str(game.id) + "/1")
def add_game( request, params = {} ): player = session_player( request ) if not player: return goto_home( request ) # create a new game game = PGGame.create( request.POST['game_name'] ) game.save() # must be done before adding player, so we have an ID # add ourselves and the opponent (which automatically saves) game.add_player( session_player( request ) ) game.add_player( posted_player_from_id_field( request, 'game_opponent' ) ) #messages.add_message( request, messages.INFO, "Game \"" + game.name + "\" created." ) return redirect ( "/paigow/game/" + str(game.id) + "/1" )
def preview_hands( request, game_id, deal_number ): new_set1 = PGSet.create_with_tile_chars( request.GET['set1'] ).tile_ordering_for_set_hands() new_set2 = PGSet.create_with_tile_chars( request.GET['set2'] ).tile_ordering_for_set_hands() new_set3 = PGSet.create_with_tile_chars( request.GET['set3'] ).tile_ordering_for_set_hands() game = PGGame.objects.get( id = game_id ) player = session_player( request ) pig = game.player_in_game( player ) pig.player_is_previewing_hands() return HttpResponse( "|" + new_set1 + "|" + new_set2 + "|" + new_set3 + "|" )
def data_opponent_state(request, game_id, deal_number): game = PGGame.objects.get(id=game_id) player = session_player(request) opponent = player.opponent_for_deal(game, deal_number) status = "|" if (opponent): status += game.state_for_player(opponent, deal_number) else: status += "error" return HttpResponse(status)
def data_opponent_state( request, game_id, deal_number ): game = PGGame.objects.get( id = game_id ) player = session_player( request ) opponent = player.opponent_for_deal( game, deal_number ) status = "|" if ( opponent ): status += game.state_for_player( opponent, deal_number ) else: status += "error" return HttpResponse( status )
def preview_hands(request, game_id, deal_number): new_set1 = PGSet.create_with_tile_chars( request.GET['set1']).tile_ordering_for_set_hands() new_set2 = PGSet.create_with_tile_chars( request.GET['set2']).tile_ordering_for_set_hands() new_set3 = PGSet.create_with_tile_chars( request.GET['set3']).tile_ordering_for_set_hands() game = PGGame.objects.get(id=game_id) player = session_player(request) pig = game.player_in_game(player) pig.player_is_previewing_hands() return HttpResponse("|" + new_set1 + "|" + new_set2 + "|" + new_set3 + "|")
def game_score( request, game_id, deal_number_str ): deal_number = int( deal_number_str ) game = PGGame.with_id( game_id ) player = session_player( request ) if not player: return HttpResponseNotAllowed( "Bad Request" ) opponent = session_opponent( request, game, deal_number ) if not opponent: return HttpResponseNotAllowed( "Bad Request" ) ret_val = str( game.score_as_of_deal_for_player( player, deal_number+1 ) ) + " - " + str( game.score_as_of_deal_for_player( opponent, deal_number+1 ) ) if game.check_game_over(): ret_val = "!" + ret_val print "Score returning: " + ret_val return HttpResponse( ret_val )
def new_game_against(request, opponent_id, params={}): player = session_player(request) if not player: print "Error: new game but no player" return goto_home(request) opponents = PGPlayer.objects.filter(id=opponent_id) if not opponents: print "Error: new game but no opponents found id " + str(opponent_id) return goto_home(request) if len(opponents) != 1: print "Error: multiple opponents found for id " + str(opponent_id) return goto_home(request) params['opponent'] = opponents[0] return new_game(request, params)
def new_game_against( request, opponent_id, params = {} ): player = session_player( request ) if not player: print "Error: new game but no player" return goto_home( request ) opponents = PGPlayer.objects.filter( id = opponent_id ) if not opponents: print "Error: new game but no opponents found id " + str(opponent_id) return goto_home( request ) if len(opponents) != 1: print "Error: multiple opponents found for id " + str(opponent_id) return goto_home( request ) params['opponent'] = opponents[0] return new_game( request, params )
def request_context(request, params): from django.utils.html import escape import re # protect against cross-site request forgery params.update(csrf(request)) # set up the URLs for the app-wide menus params['logout_url'] = '/paigow/logout' params['home_url'] = '/paigow/home' params['activities'] = ({'name': "New Game", 'url': '/paigow/game/new'}, ) params['is_mobile'] = re.match('.*mobile.*', request.META['HTTP_USER_AGENT'], re.IGNORECASE) params['is_firefox'] = re.match('.*mozilla.*', request.META['HTTP_USER_AGENT'], re.IGNORECASE) print request.META['HTTP_USER_AGENT'] print "is_mobile: " + str(params['is_mobile']) print "is_firefox: " + str(params['is_firefox']) # setup players and possible opponents player = session_player(request) params['player'] = player if (not player): request.session['player_id'] = None params['playername'] = None params['opponents'] = None params['opponent'] = None else: params['playername'] = escape(player.name) params['opponents'] = player.all_possible_opponents() if ('game' in params): game = params['game'] params['opponent'] = player.opponent_for_deal( game, params['deal_number']) params['title'] = "Pai Gow 321: " + escape(game.name) params['game_state'] = game.state() # set up the states params['tiles_are_set_state'] = PGPlayerInDeal.state_ui( PGPlayerInDeal.READY) params['setting_tiles_state'] = PGPlayerInDeal.state_ui( PGPlayerInDeal.SETTING_TILES) params['preview_hands_state'] = PGPlayerInDeal.state_ui( PGPlayerInDeal.PREVIEW_HANDS) return RequestContext(request, params)
def show_game_summary( context, game ): from paigow.models.pggame import PGGame player = session_player( context['request'] ) opponent = player.opponent_for_game( game ) context['game'] = game context['opponent'] = opponent player_score = game.score_for_player( player ) opponent_score = game.score_for_player( opponent ) context['score'] = str(player_score) + " - " + str(opponent_score) if game.game_state != PGGame.GAME_OVER: context['score_class'] = "score-in-progress" elif player_score > opponent_score: context['score_class'] = "score-win" else: context['score_class'] = "score-lose" return context
def game_score(request, game_id, deal_number_str): deal_number = int(deal_number_str) game = PGGame.with_id(game_id) player = session_player(request) if not player: return HttpResponseNotAllowed("Bad Request") opponent = session_opponent(request, game, deal_number) if not opponent: return HttpResponseNotAllowed("Bad Request") ret_val = str(game.score_as_of_deal_for_player( player, deal_number + 1)) + " - " + str( game.score_as_of_deal_for_player(opponent, deal_number + 1)) if game.check_game_over(): ret_val = "!" + ret_val print "Score returning: " + ret_val return HttpResponse(ret_val)
def show_deal( context, pgsets, deal_owner ): # we might be showing the player, or we might be showing # the oppponent. We pass this information on down. player_type = "player" player = session_player( context['request'] ) if ( deal_owner != player ): player_type = "opponent" context['is_opponent'] = True # this is the status of the player ("setting tiles" etc) context['player_state'] = context['game'].state_for_player( deal_owner, context['deal_number'] ) # this is called for both the player and the opponent, and will # show or hide the tiles and commands depending. context['deal_owner'] = deal_owner context['pgsets'] = pgsets context['player_type'] = player_type return context
def request_context( request, params ): from django.utils.html import escape import re # protect against cross-site request forgery params.update( csrf( request ) ) # set up the URLs for the app-wide menus params['logout_url'] = '/paigow/logout' params['home_url'] = '/paigow/home' params['activities'] = ( { 'name': "New Game", 'url': '/paigow/game/new' }, ) params['is_mobile'] = re.match( '.*mobile.*', request.META['HTTP_USER_AGENT'], re.IGNORECASE ) params['is_firefox'] = re.match( '.*mozilla.*', request.META['HTTP_USER_AGENT'], re.IGNORECASE ) print request.META['HTTP_USER_AGENT'] print "is_mobile: " + str(params['is_mobile']) print "is_firefox: " + str(params['is_firefox']) # setup players and possible opponents player = session_player( request ) params['player'] = player if ( not player ): request.session['player_id'] = None params['playername'] = None params['opponents'] = None params['opponent'] = None else: params['playername'] = escape(player.name) params['opponents'] = player.all_possible_opponents() if ( 'game' in params ): game = params['game'] params['opponent'] = player.opponent_for_deal( game, params['deal_number'] ) params['title'] = "Pai Gow 321: " + escape( game.name ) params['game_state'] = game.state() # set up the states params['tiles_are_set_state'] = PGPlayerInDeal.state_ui( PGPlayerInDeal.READY ) params['setting_tiles_state'] = PGPlayerInDeal.state_ui( PGPlayerInDeal.SETTING_TILES ) params['preview_hands_state'] = PGPlayerInDeal.state_ui( PGPlayerInDeal.PREVIEW_HANDS ) return RequestContext( request, params )
def unpreview_hands(request, game_id, deal_number): game = PGGame.objects.get(id=game_id) player = session_player(request) pig = game.player_in_game(player) pig.player_has_unpreviewed_hands() return HttpResponse("OK")
def data_player_state( request, game_id, deal_number ): game = PGGame.objects.get( id = game_id ) player = session_player( request ) status = "|" + game.state_for_player( player, deal_number ) return HttpResponse( status )
def data_player_state(request, game_id, deal_number): game = PGGame.objects.get(id=game_id) player = session_player(request) status = "|" + game.state_for_player(player, deal_number) return HttpResponse(status)
def tiles_are_set( request, game_id, deal_number ): game = PGGame.objects.get( id = game_id ) player = session_player( request ) pgpid = game.player_in_deal( player, deal_number ) pgpid.player_is_ready( request.GET['set1'], request.GET['set2'], request.GET['set3'] ) return HttpResponse( "OK" )
def unpreview_hands( request, game_id, deal_number ): game = PGGame.objects.get( id = game_id ) player = session_player( request ) pig = game.player_in_game( player ) pig.player_has_unpreviewed_hands() return HttpResponse( "OK" )