示例#1
0
def move(request):
    # Author: David Cabornero
    if request.method == 'POST':
        form = MoveForm(data=request.POST)
        # Comprobamos si el movimiento es válido en cuanto a rango de valores
        if form.is_valid():
            move = form.save(commit=False)
            move.player = request.user
            # Comprobamos si hay un juego seleccionado
            try:
                pk = request.session[constants.GAME_SELECTED_SESSION_ID]
                game = Game.objects.get(pk=pk)
            except KeyError:
                return JsonResponse({'valid': 0, 'winner': None})
            move.game = game
            # Comprobamos si el movimiento es completamente válido en cuanto
            # a modelo y lógica
            try:
                move.save()
            except ValidationError:
                return JsonResponse({'valid': 0, 'winner': None})
            return JsonResponse({'valid': 1, 'winner': Game.finish(game)})
        else:
            # Imprimimos los errores del formulario
            return JsonResponse({'valid': 0, 'winner': None})
    # No debería ser posible acceder a esta función mediante un método distinto
    # de POST. En caso de que ocurra, hacemos como que no lo hemos visto
    else:
        return JsonResponse({'valid': 0, 'winner': None})
示例#2
0
 def test1(self):
     """ Situaciones en las que gana el ratón por pasar a los 4 gatos """
     games = []
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=25, cat2=43, cat3=29, cat4=47, mouse=9,
                       status=GameStatus.ACTIVE))
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=9, cat2=18, cat3=13, cat4=29, mouse=4,
                       status=GameStatus.ACTIVE))
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=47, cat2=61, cat3=59, cat4=57,
                       mouse=36, status=GameStatus.ACTIVE))
     for game in games:
         game.full_clean()
         game.save()
         self.assertEqual(game.status, GameStatus.FINISHED)
         self.assertEqual(Game.finish(game), "mouse")
示例#3
0
 def test3(self):
     """ Situaciones en las que ganan los gatos\
     (el ratón queda acorralado) """
     games = []
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=48, cat2=50, cat3=20, cat4=36, mouse=57,
                       status=GameStatus.ACTIVE))
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=25, cat2=41, cat3=36, cat4=52, mouse=32,
                       status=GameStatus.ACTIVE))
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=27, cat2=29, cat3=43, cat4=45, mouse=36,
                       status=GameStatus.ACTIVE))
     for game in games:
         game.full_clean()
         game.save()
         self.assertEqual(game.status, GameStatus.FINISHED)
         self.assertEqual(Game.finish(game), "cat")
示例#4
0
 def test2(self):
     """ Situaciones en las que gana el ratón porque\
     los gatos se quedan sin movimientos """
     games = []
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=57, cat2=59, cat3=48, cat4=50, mouse=63,
                       status=GameStatus.ACTIVE))
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=63, cat2=61, cat3=54, cat4=47, mouse=45,
                       status=GameStatus.ACTIVE))
     games.append(Game(cat_user=self.users[0], mouse_user=self.users[1],
                       cat1=57, cat2=59, cat3=61, cat4=50, mouse=52,
                       status=GameStatus.ACTIVE))
     for game in games:
         game.full_clean()
         game.save()
         self.assertEqual(game.status, GameStatus.FINISHED)
         self.assertEqual(Game.finish(game), "mouse")
示例#5
0
def current_move(request):
    # Author: David Cabornero
    # Si el método es POST, página de error
    if request.method != 'POST':
        return errorHTTP(request, "GET not allowed")
    # Obtenemos los movimientos del juego ordenados por fecha
    game_id = request.session[constants.GAME_SELECTED_SESSION_ID]
    moves = Move.objects.filter(game__id=game_id).order_by('-date')
    # Si la lista es vacía es que no ha habido ningún movimiento, devolvemos
    # un JSON que indica eso
    if len(list(moves)) == 0:
        ret_json = {
            'origin': 0,
            'target': 0,
            'last_move': 'None',
            'winner': 'None'
        }
        return JsonResponse(ret_json)
    # Obtenemos el último movimiento
    curr_move = list(moves)[0]
    # Miramos quien ha hecho el último movimiento
    if curr_move.game.cat_turn is True:
        last_player = 'mouse'
    else:
        last_player = 'cat'
    # Miramos si ha acabado la partida
    if curr_move.game.status == GameStatus.FINISHED:
        winner = Game.finish(curr_move.game)
    else:
        winner = 'None'
    # Devolvemos el JSON con la información para ser procesada por AJAX
    ret_json = {
        'origin': curr_move.origin,
        'target': curr_move.target,
        'last_move': last_player,
        'winner': winner
    }
    return JsonResponse(ret_json)