TICTACTOE EN C

LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009 - 30 nov. 2009 à 11:08
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011 - 4 déc. 2009 à 17:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50909-tictactoe-en-c

FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
4 déc. 2009 à 17:19
Allons-y!
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
3 déc. 2009 à 18:33
Salut,

Pour ne pas avoir de problemes, force ton compilateur a utiliser uniquement le C ou C++ ANSI quand tu developpes.

La tu seras portable avec du vrai C ou C++.

Eric
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
3 déc. 2009 à 16:45
Je viens d'essayer sous Vista avec Dev-C++ (c'est gcc aussi, mais bon...), ca compile parfaitement.
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
3 déc. 2009 à 16:24
>> Pistol_Pete

Oui, je le sais bien mais que veux tu, comme mon compilateur l'a avalé tout rond ben.... C'est quoi comme compilateur dans VisualStudio? Moi j'ai utilisé gcc dans NetBeans.
Je précise que quand j'ai compilé sur mon Mac avec Xcode 1.5 (et oui ca date un peu), il ne m'a pas signalé d'erreur non plus.

Pour la programmation défensive, c'était pas le but, mais je comprend ta remarque (franchement, pour des petits tests comme ça, j'avais pas envie de m'embeter avec).

Pour l' IA, je crois que tu l'a survolée un peu vite!!
Elle fait le même boulot que MiniMax ou AlphaBeta, avec moins d'instructions. Elle est donc plus performante; notament parcequ'elle réduit les calculs inutiles.
J'ai une autre version de l'IA encore plus légère, et qui fournit le même travail, non publiée pour l'instant.
; )

François
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
2 déc. 2009 à 18:09
Salut
Pour rebondir sur la fonction win(), googlelight a raison, il faut déclarer la fonction win avant de l'utiliser. Le compilo lie séquentiellement le programme: quand il tombe sur win qui n'est pas encore déclaré, il te met une erreur et c'est normal. Je suis très surpris que ca compile comme ca!
Il suffit d'ajouter le prototype de la fonction en début de programme:
int win(int accessMode);
En tout ca sur VS, ca passe pas.

Autre chose, quand tu demandes à l'utilisateur d'entrer un chiffre et plus globalement quand tu interagis avec lui, il faut que tu t'assures que l'action qu'il entreprend est correct. As tu essayé d'entrer une lettre au lieu d'un chiffre dans ton prog?

En ce qui concerne l'IA, tu peux essayer sur des petits programmes comme cela des algorithmes plus évolués comme les algos minmax, et Alpha beta. Tu trouveras beaucoup d'exemples sur ce site et dans la littérature.

Bonne continuation
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
30 nov. 2009 à 12:20
Dans le doute, je viens de tester ce source sous Mac OSx, et il compile sans l'ombre d'une erreure; tout comme avec OpenSolaris....

Je maintient donc la portabilité de ce code.

François
googlelight Messages postés 2 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 30 novembre 2009
30 nov. 2009 à 12:18
voila g changer les emplacement des definitions de win et de reset et ca marche tres bien (sauf que je gagne plus hh)
++ meziane :D
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
30 nov. 2009 à 11:57
>> GoogleLight

Mon compilateur l'accepte tel quel.
Toutefois, tous n'ont pas la même interprétation de la norme du langage.
Il suffit de rajouter en haut du fichier l'en tête de la fonction concernée, elle est ainsi explicitement déclarée.
C'est un bon exemple de ce que constitue un code portable actuellement. C'est à dire portable d'un système à un autre sans trop de modifications à faire... mais ça reste quasi inévitable.

Merci à vous!

François
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
30 nov. 2009 à 11:53
Heyyy,
pas mal, j'y avais pas pensé!

Merci!

Il manque pas de 0 a la fin du test, il fini par :printf("") (Il est caché à la ligne en dessous, parceque je trouvais nul de finir le test comme ça, et je ne l'ai ensuite pas corrigé.... ;)

François
googlelight Messages postés 2 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 30 novembre 2009
30 nov. 2009 à 11:42
Slt ; courage frero ;mais en compilant je recois ce mssg d'erreur
`win' undeclared (first use this function)
`int win(int)' used prior to declaration
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
30 nov. 2009 à 11:08
Salut,

Petit source interessant et tres lisible :o).
J'aurai juste une petite remarque:
- pour tester qui a gagne, tu peux faire plus efficace avec un truc genre:
whoWin = tab[1]==tab[4]&&tab[4]==tab[7]?tab[7]:
tab[2]==tab[5]&&tab[5]==tab[8]?tab[8]:
.../...
tab[3]==tab[5]&&tab[5]==tab[7]?tab[7]:0;
Ca te renvoie 0, 'X' ou '0' au lieu de 0, 1 ou 2 mais tu fais deux fois moins de tests, et chaque test consiste en 2 et un && au lieux de 3 + et un (de plus, si le premier == est faux, le reste du test n'est pas effectue :o) )

Note qu'il manque un "0;" a la fin de ton test (a moins que ce ne soit un probleme d'affichage de cppfrance.com?). Je suis etonne que ca compile tel quel.

Eric
Rejoignez-nous