Ajouter l'option "Jouer contre un ordinateur"

Suggestions & ideas / Suggestions & idées
Post Reply
User avatar
CestLeJeuLucette
Posts: 4
Joined: 02 December 2021, 01:29

Ajouter l'option "Jouer contre un ordinateur"

Post by CestLeJeuLucette »

Bonjour,

L'idée serait de proposer pour les jeux un peu plus "désertés" du site une option intermédiaire permettant de jouer contre un ordinateur, bien évidemment le joueur ne gagnerait aucun point en cas de victoire et cela serait un moyen intermédiaire et intéressant d'apprendre à jouer au jeu en question sans forcément passer par le tutoriel.

Bien évidemment cela demande beaucoup, mais je trouve que cette idée serait très intéressante. pourquoi pas proposer la difficulté "facile" "moyen" et "difficile"
User avatar
LightKnight
Posts: 173
Joined: 20 July 2015, 18:39

Re: Ajouter l'option "Jouer contre un ordinateur"

Post by LightKnight »

Oh...
Ça paraît tellement évident que j'en viens presque à me demander pourquoi ça n'a pas déjà été implémenté...
Alors, de fait, ça implique de trouver des IAs spécialement adaptées pour les différents jeux, et évidemment très rares sont les jeux qui ont pu attirer des programmeurs pour faire des IAs... Cela dit... Il y aurait peut-être moyen "d'automatiser" un peu le processus en créant des archétypes de programmes basés sur l'apprentissage par renforcement...
User avatar
Meeplelowda
Posts: 3832
Joined: 14 March 2020, 10:31

Re: Ajouter l'option "Jouer contre un ordinateur"

Post by Meeplelowda »

Anyone who has programmed anything in any language would understand this is not a trivial ask.

This is the core of an AI I wrote for tic-tac-toe. TIC-TAC-TOE!!! One of the simplest games in the world. And you want them to just whip up AIs for all games? "AI" is not a wand you just wave at a problem and invoke magic words like "training" or "reinforced learning" as if it has the power of "abracadabra."

Code: Select all

def mm_move(board, player):
    """
    Make a move on the board.
    
    Returns a tuple with two elements.  The first element is the score
    of the given board and the second element is the desired move as a
    tuple, (row, col).
    """
    
    if board.check_win() != None:
        return 0, (-1, -1)
    
    if board.get_dim() == 2:
        return SCORES[player], (0, 0) 
    
    candidates = board.get_empty_squares()
    move_bucket = []
    for square in candidates: 
        board_copy = board.clone()
        board_copy.move(square[0], square[1], player)
        check_status = board_copy.check_win()
        if check_status != None:
            move_score = SCORES[check_status]
            move_bucket.append((move_score, square))
        else:
            swap = provided.switch_player(player)
            move_bucket.append(mm_move(board_copy, swap))
    
    provisional_score = -2
    for item in move_bucket:
        provisional_move = item[1]
        if item[0] == SCORES[player]:
            return item[0], item[1]
        else:
            if item[0] * SCORES[player] > provisional_score:
                provisional_score = item[0] * SCORES[player]
                provisional_move = item[1]
    return provisional_score, provisional_move 
Play Now lobby 4ever! https://boardgamearena.com/lobby
User avatar
LightKnight
Posts: 173
Joined: 20 July 2015, 18:39

Re: Ajouter l'option "Jouer contre un ordinateur"

Post by LightKnight »

Challenge accepted
(I had contemplated crafting AIs on a few games I know; I don't have the competence for an overall template through reinforced learning though, so it'll only be game-specific AIs)
Post Reply

Return to “Suggestions”