12 décembre 2016

Brain damage


Petite mise au point sur mes récentes activités:
J'ai réécrit trois fois l'intelligence artificielle de BASTON. Le temps de trouver une logique, de faire des tests mais surtout de débugger... Je n'ai pas la moindre idée de la manière dont est gérée l'IA dans un jeu comme Street Fighter, donc je me suis débrouillé de façon empirique.

difficulty 0 - Stupid

Jusqu'à maintenant, les personnages contrôlés par l'ordinateur faisaient absolument n'importe quoi. Il n'y a pas d'autre mots pour décrire la façon erratique qu'ils avaient d'exécuter une action (déplacement, attaque, protection, charge et tir). Il était grand temps que cela change.

difficulty 1 - Curious

Alors j'ai écrit une première version de l'IA: je me suis dit que j'allais récupérer ce que j'avais fait pour Dragon Ball Z Devolution et qui ne marchait pas trop mal. Mais comme BASTON est programmé différemment, ça n'a rien donné. L'appel direct aux fonctions d'actions des personnages les laissaient pantois. Après recherche, je me suis rendu compte que pour que ça fonctionne bien, il fallait que je gère l'IA comme les inputs du joueur humain: dans le code les actions se lance à la pression ou au relâchement d'un bouton. Il fallait donc émuler un genre de gamepad pour l'IA.

difficulty 2 - Aware

J'ai recommencé de zéro en décrivant des comportements de base:

  • Se rapprocher de l'adversaire.
  • S'éloigner de l'adversaire.
  • Charger du Ki.
  • Tirer un Ki blast.
  • ...

Chaque comportement appuie ou relâche un bouton du gamepad. Quand je me suis assuré qu'elles fonctionnaient toutes, je les ai appelé avec un hasard contrôlé. Mais ce n'était toujours pas assez bien: ça ressemblait à la version décérébrée que nous avions jusqu'ici. Mais j'avais commencé à diviser les actions en petites fonctions indépendantes facilement améliorables, ce qui m'a entraîné vers la troisième réécriture.

difficulty 3 - Autistic

j'ai définis plusieurs tests pour différentes situations concrètes qui vont faire appel aux comportements de base. Par exemple:

  • Si l'adversaire est à terre et que notre IA a plus d'une barre de Ki, il balance un gros blast.
  • Si l'adversaire se défend, l'IA peut casser la garde avec un dash ou s'éloigner.
  • Si l'adversaire est loin, l'IA peut tirer différents blasts selon sa jauge de Ki, ou charger du Ki, ou se rapprocher.
  • ...

Et ainsi de suite. D'un coup, l'IA est devenue très agressive car elle répondait instantanément aux décisions de l'adversaire. Pas d'anticipation, juste des réponses rapides à des stimuli. Pour calmer le jeu, j'ai réintroduit un tirage aléatoire. Par exemple, si l'adversaire attaque, l'IA a une chance sur trois de se défendre au lieu de tout parer.

Vous pouvez dès aujourd'hui vous fritter avec cette nouvelle IA. Je vous conseille d'être réactif !

BASTON
Cliquez ici pour en prendre plein la tronche


Il reste surement quelques bugs. Je vais ajouter de nouveaux tests de situations et faire des réglages pour rendre le comportement un peu plus "humain" durant le match.

Par exemple, la chance (sur 100%) d’exécuter un comportement de base pourrait varier avec un cosinus du temps écoulé:

chance = random( 20 + 10 * cos(elapsed) )

Comme ça l'IA aura des moments de force ou de faiblesses au fil du temps. Ça a l'air bien sur le papier, mais pour le mettre en pratique et vérifier ce que ça donne, il faut que j'observe un certain nombre de combats. C'est long et le temps passe vite...

A ce propos, ça me fait penser que j'ai programmé une super intelligence artificielle pour Renju of my Youth, mais je ne l'ai jamais rendu publique... Je comptais sortir le jeu sur Android TV mais la manette refusait de fonctionner correctement... Je vais sortir la version Flash avant Noël, ce sera mon cadeau pour ceux qui préfèrent la réflexion à la BASTON.


Catégories: Jeux - Mots clés: BASTON, Renju of my youth

Translate TRANSLATE Translate        Traducir TRADUCIR Traducir

Share Txori on Facebook Follow Txori on Twitter Add Txori to your RSS feed

Catégories

Archives

Tags

Derniers articles