Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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 ) )
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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 ) )
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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")
Ejemplo n.º 7
0
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")
Ejemplo n.º 8
0
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" )
Ejemplo n.º 9
0
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 + "|" )
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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 )
Ejemplo n.º 12
0
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 + "|")
Ejemplo n.º 13
0
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 )
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
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 )
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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
Ejemplo n.º 20
0
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 )
Ejemplo n.º 21
0
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")
Ejemplo n.º 22
0
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 )
Ejemplo n.º 23
0
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)
Ejemplo n.º 24
0
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" )
Ejemplo n.º 25
0
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" )