J'écris un jeu de tic-tac-toe comme un projet parallèle pour obtenir un peu plus d'expérience pratique avec Racket. Voici une fonction qui vérifie s'il y a une ligne verticale ou horizontale (le code qui vérifie les lignes diagonales est une fonction qui appelle celui-ci):Quoi de plus simple, écrivez ce code pour déterminer le gagnant d'un jeu de tic-tac-toe?
(define (has-line? moves)
(let ((positions (flatten (map string->list moves))))
(ormap
(lambda (char)
(>=
(count
(lambda (lchar)
(char-ci=? lchar char))
positions)
3))
'(#\a #\b #\C#\1 #\2 #\3)))
Cette fonction obtient une liste de chaînes qui représentent la les espaces que le joueur actuel a choisis avec les lettres représentant la colonne et les nombres représentant la rangée. L'approche que je prends est de voir s'il y a des ensembles de 3 (3 positions qui sont toutes dans la colonne a, 3 positions qui sont toutes dans la ligne 2, etc.).
Il pourrait y avoir une meilleure façon de déterminer le gagnant, mais je suis plus curieux de savoir comment mettre en œuvre ce qui précède mieux. Ce que je fais en ce moment c'est de transformer la liste des positions en une liste de caractères (donc '("a1" "b2")
devient '(#\a #\1 #\b #\2)
et de compter chaque personnage.) Ce code fonctionne, mais il semble qu'il devrait y avoir un moyen plus simple de le faire. ?
Chers cieux ... Je suis arrivé ici avant Eli J'espère avoir quelque chose utile à sa y ... –