Exemple #1
0
def register(request):

    if request.method == "POST":
        form = RegistrationForm(request.POST)
        #?All of them seem to be connected with [email protected] why????
        #*Maybe it's because no one was logged in at this point???
        #!NOW I KNOW WHY. IT WAS BECAUSE I WAS LOGGED IN WITH [email protected] AND THE USER NEVER CHANGED.
        #*As proof, when I register when I am logged out, I runn into an attribute error at request.user.player.add
        #!SINCE THIS IS THE CASE I NEED TO CREATE THE PLAYER IN HOME PAGE
        if form.is_valid():
            #*I think I can just redirect to login
            #!I have to differentiate between what is done at registration vs login
            n = form.cleaned_data['username']
            p = Player(name=n, highscore=0)
            p.save()
            form.save()
            return redirect("/login")

    #*What I need to pass in the correct variables for register
    form = RegistrationForm()
    if request.user.is_authenticated:
        u = Player.objects.filter(name=request.user.get_username())[0]
        return render(request, "register/register.html", {
            "user": u,
            "logged_in": True,
            "form": form
        })
    else:
        return render(request, "register/register.html", {
            "logged_in": False,
            "form": form,
        })
Exemple #2
0
def register(request):
    username = request.POST.get('username','')
    password = request.POST.get('password','')
    repassword = request.POST.get('repassword','')
    email = request.POST.get('email','')
    nickname = request.POST.get('nickname','')
    if (username == ''):
        errors = '请输入您的密码'
        return render_to_response("index.html", {'message':'register','error2': errors}, context_instance=RequestContext(request))
    try:
        p = User.objects.get(username = username)
    except User.DoesNotExist:
        if (password != repassword):
            errors = '两次输入密码不一致,请重新输入'
            return render_to_response("index.html", {'message':'register','error2': errors}, context_instance=RequestContext(request))
        if (len(password) < 6):
            errors = '密码长度太短,请重新输入'
            return render_to_response("index.html", {'message':'register','error2': errors}, context_instance=RequestContext(request))
        if nickname == '':
            errors = '请输入您的昵称'
            return render_to_response("index.html", {'message':'register','error2': errors}, context_instance=RequestContext(request))
        if email == '':
            errors = '请输入您的邮箱'
            return render_to_response("index.html", {'message':'register','error2': errors}, context_instance=RequestContext(request))
        user = User.objects.create_user(username = username,email = email,password = password)
        user.save()
        player = Player(user = user, nickname = nickname, signature = '', integration = 0, num_games = 0, is_forbidden = 0, status = 1)
        player.save()
        user = user = auth.authenticate(username = username, password = password)
        auth.login(request, user)
        return HttpResponseRedirect('/gamehall')
    else:
        errors = '用户名已被注册'
        return render_to_response("index.html", {'message':'register','error2': errors}, context_instance=RequestContext(request))
Exemple #3
0
    def test_next_game_state_2_players(self):
        """Change current game state to the next from the game path"""

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        player1 = Player(name=us1, state='check')
        player1.save()
        player2 = Player(name=us2, state='check')
        player2.save()
        table = Table(player1=player1, player2=player2)

        # Act & Assertion
        self.assertEqual(table.game_state, 'ready')
        table.next_game_state()
        self.assertEqual(table.game_state, 'small_blind')
        table.next_game_state()
        self.assertEqual(table.game_state, 'give_2')
        table.next_game_state()
        self.assertEqual(table.game_state, 'give_3')
        table.next_game_state()
        self.assertEqual(table.game_state, 'give_1')
        table.next_game_state()
        self.assertEqual(table.game_state, 'give_1_again')
        table.next_game_state()
        self.assertEqual(table.game_state, 'winner')
        table.next_game_state()

        # In this plase should be 'again' but self.start_game_again() call
        # this table.next_game_state, so we jump to begin - 'ready' state
        self.assertEqual(table.game_state, 'ready')
Exemple #4
0
def create_player(user, game, players):
    """Create and return player.

    only return player if he is already created
    :param user: user who will be related to player
    :param game: game what will be related to player
    :return: Player object
    """
    players = players.order_by('in_game_order')
    player = players.filter(user=user).first()
    if player is None:
        player = Player(user=user,
                        name=user.username,
                        game=game,
                        chips=GameSerializer(game).data['starting_chips'],
                        is_in_game=True)
    else:
        player.is_in_game = True

    # set player in_game_order
    if len(players) < 1:
        player.in_game_order = 1
    else:
        player.in_game_order = players.reverse()[0].in_game_order + 1

    # update number of connected players
    game.players_connected = len(players)
    game.save()

    player.save()
    return player.id
    def create_players(self, users):
        """Create a list of Player instances from a list of User
           instances for testing."""

        players = []

        for i, user in enumerate(users):
            player = Player(user=user, nickname=f'Swindle_{i}')
            player.save()
            players.append(player)

        return players
def _create_game(nb_player=4, game_name='test'):
    game = Game(name=game_name)
    game.save()
    user_names = ['Clément'] + ["bot_"+str(i) for i in range(nb_player-1)]
    players = []
    for user_name in user_names:
        user = User(username=user_name)
        user.save()
        player = Player(user=user, game=game)
        player.save()
        players.append(player)

    return game, players
Exemple #7
0
    def test_biggest_rate(self):
        """
        Should return the biggest value from all players from
        player.round_money field
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, round_money=1)
        player1.save()
        player2 = Player(name=us2, round_money=0)
        player2.save()
        player3 = Player(name=us3, round_money=99)
        player3.save()
        player4 = Player(name=us4, round_money=7)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='again')

        # Act
        result = table.biggest_rate()

        # Assertion
        self.assertEqual(result, 99)
Exemple #8
0
    def test_start_game_again(self):
        """Reset game and start them again with the same players"""

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='pass', round_money=1)
        player1.save()
        player2 = Player(name=us2, state='out', round_money=0)
        player2.save()
        player3 = Player(name=us3, state='check', round_money=99)
        player3.save()
        player4 = Player(name=us4, state='start', round_money=7)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='again')

        # Act
        table.start_game_again()

        # Assertion
        self.assertEqual(table.game_state, 'ready')
        self.assertEqual(table.player1.state, 'start')
        self.assertEqual(table.player2.state, 'start')
        self.assertEqual(table.player3.state, 'start')
        self.assertEqual(table.player4.state, 'start')
Exemple #9
0
 def populate_players(self, faker: Faker):
     teams = Team.objects.all()
     for team in teams:
         for i in range(10):
             player = Player(id=str(uuid.uuid4()),
                             first_name=faker.first_name(),
                             last_name=faker.last_name(),
                             date_of_birth=faker.date(),
                             country=faker.country(),
                             height=round(decimal.Decimal(random.randrange(20000)) / 100, 2),
                             weight=round(decimal.Decimal(random.randrange(20000)) / 100, 2),
                             team=team)
             player.save()
     msg.good("Players data successfully populated")
Exemple #10
0
    def test_check_players_have_cards(self):
        """Return False if at least one player have cards"""

        # Arrange
        cards1 = str(Card.new('As')) + ',' + str(Card.new('9s'))
        cards2 = str(Card.new('Ah')) + ',' + str(Card.new('9h'))
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, cards=cards1)
        player1.save()
        player2 = Player(name=us2, cards=cards2)
        player2.save()
        player3 = Player(name=us3)
        player3.save()
        player4 = Player(name=us4)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4)

        # Act
        result = table.check_players_have_cards()

        # Assertion
        self.assertFalse(result)
        table.remove_cards_from_players()
        result2 = table.check_players_have_cards()
        self.assertTrue(result2)
Exemple #11
0
    def test_all_players_round_money_to_zero(self):
        """Set round_money to zero for all players"""

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, round_money=-99)
        player1.save()
        player2 = Player(name=us2, round_money=0)
        player2.save()
        player3 = Player(name=us3, round_money=99)
        player3.save()
        player4 = Player(name=us4, round_money=9)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4)

        # Act
        table.all_players_round_money_to_zero()

        # Assertion
        self.assertEqual(table.player1.round_money, 0)
Exemple #12
0
 def __add_player(self, user_id, game_id, order):
     player = Player(
         user_id=user_id,
         game_id=game_id,
         balance=settings.DEFAULT_GAME_SETTINGS['start_money'],
         jailed=0,
         position=0,
         active=True,
         jail_free_card=False,
         move=0,
         order=order,
     )
     player.save()
     Proxy().load()
     return player
def create_game(request):
    if Game.objects.filter(status=Game.UNINITIALIZED).count() > 100:
        return HttpResponse('There is too many game at once', status=500)
    elif Game.objects.exclude(id__in=Player.objects.all().values(
            'game').distinct()).count() > 20:
        return HttpResponse('Please, join empty room', status=500)
    elif Game.objects.filter(id__in=Player.objects.filter(user=request.user).values('game')).\
            filter(status=Game.UNINITIALIZED).count() > 5:
        return HttpResponse(
            'You are in too much room at once, please leave one', status=500)
    game = Game(name=request.POST['name'])
    game.save()
    player = Player(user=request.user, game=game)
    player.save()
    return redirect('game_page', game_id=game.id)
Exemple #14
0
def creategame(roomcode):
    #take care of db-setup for new game
    p = Player(name="guest", score=0, status="N")
    p.save()
    g = Game(roomcode=roomcode,
             ruler=p,
             time=TIME,
             maxplayers=PLAYERS,
             aiplayers=AI,
             autoend=END,
             autochallenge=CHALLENGE)
    g.save()
    p.roomcode = g
    p.save()
    return p.id
Exemple #15
0
def index(request):
    player = get_player(request)
    if player is not None:
        # Delete old player and game objects
        if player.game and player == player.game.master:
            player.game.delete()
        player.delete()
        del request.session['player_pk']

    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['player_name']
            create_game = form.cleaned_data['create_game']

            checkin = CheckIn()
            checkin.save()
            player = Player(name=name, rand_id=Player.generate_rand_id(), checkin=checkin)

            if create_game:
                checkin = CheckIn()
                checkin.save()
                bot = Bot()
                bot.save()
                game = Game(checkin=checkin, bot=bot)
                game.save()
                player.game = game
                player.index = 1

            player.save()
            
            if create_game:
                game.master = player
                game.players.add(player)
                game.save()

            request.session['player_pk'] = player.pk
            request.session['player_rand_id'] = player.rand_id
            request.session['player_name'] = name

            if create_game:
                return redirect('/create-game')
            else:
                return redirect('/join-game')
    else:
        form = LoginForm(initial={'player_name': request.session.get('player_name', '')})

    return render(request, 'game/index.html', {'form': form})
Exemple #16
0
    def test_give_to_pool(self):
        """Give money from player.money to table.pool"""

        # Arrange
        us1 = User(username='******')
        us1.save()
        player1 = Player(name=us1, money=50)
        player1.save()
        table = Table(player1=player1, pool=0)

        # Act
        table.give_to_pool(player1, 10)

        # Assertion
        self.assertEqual(table.pool, 10)
        self.assertEqual(player1.money, 40)
Exemple #17
0
def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(
                request,
                f'Your account has been created! You are now able to log in')
            user = User.objects.get(username=username)
            #user = User.objects.get(username = request.POST['user'])
            #user.player_set.create(name = user.username) # set_create calismiyor
            player = Player(name=username)
            player.user = user
            player.save()
            return redirect('login')
    else:  #Create empty form
        form = UserRegisterForm()

    return render(request, 'users/register.html', {'form': form})
Exemple #18
0
    def test_dealer_button(self):
        """
        Give dealer button to first player or next of previous gamer

        Dealer is always awarded to the first player if the table.dealer field
        is empty or to the next player inthe table.dealer field
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='start')
        player1.save()
        player2 = Player(name=us2, state='start')
        player2.save()
        player3 = Player(name=us3, state='start')
        player3.save()
        player4 = Player(name=us4, state='start')
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='start')

        # Act & Assertion
        table.dealer_button()
        self.assertEqual(table.dealer, player1)

        table.game_state = 'start'
        table.dealer_button()
        self.assertEqual(table.dealer, player2)

        table.game_state = 'start'
        table.dealer_button()
        self.assertEqual(table.dealer, player3)

        table.game_state = 'start'
        table.dealer_button()
        self.assertEqual(table.dealer, player4)

        table.game_state = 'start'
        table.dealer_button()
        self.assertEqual(table.dealer, player1)
Exemple #19
0
    def test_start(self):
        """
        Set 'start' state for table and available players in table
        if number of players in this table is > 1
        and state of game is 'ready'
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='check')
        player1.save()
        player2 = Player(name=us2, state='pass')
        player2.save()
        player3 = Player(name=us3, state='raise')
        player3.save()
        player4 = Player(name=us4, state='out')
        player4.save()
        table = Table(player1=player1)

        # Assertions & Acts

        # Only 1 player in table (table.start() should not working)
        self.assertEqual(table.game_state, 'ready')
        table.start()
        self.assertNotEqual(table.game_state, 'start')

        # 4 players in table (table.start() should works)
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4)
        self.assertEqual(table.game_state, 'ready')
        self.assertEqual(player1.state, 'check')
        self.assertEqual(player2.state, 'pass')
        self.assertEqual(player3.state, 'raise')
        self.assertEqual(player4.state, 'out')
        table.start()
        self.assertEqual(table.game_state, 'start')
        self.assertEqual(player1.state, 'start')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')
Exemple #20
0
 def authenticate(self, username=None, password=None):
     try:
         info = login(username, password)
     except InformaticsApiInvalidPassword:
         return None
     try:
         user = User.objects.get(username=username)
     except User.DoesNotExist:
         user = User(
             username=username,
             password=password,
             first_name=info['firstname'],
             last_name=info['lastname'],
             is_superuser=(username in ADMINS),
             is_staff=(username in ADMINS),
         )
         user.save()
         player = Player(
             user=user,
             ejudge_id=info['ejudge_id'],
         )
         player.save()
     return user
Exemple #21
0
    def test_give_2(self):
        """
        Give 2 cards to each active player if:
        - game state = give 2
        - each player have None cards
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='start')
        player1.save()
        player2 = Player(name=us2, state='start')
        player2.save()
        player3 = Player(name=us3, state='start')
        player3.save()
        player4 = Player(name=us4, state='out')
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='give_2')
        table.fill_deck_by_all_cards()

        # Act
        table.give_2()

        # Assertion
        self.assertNotIn(player1.cards, table.deck)
        self.assertNotIn(player2.cards, table.deck)
        self.assertNotIn(player3.cards, table.deck)
        self.assertEqual(player4.cards, None)
        self.assertIsInstance(player1.cards, str)
        self.assertIsInstance(player2.cards, str)
        self.assertIsInstance(player3.cards, str)
        self.assertEqual(table.game_state, 'give_2')
Exemple #22
0
    def test_take_big_blind(self):
        """
        Take small blind from the next one from 'dealer player'

        Big blind is always awarded if players in table > 1
        - to the next player from the table.small_blind field
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='start')
        player1.save()
        player2 = Player(name=us2, state='start')
        player2.save()
        player3 = Player(name=us3, state='start')
        player3.save()
        player4 = Player(name=us4, state='start')
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='small_blind',
                      dealer=player1,
                      small_blind=player2)

        # Act & Assertion
        table.take_big_blind()
        self.assertEqual(table.big_blind, player3)

        table.game_state = 'small_blind'
        table.dealer = player2
        table.small_blind = player3
        table.take_big_blind()
        self.assertEqual(table.big_blind, player4)
Exemple #23
0
    def test_give_1_again(self):
        """
        Give 1 card to the table if:
        - game state = give 1 again
        - on table is only 4 cards
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1)
        player1.save()
        player2 = Player(name=us2)
        player2.save()
        player3 = Player(name=us3)
        player3.save()
        player4 = Player(name=us4)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='give_3')
        table.fill_deck_by_all_cards()

        # Act
        table.give_3()
        table.next_game_state()
        table.give_1()
        table.next_game_state()
        table.give_1_again()

        # Assertion
        self.assertNotIn(table.cards_on_table, table.deck)
        self.assertIsInstance(table.cards_on_table, str)
        self.assertEqual(table.game_state, 'give_1_again')
Exemple #24
0
    def test_the_winner(self):
        """Return winner in this table"""

        # Arrange
        cards1 = str(Card.new('2s')) + ',' + str(Card.new('3s'))
        cards2 = str(Card.new('4h')) + ',' + str(Card.new('5d'))
        cards3 = str(Card.new('6d')) + ',' + str(Card.new('7h'))
        cards4 = str(Card.new('As')) + ',' + str(Card.new('Ks'))
        cards_on_table = str(Card.new('Qs')) + ',' \
                         + str(Card.new('Js')) + ','\
                         + str(Card.new('Ts')) + ','\
                         + str(Card.new('2d')) + ','\
                         + str(Card.new('3d'))
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, cards=cards1, state='check')
        player1.save()
        player2 = Player(name=us2, cards=cards2, state='check')
        player2.save()
        player3 = Player(name=us3, cards=cards3, state='check')
        player3.save()
        player4 = Player(name=us4, cards=cards4, state='check')
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      cards_on_table=cards_on_table)

        # Act
        the_winner = table.the_winner()
        #print(the_winner)

        # Assertion
        self.assertEqual(the_winner, player4)
Exemple #25
0
    def test_set_all_in_game_players_state(self):
        """
        Pre: Create table with players with different states.
        Output: True if players without 'pass' or 'out' state have changed to
        'start' state.
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='pass')
        player1.save()
        player2 = Player(name=us2)
        player2.save()
        player3 = Player(name=us3, state='check')
        player3.save()
        player4 = Player(name=us4, state='start')
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4)

        # Act
        table.set_all_in_game_players_state('start')

        # Assertion
        self.assertEqual(table.player1.state, 'pass')
        self.assertEqual(table.player2.state, 'out')
        self.assertEqual(table.player3.state, 'start')
        self.assertEqual(table.player4.state, 'start')
Exemple #26
0
    def test_remove_cards_from_players(self):
        """Remove all cards from all players"""

        # Arrange
        cards1 = str(Card.new('As')) + ',' + str(Card.new('9s'))
        cards2 = str(Card.new('Ah')) + ',' + str(Card.new('9h'))
        cards3 = str(Card.new('Ad')) + ',' + str(Card.new('9d'))
        cards4 = str(Card.new('Ac')) + ',' + str(Card.new('9c'))
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, cards=cards1)
        player1.save()
        player2 = Player(name=us2, cards=cards2)
        player2.save()
        player3 = Player(name=us3, cards=cards3)
        player3.save()
        player4 = Player(name=us4, cards=cards4)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4)

        # Act
        table.remove_cards_from_players()

        # Assertion
        self.assertEqual(table.player1.cards, None)
        self.assertEqual(table.player2.cards, None)
        self.assertEqual(table.player3.cards, None)
        self.assertEqual(table.player4.cards, None)
Exemple #27
0
    def test_set_all_available_players_state(self):
        """
        Pre: Create table with players with 'out' state.
        Output: True if all players have changed to 'start' state.
        """

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1)
        player1.save()
        player2 = Player(name=us2)
        player2.save()
        player3 = Player(name=us3)
        player3.save()
        player4 = Player(name=us4)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4)

        # Act
        table.set_all_available_players_state('start')

        # Assertion
        self.assertEqual(table.player1.state, 'start')
        self.assertEqual(table.player2.state, 'start')
        self.assertEqual(table.player3.state, 'start')
        self.assertEqual(table.player4.state, 'start')
Exemple #28
0
def show_home(request):
    player_id = request.session.get('player_id', 'new')
    context = {}

    if request.method == 'POST':
        player_id = request.session.get('player_id', 'new')
        if player_id == 'new':
            return HttpResponse('Ошибка сессии')
        game_id = request.session.get('game_id')
        guess = int(request.POST.get('guess'))
        current_game = Game.objects.get(pk=game_id)
        current_player = Player.objects.get(pk=player_id)
        number = current_game.number
        context = {
            'role': current_player.role,
            'game': current_game,
            'guess': guess
        }
        if guess == number:
            current_game.solved = True
            current_game.try_count += 1
            current_game.save()
        else:
            current_game.try_count += 1
            current_game.save()

    elif isinstance(player_id, int):
        # игрок уже есть в базе
        current_player = Player.objects.get(pk=player_id)
        current_game = current_player.games.all().last()
        context = {'role': current_player.role, 'game': current_game}

    else:
        game_check = Game.objects.all().last()

        if game_check and len(list(game_check.players.values())) == 1:
            # игрок присоединяется к существующей игре в роли гостя
            new_player = Player(role='GU')
            new_player.save()
            request.session['player_id'] = new_player.id
            current_game = game_check
            request.session['game_id'] = current_game.id
            many_to_many = PlayerGameInfo(players=new_player,
                                          games=current_game)
            many_to_many.save()
            context = {'role': new_player.role, 'game': current_game}

        else:
            # создаем новую игру и делаем текущего игрока хостом
            new_player = Player(role='HO')
            new_player.save()
            request.session['player_id'] = new_player.id
            number = random.randint(1, 10)
            new_game = Game(number=number)
            new_game.save()
            many_to_many = PlayerGameInfo(players=new_player, games=new_game)
            many_to_many.save()
            request.session['game_id'] = new_game.id
            context = {'role': new_player.role, 'game': new_game}

    return render(request, 'home.html', context)
Exemple #29
0
    def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']

        if message:
            parsed_command = message.split(maxsplit=1)
            command = parsed_command[0].lower()
            try:
                command_arguments = parsed_command[1:]
            except IndexError:
                command_arguments = []

            if self.scope['user'].is_authenticated:
                try:
                    return_message = getattr(self.engine,
                                             command)(*command_arguments)

                except AttributeError:
                    # engine has no attribute command
                    return_message = f"{command} is not a valid command! Type 'help' if you need."

            elif command == 'login':
                if len(message.split()) == 3:
                    username_to_login = message.split()[1]
                    plain_password_to_login = message.split()[2]

                    if len(User.objects.filter(
                            username=username_to_login)) == 1:
                        self.user = User.objects.get(
                            username=username_to_login)
                        dt = self.user.last_login

                        if django_pbkdf2_sha256.verify(plain_password_to_login,
                                                       self.user.password):
                            async_to_sync(auth_login)(self.scope,
                                                      user=self.user)

                            if dt:
                                return_message = (
                                    f"Welcome back, {self.user}! \n"
                                    f"You last logged in at {dt.strftime('%Y-%m-%d %H:%M')} (UTC)"
                                )

                            else:
                                return_message = (
                                    f"Welcome to the MUD, {self.user}! \n"
                                    f"Since it's your first time here, we'll guide you in your first steps."
                                )

                            async_to_sync(self.channel_layer.group_send)(
                                self.room_group_name, {
                                    'type':
                                    'global_message_login_required_not_me',
                                    'message':
                                    f"{self.user} is back to WilyWolves MUD!",
                                    'sender_channel_name': self.channel_name
                                })

                        else:
                            return_message = "Wrong password! Please try 'login <username> <password> again."

                    else:
                        return_message = (
                            f"{username_to_login!r} is not a valid username. "
                            "If you are new here, please type 'new'")

                else:
                    return_message = "To log in, please type 'login <username> <password>'."

            elif command == 'new':
                if len(message.split()) == 3:
                    username_to_create = message.split()[1]
                    password_to_create = message.split()[2]
                    hashed_password = make_password(password_to_create)

                    if len(User.objects.filter(
                            username=username_to_create)) == 0:
                        new_user = User(username=username_to_create,
                                        password=hashed_password,
                                        is_superuser=False,
                                        is_staff=False)
                        new_user.save()
                        new_player = Player(user=new_user)
                        new_player.save()
                        return_message = (
                            f"User {username_to_create!r} successfully created! "
                            "Please type 'login' to start playing.")

                    else:
                        return_message = f"Someone is already using {username_to_create}"

                else:
                    return_message = "To create a new user, please type 'new <username> <password>'."
            else:
                return_message = "You need to log in first. Please type 'login' or 'new'"

            if return_message is not None:
                self.send(text_data=json.dumps({'message': return_message}))
from game.models import Player
import cjson

with open('/game/static/game/json/players.json', 'r') as f:
    for line in f:
        data = cjson.decode(line)
        p = Player(name=data['PLAYER_NAME'], gp=data['GP'], min=data['MIN'], tov=data['TOV'], reb=data['REB'],\
                   fg3a=data['FG3A'], efg=data['EFG_PCT'], ast=data['AST'], ast_tov=data['AST_TOV'], fg3m=data['FG3M'],\
                   oreb=data['OREB'], fgm=data['FGM'], pf=data['PF'], pts=data['PTS'], fga=data['FGA'], ts=data['TS_PCT'],\
                   stl=data['STL'], fta=data['FTA'], blk=data['BLK'], dreb=data['DREB'], ftm=data['FTM'], stl_tov=data['STL_TOV'],\
                   ft=data['FT_PCT'], fg=data['FG_PCT'], fg3=data['FG3_PCT'])
        p.save()
Exemple #31
0
 def test_cannot_create_player_without_game(self):
     my_player = Player(name="The winning team")
     with self.assertRaises(IntegrityError):
         my_player.save()
Exemple #32
0
    def test_make_turn(self):
        """That function is call in every game page overload"""

        # Arrange
        us1 = User(username='******')
        us1.save()
        us2 = User(username='******')
        us2.save()
        us3 = User(username='******')
        us3.save()
        us4 = User(username='******')
        us4.save()
        player1 = Player(name=us1, state='check', money=90)
        player1.save()
        player2 = Player(name=us2, state='check', money=90)
        player2.save()
        player3 = Player(name=us3, state='check', money=90)
        player3.save()
        player4 = Player(name=us4, state='check', money=90)
        player4.save()
        table = Table(player1=player1,
                      player2=player2,
                      player3=player3,
                      player4=player4,
                      game_state='ready')

        # Acts & Assertions
        table.start()
        table.dealer_button()
        self.assertEqual(table.game_state, 'dealer')

        table.take_small_blind()
        self.assertEqual(table.game_state, 'small_blind')

        table.take_big_blind()
        self.assertEqual(table.game_state, 'big_blind')

        # All players must give to the pool the same value
        table.give_to_pool(player1, 2)
        table.give_to_pool(player2, 1)
        table.give_to_pool(player4, 2)

        table.fill_deck_by_all_cards()

        table.set_all_in_game_players_state('check')
        table.make_turn()
        self.assertEqual(table.game_state, 'give_2')
        self.assertEqual(player1.state, 'start')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.make_turn()
        self.assertEqual(table.game_state, 'give_3')
        self.assertEqual(player1.state, 'start')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.player1.state = 'pass'
        table.make_turn()
        self.assertEqual(table.game_state, 'give_1')
        self.assertEqual(player1.state, 'pass')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.make_turn()
        self.assertEqual(table.game_state, 'give_1_again')
        self.assertEqual(player1.state, 'pass')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.player2.state = 'pass'
        table.make_turn()
        self.assertEqual(table.game_state, 'winner')
        self.assertEqual(player1.state, 'pass')
        self.assertEqual(player2.state, 'pass')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.make_turn()
        self.assertEqual(table.game_state, 'ready')
        self.assertEqual(player1.state, 'start')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.make_turn()
        self.assertEqual(table.game_state, 'small_blind')
        self.assertEqual(player1.state, 'start')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')

        table.set_all_in_game_players_state('check')
        table.make_turn()
        self.assertEqual(table.game_state, 'big_blind')
        self.assertEqual(player1.state, 'start')
        self.assertEqual(player2.state, 'start')
        self.assertEqual(player3.state, 'start')
        self.assertEqual(player4.state, 'start')