Home

Morpion 3D

image

Contents

1. 00207 static const t color RED 1 0f 0 0f 0 0f 00208 static const t color GREEN 0 0f 1 0f 0 0f 00209 static const t color BLUE 0 0f 0 0f 1 0f 00210 static const t color YELLOW 0 9f 1 0f 0 0f 00211 static const t_color WHITE 1 0f 1 0f 1 0f 00212 static const t_color NOPION 0 5f 0 4f 0 4f 00213 static const t_color FOND 0 3f 0 5f 1 0f 00214 static const t_color TEXTE 0 5f 0 0f 0 6f 00215 static const t_color IACOLOR 1 0f 0 5f 0 3f 00216 static const t color SELECT 0 2f 0 3f 0 4f 00217 OO218 J en eee eee eee ee eee ee ee 00219 PROTOTYPES DES FONCTIONS 00220 kek ke ke ake ake ake ake ake ak ak ae ak ak ak afak 3 ak ak ak ak ake kakak ae akk ak 3k ak ae ke ake kkk 00221 coord c 00222 COORD ReadCoord void 00223 int SetCoord char tab COORD place t joueur joueur 00224 void RemoveCoord char tab COORD place 00225 char IsNoPion char tab COORD place 00226 COORD FindFirstPion char tab char pion 00227 COORD CoordNear char tab COORD pion 00228 COORD SelectBestPlace char tab 00229 file c 30 Mini projet C 2004 Morpion 3D 00230 int CreateFile char nom 00231 int OpenFile char nom 00232 int PrintFile void 00233 int WriteDataPlayer int handle t_joueur joueur 00234 int SaveGame tplat tab t joueur joueurl t joueur joueur2 00235 int LoadGame tplat tab t joue
2. sprintf buf x ou y ou z Zou coords x coords y coords z NetSend amp fdsocket buf 20 if strncmp buffer OK at 5 0 sscanf buffer OK at x u y u z Zou amp coords x amp coords y amp coords z SetCoord plateau coords amp joueur1 EraseScreen Display plateau amp joueurl amp joueur2 joueurl nbcoup if strnemp buffer EOG I won 9 0 printf Vous avez perdu Apr s d tour c n joueur1 nbcoup joueur1 nbcoup gt 1 s WriteString STDOUT Appuyez sur ENTREE pour continuer 1 GetString STDIN SIZEBUFFER if strnemp buffer EOG You won 11 0 printf Vous avez gagn Apr s d tour c n joueurl nbcoup joueur1 nbcoup gt 1 s WriteString STDOUT Appuyez sur ENTREE pour continuer 1 GetString STDIN SIZEBUFFER while strnemp buffer EOG 3 0 amp amp r StopClient amp fdsocket free ipserver free key 36 Mini projet C 2004 Morpion 3D 00162 break 00163 endif 00164 ifdef WITHOPENGL 00165 case CHARGERPARTIE 00166 if LoadGame plateau amp joueurl amp joueur2 00167 IitGIGame plateau amp joueurl amp joueur2 NO SOCKET amp argc argv 00168 break 00169 endif 00170 case QUITTER 00171 QUIT TRUE 00172 break 00173 default 00174 break 00175 00176 ifjoueurl nom NULL 00177 00178 free joueurl nom 00179 free joueur2 nom 00180 joueurl nom NULL 00181 joueur2 nom NULL 0018
3. 00065 place FindFirstPion tab adverse gt id 00066 Normalement on ne rentre pas dans le test l adversaire a joue un et un seul coup 00067 Donc il a un pion sur le plateau que nous avons trouv 00068 if place x gt NBX Il place y gt NBY Il place z gt NBZ 00069 return NOPOS 00070 On joue a cote du pion juste pos 00071 place CoordNear tab place 00072 return place 00073 00074 else 00075 00076 On regarde si on peut gagner 00077 place FindPosForWin tab IA amp winner 00078 if place x lt NBX amp amp place y NBY amp amp place z NBZ 00079 return place 00080 l adversaire peut gagner au tour suivant 00081 place FindPosForWin tab adverse amp winner 00082 if place x lt NBX amp amp place y NBY amp amp place z NBZ 00083 return place 00084 Je regarde si je peux aligner 2 2pions 00085 place FindTwoPosWin tab IA 00086 if place x lt NBX amp amp place y lt NBY k place z lt NBZ 00087 return place 00088 Je regarde si l adversaire peut en mettant au tour suivant un pion 00089 avoir 2 possibilites de gagner dans 2 tours 00090 place FindTwoPosWin tab adverse 00091 if place x lt NBX amp amp place y lt NBY k place z lt NBZ 00092 return place 00093 Si aucun des cas ne sont possibles 00094 return SelectBestPlace tab 00095 00096 15 Opengl_init c 00001 include global h 00002
4. 00074 00075 00076 E443 a AHSA AS PSI a A ake a a ake AS AS afe ake RE PIEDS DRE HE PR RAS SDS PR DSP ak ake ak SAS SSD RE EDS PRESS HS RE DR EE PR RS ES SR RER ARE 00077 PrintFile 00078 Affiche tous les fichiers portant l extension sav dans le repertoire courant 00079 433333 HSE aal OH AE ake ake ake oke aj ak oke 346 ake 346 a ake ak akk ak ak ak ake SEE GES IDR HIDE CRE ake ke GDS IR ake ak ak RE RE HE RER ak akak kak 00080 00081 int PrintFile void 00082 00083 if LINUX 1 00084 system ls format single column sav 00085 return TRUE Mini projet C 2004 Morpion 3D 00086 else 00087 char nom SIZEBUFFER 00088 struct finddata t sav file 00089 long hFile 00090 00091 EraseScreen 00092 if hFile findfirst sav amp sav_file 1L 00093 00094 WriteString STDOUT Pas de fichier de sauvegarde dans le repertoire du jeu 1 00095 GetString STDIN SIZEBUFFER 00096 return FALSE 00097 00098 else 00099 00100 WriteString STDOUT Fichier de sauvegarde present dans le repertoire 1 00101 sprintf nom 12s n sav_file name 00102 WriteString STDOUT nom 1 00103 Trouve le reste des dic du repertoire 00104 while _findnext hFile amp sav_file 0 00105 00106 sprintf nom 12s n sav_file name 00107 WriteString STDOUT nom 1 00108 00109 _findclose hFile 00110 00111 return TRUE 00112 endif 00113
5. 0 00112 nb2 0 00113 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00114 00115 if lastplay x i lt 0 II lastplay x i gt NBX 00116 continue 00117 if lastplay z i gt 0 amp amp lastplay z i lt NBY 00118 00119 if ContenuTab tab lastplay x i lastplay y lastplay z i joueur gt id 00120 nb 00121 else 00122 nb 0 00123 00124 if lastplay z i gt 0 amp amp lastplay z 1 NBY 00125 00126 if ContenuTab tab lastplay x i lastplay y lastplay z i joueur id 00127 nb2 00128 else 00129 nb2 0 00130 00131 if nb gt NBPIONSALIGN 00132 00133 cmpt 00134 break 00135 00136 if nb2 gt NBPIONSALIGN 00137 00138 cmpt 00139 break 00140 00141 00142 00143 Plan yz 00144 nb 0 00145 nb2 0 00146 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00147 00148 if astplay y i lt 0 II lastplay y i gt NBX 00149 continue 00150 if lastplay z 1 gt 0 amp amp lastplay z i lt NBZ 00151 00152 if ContenuTab tab lastplay x lastplay y i lastplay z i joueur gt id 52 Mini projet C 2004 Morpion 3D 00153 nb 00154 else 00155 nb 0 00156 00157 if lastplay z i gt 0 amp amp lastplay z i lt NBZ 00158 00159 if ContenuTab tab lastplay x lastplay y i lastplay z 1 joueur gt i
6. 00003 int mainWindow subWindowl subWindow2 00004 extern int w1 hi 00005 00006 a a ak ak ak ak ak ee ee eee ee D ak ak ak ak ak a 00007 InitLibGlut ki 00008 Initialisation de la librairie GLUT pour OpenGL 62 Mini projet C 2004 Morpion 3D 00010 void InitLibGlut int argc char argv 00011 00012 glutlnit argc argv 00013 Buffer de profondeur double buffer et fenetre en mode RGBA 00014 ifdef WITHALPHA 00015 glutinitDisplayMode GLUT_DEPTH GLUT DOUBLE GLUT ROBA GLUT ALPHA 00016 else 00017 glutinitDisplayMode GLUT_DEPTH GLUT DOUBLE 00018 endif 00019 return 00020 00021 00023 InitWindow ki 00024 Initialisation et creation de la fenetre du jeu en OpenGL x 00026 void InitWindow void 00027 00028 atexit DestroyWindow 00029 Information sur la fenetre emplacement d origine taille et titre 00030 glutinitWindowPosition POSX POSY 00031 w1 WIDTH 00032 h1 HEIGHT 00033 00034 glutlnitWindowSize WIDTH HEIGHT 00035 mainWindow glutCreate Window WINDOWTITLE 00036 glClearColor FOND red FOND green FOND blue 1 0 00037 Les fonctions a appeler si tel ou tel evenement arrive 00038 glutReshapeFunc ChangesSize 00039 glutDisplayFunc RenderScene 00040 glutldleFunc RenderSceneAll 00041 glutSpecialFunc processSpecialKeys 00042 glutKeyboardFunc ProcessNormalKeys 00043 On divise la fenetre en 3 parties 00044 Dans cette p
7. ContenuTab plateau i j k joueur2 id 00131 glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue 67 Mini projet C 2004 Morpion 3D 00132 else if ContenuTab plateau i j k CASESELECT 00133 glColor3f SELECT red SELECT green SELECT blue 00134 else 00135 glColor3f NOPION red NOPION green NOPION blue 00136 endif 00137 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j ycase 1 ECARTBORD k zcase 00138 glVertex3f 1 ECARTBORD i RATIO1 xcase 1 ECARTBORD j ycase 1 ECARTBORD k zcase 00133 glVertex3f 1 ECARTBORD i RATIO1 xcase 1 ECARTBORD j ycase 1 ECARTBORD k RATIO 00140 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j ycase 1 ECARTBORD k RATIO zcase 00141 glEnd 00142 face 3 du cube 00143 glBegin state 00144 ifdef WITHALPHA 00145 1f ARRETE 00146 glColor4f 0 0f 0 0f 0 0f ALPHAV ALUE 00147 else if ContenuTab plateau i j k joueurl id 00148 glColor4f joueurl couleur red joueurl couleur green joueurl couleur blue ALPHAVALUE 00149 else if ContenuTab plateau i j k joueur2 id 00150 glColor4f joueur2 couleur red joueur2 couleur green joueur2 couleur blue ALPHAVALUE 00151 else if ContenuTab plateau i j k CASESELECT 00152 glColor4f SELECT red SELECT green SELECT blue ALPHAVALUE 00153 else 00154 glColor4
8. Morpion 3D VI L algorithme de l intelligence artificielle IA 1 Etude du fonctionnement de FIA Apr s analyse de nombreux exemples 1l s est av r que la case centrale du cube est primordiale pour la victoire Premier tour de l IA e LILA commence donc par tester si la case centrale du plateau est prise Si ce n est pas le cas elle joue sur cette case Au deuxi me tour de jeu de l IA ou du joueur cette case est donc prise Deuxi me tour de l IA si elle a commenc e SilIA a commenc elle a jou au centre et l adversaire a jou sur une des 26 autres cases L IA joue alors sur une des cases avoisinant le pion adverse en faisant varier une seule coordonn e x y ou z Le joueur adverse est alors oblig de contrer l IA qui a 2 pions align s et ne peut en contrant l IA aligner 2 pions et donc avoir une possibilit de gagner au tour suivant Tous les autres cas e Pour les autres tours le principe de l IA est simple Elle regarde si elle peut gagner Si elle a plusieurs possibilit s de gagner elle renvoie au hasard une des positions sur lesquelles elle peut gagner e Sice n est pas le cas elle regarde si l adversaire peut gagner et de la m me fa on joue sur une des cases au hasard o l adversaire peut gagner e Autrement si ni l IA ni le joueur ne peuvent gagner l TA regarde si en jouant sur une case elle ne peut pas aligner deux fois deux pions pour avoir deux possibilit s de gagner a
9. RATIO YCASE2 00113 00114 b j 00115 break 00116 00117 for k 0 k lt NBZ k 00118 00119 if DONE TRUE 00120 break 00121 for i 0 i lt NBX i if x gt k 1 ECARTTAB i XCASE2 k XTAB amp amp x lt k 1 ECARTTAB i RATIO 00122 XCASE2 k XTAB 00123 00124 A 1 00125 c k 00126 DONE TRUE 00127 break 00128 00129 00130 if DONE amp amp ContenuTab plateau a b c PASDEPION 00131 00132 ISSELECT TRUE 00133 ContenuTab plateau a b c CASESELECT 00134 00135 00136 00137 return 00138 21 font opengl c 00001 include global h 00002 00003 extern int w1 hi 00004 00005 TEE ake ae ae ak ae ae ake ak ake ae ake ak ak ae ae ak ak ae ae ake ae ae ae ak ake ae ae ak ak ae ae ake ae ae ae ak ak ae ake ake ake ae ake ak ke ae ae ak ake ae ake ake ak ae ake ke ae ake a ee ae ake ake 00006 setOrthographicProjection 00007 Bascule la matrice la sauvegarde et l alt re pour l affichage de texte 00008 k2 ak ak ak ak ak ak ake ak hh ake ee eee eee ee ke ke ke ke ee 24 eee ee ee ee ee ke ke ae a ake ae eee eee ee ee ak ak ok ok ok 2k 00009 void setOrthographicProjection void 00010 00011 glMatrixMode GL PROJECTION On se met en mode projection 00012 glPushMatrix Sans oublier de sauvegarder l ancienne matrice 00013 glLoadidentity On reset la matrice 00014 gluOrtho2D 0 w1
10. Renvoie la postion du premier pion sur le plateau a 00083 ki kak ak ak kk ak a kk ak a kk ak ak kak ak ak kak ap ak l kak ak kk ak a kk ak ak a ak ak ke kak ak kek ak ak ae 00084 COORD FindFirstPion char tab char pion 00085 00086 unsigned chari j k 00087 COORD place 00088 00089 for k 0 k NBZ k 00090 for j 0 j lt NBY j 00091 for i 0 i lt NBX i 00092 00093 if ContenuTab tab i j k pion 00094 00095 place x i 00096 place y j 00097 place z k 00098 return place 00099 00100 00101 return NOPOS 00102 00103 001 04 8434 ake k a 2 sk AS DS a A ske A Ae ake a DAS SPA RE EDS RE EEE 00105 CoordNear 00106 Renvoie les coordonnees d une case entourant la case donnee en parametre et ce 00107 de fa on aleatoire Il faut que cette case touche pleinement la case donnee s Mini projet C 2004 Morpion 3D 00108 EE e h a rh ke e A ak ake aki e ak ak ek a a Ek e ae ak ke aki e ak ki ek ae ak e e af akle ae a ke eko e PE ae a a A 00109 COORD CoordNear char tab COORD pion 00110 00111 Il ne peut y avoir que 6 cases adjacentes a une case donn e 00112 COORD place 6 temp 00113 char 1 00114 unsigned char cmpt 00115 00116 cmpt 0 00117 temp pion 00118 for i 1 i lt 1 i 00119 00120 ITU 0 00121 continue 00122 temp x char pion x i 00123 Il faut verifier que l on peut bien mettre un pion sur
11. aliser une application en mode console donc une programmation de type it rative Puis lorsque nous sommes pass s OpenGL alors que nous pensions r utiliser le code pr alablement tap nous nous sommes rendus compte qu il fallait utiliser une optique compl tement diff rente et programmer d un point de vue v nementiel Ensuite nous nous sommes heurt s videmment plusieurs pi ges Tout d abord avec la gestion d une fen tre Nous tions habitu s travailler sur des fen tres dont l origine est en haut gauche mais l surprise l origine est au centre et les axes sont gradu s de 1 1 Il a donc fallu trouver une m thode pour changer la position de cette origine et la valeur des axes Un autre probl me que nous avons d j abord est le prototypage impos de la majorit des fonctions Ceci nous a encore oblig revoir une bonne partie du code Lorsque le jeu fonctionnait en mode OpenGL nous avons alors travaill sur l aspect graphisme en ajoutant des effets de transparence et de lumi re Mais l des probl mes d ordre de la compatibilit windows linux nous ont pos quelques soucis En effet avec X window sous linux le logiciel refusait de se lancer Ceci tait d l utilisation de buffer de 32 bits Un autre probl me tait galement pr sent lorsqu une partie tait finie Nous souhaitions revenir au menu pr sent en console Et le probl me la seule m thode apparente p
12. amp joueurl amp joueur2 00028 00029 Affichage des 3 plans du morpion 00030 for k 0 k lt NBZ k 00031 00032 glPushMatrix 00033 glLoadldentity 00034 On se met en 2D avec l origine du repere en haut gauche 00035 gluOrtho2D 0 w1 0 h1 2 00036 glScalef 1 1 1 00037 gITranslatef 0 h1 2 0 00038 for j 0 j lt NBY j 00039 00040 for i 0 i lt NBX i 00041 00042 00043 glBegin GL_QUADS 00044 if ContenuTab plateau i j k joueur1 id 00045 glColor3f joueur1 couleur red joueurl couleur green joueurl couleur blue 00046 else if ContenuTab plateau i j k joueur2 id 00047 glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue 00048 else if ContenuTab plateau i j k CASESELECT 00049 glColor3f SELECT red SELECT green SELECT blue 00050 else 00051 glColor3f NOPION red NOPION green NOPION blue 00052 glVertex2f k 1 ECARTTAB i XCASE2 k XTAB ECARTTAB j YCASE 2 00053 glVertex2f k 1 ECARTTAB i RATIO XCASE2 k XTAB ECARTTAB j YCASE2 mon E2 glVertex2f k 1 ECARTTAB i RATIO XCASE2 k XTAB ECARTTAB j RATIO 00055 glVertex2f k 1 ECARTTAB i XCASE2 k XTAB ECARTTAB j RATIO YCASE2 00056 glEnd 00057 00058 00059 On affiche du texte sous les tableaux pour indiquer de quel tableau il s agit 00060 glPopMatrix 00061
13. ation des fen tres et la programmation des interactions par clavier et souris GLUT et GLU offrent galement certaines fonctions de plus haut niveau primitives g om triques de base aide au placement des cam ras aide au texturage etc Plans m moires OpenGL organise les donn es qu il manipule en plans m moires ou buffer M moire cran ou Color Buffer contient les pixels de l image rendue On peut galement effectuer le rendu dans des plans auxiliaires utilis s ult rieurement Tampon de profondeur ou z buffer contient l information de profondeur associ e chaque pixel distance du plus proche objet plan de stencil calque fixe devant l cran plan d accumulation utilis pour des effets complexes comme l anti cr nelage ou la simulation de profondeur de champ Mod lisation de sc ne On pr sente ici les bases pour mod liser g om triquement une sc ne c est dire placer des objets d finir une cam ra et l orienter convenablement Quelques primitives g om triques de base Dans la pratique on construit les objets g om triques par assemblage de primitives de base ou comme ensemble de polygones Les primitives de bases sont elles m mes constitu es de polygones Note Les primitives ainsi d finies sont plac es et orient es relativement un rep re local par exemple la sph re a son centre en l origine du rep re On verra plus loin comment d placer et orie
14. finitif fe Morpion 3D Ja x Comme toujours l intelligence artificielle nous a vaincus en quatre tours sniff 14 Mini projet C 2004 Morpion 3D 2 En r seau mode texte Menu principal 0 Deux joueurs sur le meme PC 1 Joueur contre ordinateur 2 Jeu en reseau 3 Quitter le jeu Quel menu voulez vous choisir 2 Version r seau si pour jouer en serveur ci pour jouer en client B Choix du r le de serveur r seau Initialisation d un joueur Nom du joueur joueur2 Choix de la couleur du pion 0 Rouge 1 Vert 2 Bleu 3 Jaune 4 Blanc Quel menu voulez vous choisir 2 Socket cr Veuillez saisir l adresse IP du serveur 127 0 0 1 Saisie de l ip du serveur du cot du client Vous avez perdu Apr s 2 tours yo sur ENTREE pour continuer Du cot du perdant Initialisation d un joueur Nom du joueur TL joueuri Choix de la couleur du pion 0 Rouge 1 Vert 2 Bleu 3 Jaune 4 Blanc Quel menu voulez vous choisir 2 Socket cr Socket attach e waang en coute Serveur en attente ai 1 Vert 2 Bleu 3 Jaune 4 Blanc Quel menu voulez vous choisir 2 Socket cr Veuillez saisir l adresse IP du serveur 127 0 0 1 Socket connect e joueuri b t LI Connexion tablie ui Morpion 3D realise par Savon et Seb Pour quitter la partie tapez la lettre Q lettre S joueuri
15. i if IsNoPion tab tab4 i place j abin jt if return place Randomize 0 j 1 I place COORD realloc place 14 sizeof char j 0 for i 0 i lt 14 i if IsNoPion tab tab3 i placelj tab3fil jt 47 Mini projet C 2004 Morpion 3D 00215 00216 00217 if U 00218 return place Randomize 0 j 1 00219 00220 Impossible ou le plateau est completement rempli 00221 return NOPOS 00222 9 Menu c 00001 include global h 00002 00003 Ft ak ak ak ak ak ak ak ea a kk ak ak ak kk ak kak ak ak ak ak kak a kk ak ap ak ke ak ak ak ak ak ak a kk ak ak ak ak ak ak ke ak ak a 00004 DisplayMenu 00005 Affiche un menu et renvoie la longueur de celui ci 00006 ia tak ak ak kk ak ak a ee ee ap ak ak kak ak kk ak a kek ak a ke ak ak ak ke kak ak kek ak ak ae 00007 int DisplayMenu t menu menu char ERASE 00008 00009 unsigned char i 00010 char buffer SIZEBUFFER 00011 00012 if ERASE 00013 EraseScreen 00014 WriteString STDOUT menu titre 1 00015 for i 0 i lt menu lenmenu i 00016 00017 sprintf buffer t i s i menu tabmenu i 00018 WriteString STDOUT buffer 1 00019 00020 WriteChar STDOUT n 00021 return i 00022 00023 00024 Pe tk a kk ee ee ee ee EE EE HE EN kek kk kok kk ak ak 00025 ChooseMenu 00026 Retourne le num ro du menu choisit par l utilisateur
16. i 00027 return FALSE 00028 i 00029 00030 for i 0 i lt ret i 00031 00032 if WriteChar handle n 00033 return 0 00034 00035 return TRUE 00036 00037 00038 2 ki 2 ak kk k ake ak ke ake ake ak ke eke ae ae a ke ae este ke ae ak ke ee eee eee ke ee eee eee ae ee ke ee ee eee eee ee ee eee 00039 GetChar 00040 R cupere un caract re sur la sortie sp cifi e et le renvoie 00041 4433333 ak ak ae ak ak al 34 ak ste 34 ee ke ke ke ae ake ae ae ae a eee ake ee ke ke ke ae ae ae 346 ae ee eee ak ake ake ee ak ak ak ak ak ak ak ee 00042 char GetChar int handle 00043 00044 char c 00045 00046 if read handle amp c sizeof char 00047 return 1 00048 return C 00049 00050 0005 1 2 2 ak kk k ae ak ak eke ake a ke ake ake a a ae ae ake ak ake ae ake ak ak ae ae ak ke ae ae ake ake ae ae eee ae ak ak ae ae ake ake eee ee ae ak ake eee ake ee eee ak ake ake 3e 00052 GetString 00053 Recupere une chaine de caract re de longueur maximale taille 00054 Faka ak aake ae akeke ke ae ske ake eee ee eee ke ee fe eee eee ee ke eee eee eee ee ke eee eee ake ake ake ee ke eee eee akeke ak ae 00055 char GetString int handle int taille 00056 00057 char str p 00058 00059 str char malloc taille sizeof char 00060 p str 00061 do 00062 00063 p GetChar handle 00064 p 00065 while p 1 n amp amp p 1 I 0 a
17. ka 00005 Affiche l cran le tableau de jeu 00006 ia tak ak ak ak ak ak ak ke ee ee 00007 void Display tplat tab t joueur joueurl t joueur joueur2 00008 00009 unsigned chari j K 00010 char c 00011 00012 for k 0 k lt NBZ k 00013 00014 for j 0 j lt NBY j 00015 00016 for i 0 i lt NBX i 00017 if ContenuTab tab i j k joueurl id 00018 c joueurl pion 00019 else 00020 if ContenuTab tab i j k joueur2 id 00021 c joueur2 pion 00022 else 00023 JE 00024 WriteChar STDOUT c 49 Mini projet C 2004 Morpion 3D 00025 00026 00027 00028 00029 00030 00031 WriteChar STDOUT n WriteChar STDOUT n return 00032 12 Winner c 00001 include global h 00002 00004 IsWinner 00005 Cherche si un joueur a gagn N 00006 Pour que ce joueur est gagn il faut que le dernier pion qu il est pos soit dans l alignement 00007 Renvoie cmpt qui vaut 0 si aucun alignement est trouve k 00008 REM Fonction longue car on tient compte du fait que l on peut faire varier la taille du plateau 00009 et le nombre de pions aligner ke 00010 REM Si NBPIONALIGN 3 et NBX NB Y NBZ 3 morpion classique ki 00011 il y a 3 fa ons d aligner ses pions X pion que l on vient de jouer x pion deja present 00012 Xxx ou XXx ou xxX donc 5 cases tester i varie de 2 a 2 donc 5 cas different
18. t joueur joueur2 00200 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 00215 00216 00217 00218 00219 00220 00221 00222 00223 00224 00225 00226 00227 00228 00229 00230 00231 00232 00233 00234 00235 00236 00237 00238 00239 00240 00241 00242 00243 00244 00245 00246 char nom buffer inti j k handle if handle OpenFile nom 1 return FALSE buffer GetString handle SIZEBUFFER i strlen buffer gt strlen ENTETE strlen ENTETE strlen buffer if strnemp buffer ENTETE i WriteString STDOUT Fichier incompatible 1 GetString STDIN SIZEBUFFER return FALSE On lit la matrice for k 0 k NBZ k for G 0 j lt NBY j for i 0 i lt NBX i ContenuTab tab i j k GetChar handle On lit le retour la ligne GetChar handle On lit les infos concernant le joueur1 joueurl nom char malloc SIZEBUFFER joueurl nom GetString handle SIZEBUFFER joueurl id GetChar handle GetChar handle buffer GetString handle SIZEBUFFER joueurl pion buffer buffer GetString handle SIZEBUFFER joueurl nbcoup unsigned char atoi buffer buffer GetString handle SIZEBUFFER sscanf buffer f f f amp joueurl gt couleur red amp joueurl gt couleur green amp joueurl gt couleur blue On lit le retour la ligne joueu
19. tique a eu raison de nous L important c t graphique tait la gestion de la librairie OpenGL probl me abord plus loin dans ce compte rendu Ex C Morpion si corpo sp BE 12 Mini projet C 2004 Morpion 3D 1 L OpenGL Tout d abord choisir un mode de jeu pour des raisons de commodit nous vous montrerons un jeu avec l intelligence artificielle que nous avons impl ment e Nous nous excusons pour la qualit des images mais nous avons pr f r ne pas prendre trop de place sur les feuilles pour pr senter uniquement des captures d crans Voici le d roulement du jeu C Documents and Settings Savon Mes documents defi enu principal O Deux joueurs sur le meme PC 1 Joueur contre ordinateur 2 Charger une partie enregistree 3 Quitter le jeu Quel menu voulez vous choisir Choix du jeu menu principal C Documents and Settings Savon Mes document Initialisation d un joueur om du joueur joueur21 Savon hoix de la couleur du pion Q Rouge 1 Uert 2 Bleu 3 Jaune 4 Blanc Quel menu voulez vous choisir Initialisation des donn es concernant le joueur Morpion 3D Jet D but du jeu le rose saumon est la couleur de l TA 13 Mini projet C 2004 Morpion 3D fe Morpion 3D Lo x Au cours du jeu on remarque le pion rouge du joueur et le pion bleu clair indiquant une case sur laquelle on test le pion ce pion bleu clair n est pas d
20. while fkey s amp amp key c Mini projet C 2004 Morpion 3D 00054 00055 00056 00057 00058 00059 00060 00061 00062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 00081 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 00093 00094 00095 00096 00097 00098 00099 00100 00101 00102 00103 00104 00105 00106 00107 if fkey s else char buffer 100 InitPlayer 1 amp joueurl if RunServer amp fdsocket break if INetReceive amp fdsocket buffer 100 break joueur2 nom char malloc SIZEBUFFER sscanf buffer Hello I am s c joueur2 nom amp joueur2 pion joueur2 id 2 joueur2 nbcoup 0 printf Le joueur s jouant avec le pion c s est connect n joueur2 nom joueur2 pion sprintf buffer Hello I am s c joueur1 nom joueurl pion NetSend amp fdsocket buffer strlen buffer InitMat plateau TextGame plateau zjoueurl amp joueur2 amp fdsocket free joueur2 nom StopServer amp fdsocket char ipserver char quit 0 InitPlayer 2 amp joueurl if IInitClient Sfdsocket break dol WriteString STDOUT Veuillez saisir l adresse IP du serveur 127 0 0 1 1 ipserver GetString STDIN 17 if fipserver 0 ipserver char malloc 17 sizeof char strepy ipserver 127 0 0 1 if ipserver q I Connect amp fdsock
21. 00014 unsigned char IsWinner tplat tab t joueur joueur COORD lastplay 00015 00016 char i nb nb2 00017 unsigned char cmpt 00018 00019 cmpt est utilise pour regarder le nombre de fois que l on gagne en jouant sur la case lastplay 00020 cmpt 0 00021 On doit trouver deux pions autour de celui que l on vient de poser et qui soient align s 00022 nb 0 00023 DR Testsur les x T 00024 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00025 00026 if lastplay x i lt 0 II lastplay x 1 gt NBX 00027 continue 00028 On va passer par le pion que l on vient de mettre quand i 0 00029 if ContenuTab tab lastplay x i lastplay y lastplay z joueur gt id 00030 nb 00031 else 00032 nb 0 00033 if nb gt NBPIONSALIGN 00034 00035 cmpt 00036 break 00037 00038 00039 00040 PP Test sur les y 00041 nb 0 00042 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00043 00044 if lastplay y i lt 0 II lastplay y i gt NBY 50 Mini projet C 2004 Morpion 3D 00045 continue 00046 On va passer par le pion que l on vient de mettre 00047 if ContenuTab tab lastplay x lastplay y i lastplay z joueur gt id 00048 nb 00049 else 00050 nb 0 00051 if nb gt NBPIONSALIGN 00052 00053 cmpt 00054 break 00055 00056 00057 00058 PP Test sur les z 00059 nb 0
22. 00034 Si le bouton gauche est presse on travaille sur les angles 00035 de rotation du cube en fonction du mouvement de la souris 00036 3 ak ak ak ak ak ak ak ak ke ak ak ee ke ke ke ke ae ake ae ae ae ae eee ee ee ke ke ae ae ae ae ae ae a ee eee ee ake ak ak ak ak ak ak ak ak eee 00037 void MouseMotion 1 int x int y 00038 00039 if presse si le bouton gauche est presse 00040 00041 on modifie les angles de rotation de l objet 00042 en fonction de la position actuelle de la souris et de la derniere position sauvegardee 00043 anglex x xold 00044 angley y yold 00045 glutSetWindow subWindow1 00046 glutPostRedisplay on demande un rafraichissement de l affichage 00047 00048 xold x sauvegarde des valeurs courante de le position de la souris 00049 yold y 00050 return 00051 00052 00053 l ak ak ke ak ak ak ak ee ee ee ak ak ak ak ak ak ke ak ak a ak ak ap k 00054 Mouse2 e 00055 R cupere la case sur laquelle on vient de cliquer ke 73 Mini projet C 2004 Morpion 3D 00056 et met un pion dessus en fonction du clic effectue 00058 void Mouse2 int button int state int x int y 00059 00060 00061 00062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 00081 00082 00083 00084 00085 00086 XCASE2 k XTAB 00087 00088 00089 00090 00091 00092 0
23. 00170 00171 char titre 00172 char tabmenu LENMENUMAX 00173 int lenmenu 00174 t menu 00175 00176 kk kk ak kok ok ak ok ok ak k ok ak ak ak ke ake ke ak k 00177 CONSTANTES 00178 rie 00179 Les diff rents menus 00180 ifdef WITHOPENGL 00181 ifndef WITHNETWORK 00182 static const t menu MAINMENU TITREMENUMAIN MENUO MENUI MENU3 MENU 4 00183 endif 00184 endif 00185 00186 ifdef WITHOPENGL 00187 ifdef WITHNETWORK 00188 static const t menu MAINMENU TITREMENUMAIN MENUO MENUI MENU2 MENU3 MENU 5 00189 endif 00190 else 00191 ifdef WITHNETWORK 00192 static const t menu MAINMENU TITREMENUMAIN MENUO MENUI MENU2 MENU 4 00193 else 00194 static const t_ menu MAINMENU TITREMENUMAIN MENU MENU MENUA 3 00195 endif 00196 endif 00197 00198 static const t menu IAMENU TITREMENUIA MENUIAO MENUIAI MENUIA2 MENUIA3 4 00199 ifdef WITHNETWORK 00200 static const t menu NETWORKMENU TITREMENURESEAU MENURESEAUO MENURESEAUI MENURESEAU2 3 00201 endif ne SIE AOT menu COULEUR MENU TITREMENUCOULEUR COULEURO COULEUR COULEUR2 COULEUR3 gt gt 00203 Differents coordonnes remarquable 00204 static const COORD MIDDLE NBX 2 NBY 2 NBZ 2 00205 static const COORD NOPOS NBX 1 NBY 1 NBZ 1 00206 Couleurs de base gt Ces couleurs sont exprimees en RGB rapporte l inertvalle 0 0 1 0
24. al atoires Fonctions g rant le dessin et le redimensionement Fonction de dessin de la fen tre contenant le cube en 3D Fonction de dessin de la fen tre contenant les 3 plans Fonctions permettant l insertion de texte dans la fen tre Traitement des v nements provenant du clavier Traitement des v nements provenant de la souris Initialisation du syst me OpenGL et des routines de traitement d v nement En t te propre aux fichiers li s al OpenGL Initialisation connexion et fermeture d un client TCP IP Envoi et r ception de message par le r seau Initialisation mise en attente et fermeture du serveur TCP IP En t te propre aux fichiers li s au r seau Manuel d utilisation Se reporter au fichier Manuel txt dans le r pertoire du jeu Mini projet C 2004 Morpion 3D IV D finition des structures utilis es Les joueurs Nous devons pouvoir stocker des informations relatives aux joueurs telles que son nom et sa couleur mais aussi le nombre de coup qu il a d j jou et un identifiant pour pouvoir le rep rer sur le tableau de jeu Nous avons donc pour cela cr la structure t joueur dont voici le prototype typedef struct t joueur char nom Nom du joueur char nb Identifiant du joueur t color couleur Couleur du pion du joueur unsgned char nbcoup Nombre de coup jou par le joueur t joueur Les couleurs Dans cette structure on voit apparaitre une nouvelle structure la str
25. client Client gt Serveur x 1 y 1 z 0 Serveur gt Client Ok at x 1 y 1 z 0 Le serveur aligne 3 pions Le client aligne 3 pions Serveur gt Client EOG I won Client gt Serveur EOG You won Le client interrompt la partie en fermant son socket Le serveur d tecte une erreur recv retourne un buffer de taille nulle et ferme son tour son socket 25 Mini projet C 2004 Morpion 3D XII Bugs et observations Les situations suivantes pourraient encore mener des comportements instables d connexion du r seau de l une des deux machines en cours de partie nous l avons rapidement test et normalement la partie se ferme d elle m me Si l on ouvre nouveau une partie alors que le programme vient de s arr ter cause d une erreur r seau ou bien d un appui sur Ctrl le socket du serveur ne peut pas tre attach imm diatement nous avons mis en place une petite boucle d attente pour contourner cet ventuel probl me li la r allocation d un socket par le syst me d exploitation choix de couleurs identiques nous ne retirons pas de la liste du choix de couleur la couleur utilis e par le premier joueur si les deux joueurs choisissent la m me couleur en mode r seau particuli rement le jeu est injouable En mode joueur contre ordinateur avec tirage au sort du joueur commen ant placer ses pions il semblerait que dans la version OpenGL l ord
26. dans un premier temps tous les fichiers portant l extension sav et demande l utilisateur de choisir le fichier qu il souhaite charger Cette phase de chargement s effectue en 4 parties 1 V rification de la validit du fichier lecture et comparaison de l en tete 2 Initialisation du tableau partir des donn es contenues dans le fichier 3 Initialisation du joueurl c est le joueur qui jouera en premier 4 Tnitialisation du joueur2 16 Mini projet C 2004 Morpion 3D Exemple d un fichier de sauvegarde FICHIER DE SAUVEGARDE DU MORPION 3D joueurl y 2 0 900000 1 000000 0 000000 joueur2 b 2 0 000000 0 000000 1 000000 X OpenGL Pour apprendre utiliser la librairie OpenGL nous avons utilis le tutorial suivant http www lighthouse3d com opengl glut Pr sentation d OpenGL OpenGL propose un ensemble de fonctions pour la synth se d images 3D plus accessoirement 2D Diff rents modes de rendu sont possibles fil de fer faces pleines avec ou sans mod le d clairage textures etc De nombreuses implantations de l api exploitent les capacit s mat rielles de la plate forme logiciels pilotes des cartes graphiques L architecture d OpenGL est du type machines abstraites ave
27. int anglex 6 angley 10 xold yold x y 00007 static char presse 0 00008 Pour selectionner une case dans le tableau de fa on temporaire 00009 static int a b c Les coord de la case selectionnee 00010 extern char ISSELECT WINNER 00011 extern t joueur joueurl joueur2 00012 extern tplat plateau 00013 2 2 2 ak kk k ake ak ke eke ae ak ae ake ake ae ak ek ae este ke eee ake ae ake ak ke eee ke ee ke ee eee eee ke eee fe eee eee ke ee ee eee ke eee ke ee ee eee ake eee eee eee 00014 Mousel ki 00015 Le bouton gauche de la souris est il appuy et sommes nous dans la sous fenetre 1 H 00016 kk kak ak ak ak ak ak k a ak ak 34 ee ke ke ke ke ee ae a ae a eee eee ee ke ke ke ke a ake ee ee eee ee ee ake ae ae ae ae a ae ae eee ee ee ee ke ke afe a ae aa a a eee ee 00017 void Mousel int button int state int x int y 00018 00019 si on appuie sur le bouton gauche 00020 if button GLUT_LEFT_BUTTON amp amp state GLUT DOWN 00021 00022 presse 1 le booleen presse passe a 1 vrai 00023 xold x on sauvegarde la position de la souris 00024 yold y 00025 00026 si on relache le bouton gauche 00027 if button GLUT_LEFT_BUTTON amp amp state GLUT_UP 00028 presse 0 le booleen presse passe a 0 faux 00029 return 00030 00031 00032 tak ak ak ak ak ak ak kk eee ee ee ak ke ak ak ak D D kk ak ak ake kk ak ke ak ak a 00033 MouseMotion1 S
28. la lettre S 2 00060 endif 00061 Display plateau joueurl joueur2 00062 ifdef WITHNETWORK 00063 if socket NO SOCKET amp amp joueur joueur2 00064 00065 Au tour du joueur distant 00066 COORD coords 00067 char netbuf 100 00068 00069 do 00070 NetSend socket Your turn 10 00071 if NetReceive socket netbuf 100 return 00072 sscanf netbuf x d y d z d 00073 amp coords x amp coords y amp coords z 00074 while SetCoord plateau coords joueur TRUE 00075 sprintf netbuf OK at x d y d z d coords x coords y coords z 00076 NetSend socket netbuf strlen netbuf 00077 joueur2 gt nbcoup 00078 printf s a jou en d d d n 00079 joueur2 nom coords X coords y coords z 00080 EOG IsWinner plateau joueur coords 42 Mini projet C 2004 Morpion 3D 00081 1f EOG 00082 00083 sleep 1 00084 NetSend socket EOG You won 12 00085 joueur joueur2 00086 break 00087 00088 00089 continue 00090 00091 endif 00092 do 00093 00094 WriteString STDOUT joueur gt nom 1 00095 00096 ifjoueur id IANUMBER 00097 place ReadCoord 00098 else 00099 place FindCoordIA plateau joueur joueur joueurl joueur joueurl 00100 while SetCoord plateau place joueur TRUE 00101 ifdef WITHNETWORK 00102 if socket l NO SOCKET amp amp joueur joueurl 00103 00104 char netbuf 201 00105 s
29. projet C 2004 Morpion 3D 00025 if WINNER 00026 00027 int font 00028 char buffer SIZEBUFFER 00029 00030 font int GLUT BITMAP HELVETICA 18 00031 glPopMatrix 00032 glColor3f TEXTE red TEXTE green TEXTE blue 00033 setOrthographicProjection 00034 glPushMatrix 00035 glLoadldentity 00036 sprintf buffer s a gagne en i coups joueur gt nom joueur nbcoup 00037 RenderBitmapString POSTEXTEXWIN POSTEXTEY WIN void font buffer 00038 glPopMatrix 00039 resetPerspectiveProjection 00040 00041 glLoadidentity 00042 glEnable GL DEPTH TEST 00043 glRotatef angley 1 0 0 0 0 0 00044 glRotatef anglex 0 0 1 0 0 0 00045 Pour le alpha blending il faut faire attention l ordre dans lequel on dessine le cube 00046 for k 0 k lt NBZ k 00047 00048 for j 0 j lt NBY j 00049 00050 for i 0 i lt NBX i 00051 00052 if ContenuTab char plateau i j k PASDEPION 00053 DrawCube i j k GL_LINE_LOOP FALSE 00054 else 00055 00056 DrawCube i j k GL_QUADS FALSE 00057 DrawCube i j k GL_LINE_LOOP TRUE 00058 00059 00060 00061 00062 glPopMatrix 00063 glFlush 00064 On echange les buffers 00065 glutSwapBuffers 00066 return 00067 00068 00069 22H ee ak kk ak ak kak kak kk ak ak ak kaa e 00070 DrawCube ka 00071 Dessine les 6 faces du cube 00
30. s et enfin de d tecter l alignement par l un des joueurs de trois pions entrainant la fin de partie La troisi me dimension sera repr sent e en affichant successivement les trois plans Cahier n 2 On devra pouvoir sauvegarder puis poursuivre une partie Cahier n 3 Les joueurs doivent maintenant pouvoir jouer chacun sur son cran il y aura donc maintenant deux instances du jeu lanc es qui devront pouvoir se transmettre des donn es et permettre de jouer tour tour Cahier n 4 Un nouveau mode de jeu devra permettre de pouvoir jouer seul contre l ordinateur une sorte d intelligence artificielle lui permettra de d terminer o placer ses pions Mini projet C 2004 Morpion 3D 2 Bilan des objectifs et des r sultats obtenus Fonctionnalit s souhait es R sultats obtenus Cahier des charges n 1 initial gestion de la partie v rification des erreurs d tection de la fin de partie Fonctionnel La gestion de la partie fonctionne correctement les joueurs placent tour tour leur pions le joueur commen ant la partie est tir au hasard La v rification des erreurs s effectue de mani re tr s simple en v rifiant syst matiquement le contenu de la case dans laquelle le joueur courant souhaite placer son pion La d tection de la fin de partie s effectue en plusieurs tapes nous avons choisit dans un premier temps de ne v rifier que les alignements possibles partir du dernier pion plac
31. tolower c 00030 while c o amp amp c le nT 00031 if c o 56 Mini projet C 2004 Morpion 3D 00032 ifdef LINUX 00033 handle open nom O_TRUNC O_RDWR 00034 Un seul mode d acc s sous Linux 00035 else 00036 handle open nom _O_TRUNC _O RDWRI O TEXT 00037 endif 00038 00039 00040 return handle 00041 00042 00043 Fk 2 ak kk k ake ak ke ake ae E eee eee ke eee ke ee ee eee eee ke ee ee eee eee ke ee ee eee ke eee ke ee eee eee ae ee ke eee fe eee ake eee eee eee 00044 OpenFile ki 00045 Ouvre un fichier sans en effacer le contenu utile pour lire ce que conttient le fichier 00046 La donnee nom contiendra la fin de la fonction le nom du fichier ouvert 00048 int OpenFile char nom 00049 00050 char nbtentative 0 00051 int handle 00052 00053 do 00054 00055 if PrintFile 00056 return 1 00057 WriteString STDOUT Quel fichier voulez vous ouvrir 1 00058 nom GetString STDIN SIZEBUFFER 00059 nom CompleteExtension nom EXTENSIONSAUVEGARDE 00060 00061 ifdef LINUX 00062 handle open nom O RDWR 00063 else 00064 handle open nom O RDWRI O TEXT 00065 endif 00066 nbtentative 00067 while handle 1 amp amp nbtentative gt 4 00068 if handle 1 00069 00070 WriteString STDOUT Erreur d ouverture du fichier 1 00071 GetString STDIN SIZEBUFFER 00072 00073 return handle
32. 0 00068 return 00069 00070 00071 Je ee eee eee kak ak ak ak a 00072 InitlA ke 00073 Initialisation de l IA 00074 re ee ee IR 00075 void InitIA t joueur joueur 00076 00077 joueur gt nbcoup 0 00078 joueur gt nom strdup NAMEIA 00079 joueur gt pion T 00080 joueur gt couleur IACOLOR 00081 joueur id IANUMBER 00082 return 00083 7 Jeu c 00001 include global h 00002 00003 t joueur joueur 00004 extern char WINNER 00005 00006 a a ak ak ak ak eee ee eee oo 00007 InitGlGame k 00008 Initialise le jeu et la fenetre OpenGL 00009 l a kk ak ak kk ak a ea ee ak ak ak kak a kk ak kk ak ak a ke ak ak ak ake ak ak ke ae 00010 ifdef WITHOPENGL 00011 void InitGlGame tplat plateau t joueur joueur1 t joueur joueur2 int socket int argc char argv 00012 00013 joueur joueurl 00014 00015 InitLibGlut argc argv 00016 InitWindow 00017 glutShowWindow 00018 glutMainLoop 00019 00020 endif 00021 ak ak ak ak ak eee ee eee D D D ke ak ak a 00022 Game ki 00023 Fonction de jeu place un pion et v rifie si on a un vainqueur 00024 Pour placer son pion 2 possibilit s k 00025 la souris fonction Mouse2 00026 le changement d image si c est l TA de jouer M 41 Mini projet C 2004 Morpion 3D 00027 k ak ak ale ake ok ak SI ANA ak ak ak ake ake DESSIN k ake ak ak ak ak ak kkk INR ak ake ak ke 00028 void Game tplat pl
33. 0 h1 2 On se met en projection 3D 00015 glScalef 1 1 1 Inversion de l axe des Y 00016 glTranslatef 0 h1 2 0 Origine en haut gauche 00017 glMatrixMode GL MODELVIEW 00018 00019 00020 Ft ak a ak ak ak ak ak ee eee ee D k 00021 resetPerspectiveProjection 00022 Restaure la matrice pr cedente Mini projet C 2004 Morpion 3D 00023 FARAH ek ek k SRI AAA ake ak ak ak ake OH aje ae ae HE KE ake ak ak ak ak ak ake ake k HE HE ae afe ak HER ake ake ak RON kkk k 00024 void resetPerspectiveProjection void 00025 00026 glMatrixMode GL PROJECTION 00027 glPopMatrix 00028 glMatrixMode GL MODELVIEW 00029 00030 IOS RA kk kk ke ee ee ke 3e ake oke a ae a ee ee ee ee eee ae ae ae a e ee ee ee ee ke ke ae ae ae ae eee eee ee ee ak ak ak ak ok a 00032 RenderBitmapString ki 00033 Affiche l cran la chaine de caract re pass e en param tre 00034 kk ak ak ak ak ak ak ake hhh ae ae ae 24 eee eee ee ke ae ae ae ae ae 34 eee eee ke ee ke ak ak ae ak a eee eee eee 00035 void RenderBitmapString float x float y void font char string 00036 00037 char c 00038 00039 Se positionne a l emplacement specifie pour ecrire le texte 00040 glRasterPos2f x y 00041 Ecrit les caract res un par un 00042 for c string c 0 c 00043 glutBitmapCharacter font c 00044 return 00045 22 client c 00001 include network
34. 00004 char plat NBX NBY NBZI 00005 tplat plateau tplatplat 00006 char ISSELECT WINNER 00007 char QUIT 00008 00009 int main int argc char argv 00010 00011 QUIT FALSE 00012 joueurl nom NULL 00013 joueur2 nom NULL 00014 atexit restart 00015 00016 Verify V rifie quelques param tres de compilation 00017 do 00018 00019 Quel type de jeu veut on effectuer 00020 ISSELECT FALSE 00021 WINNER FALSE 00022 switch ChooseMenu DisplayMenu MAINMENU TRUE 00023 00024 case DEUXJOUEURSUNPC 00025 InitMat plateau 00026 InitPlayer 1 amp joueurl 00027 InitPlayer 2 amp joueur2 00028 ifdef WITHOPENGL 00029 InitGIlGame plateau amp joueurl amp joueur2 NO SOCKET amp argc argv 00030 else 00031 TextGame plateau gejoueurl amp joueur2 NO SOCKET 00032 endif 00033 break 00034 case UNJOUEUR 00035 InitMat plateau 00036 if NBX 3 II NBY 3 II NBZ 3 00037 00038 WriteString STDOUT UNIMPLEMENTED 1 00039 GetString STDIN SIZEBUFFER 00040 00041 else 00042 MenulA plateau amp joueurl amp joueur2 amp argc argv 00043 break 00044 ifdef WITHNETWORK 00045 case DEUXJOUEURSRESEAU 00046 00047 int fdsocket 00048 char key 00049 WriteString STDOUT Version r seau 1 00050 puts ts pour jouer en serveur n tc pour jouer en client 00051 do 00052 key GetString STDIN 2 00053
35. 00021 endif 00022 break 00023 case IAFIRST 00024 InitPlayer 2 joueurB 00025 InitlA joueurA 00026 ifdef WITHOPENGL 00027 InitGIGame plateau joueurA joueurB NO SOCKET argc argv 00028 else 00029 TextGame plateau joueurA joueurB NO_SOCKET 00030 endif 00031 break 00032 case EGAL 00033 j Randomize O 1 00034 j InitPlayer 1 joueurA InitIA joueurA 00035 j InitlA joueurB InitPlayer 2 joueurB 00036 ifdef WITHOPENGL 00037 InitGIGame plateau joueurA joueurB NO SOCKET argc argv 00038 else 00039 TextGame plateau joueurA joueurB NO SOCKET 00040 endif 00041 break 00042 case RETOUR 00043 break 00044 default 00045 break 00046 00047 return 00048 00049 00050 8E kk k ae ake ak ake ake ae ke ake ae a ak 3e ete ke eee ee eee eee ke ee ee eee ke eee ke ee ee eee ake ae ee ke ee ee eee ke eee eee eee 00051 FindCoordIA 00052 coeur de l IA cette fonction d termine les priorit s de jeu de l IA 00053 EE 61 Mini projet C 2004 Morpion 3D 00054 COORD FindCoordIA tplat tab t joueur IA t_joueur adverse 00055 00056 COORD place 00057 int winner 00058 00059 Si la case du milieu est vide au ler tour de l TA cette case est prise 00060 if ISNoPion tab MIDDLE 00061 return MIDDLE 00062 Si I TA a commence et que c est son deuxieme tour 00063 if A gt nbcoup 1 amp amp adverse gt nbcoup 1 00064
36. 00028 unsigned char ChooseMenu int lenmenu 00029 00030 unsigned char c 00031 00032 do 00033 00034 WriteString STDOUT Quel menu voulez vous choisir t 0 00035 c unsigned char GetChar STDIN 0 00036 Pour supprimer le retour la ligne 00037 GetString STDIN SIZEBUFFER 00038 if c lt lenmenu 00039 break 00040 WriteString STDOUT Menu choisi invalide 1 00041 while c gt lenmenu 00042 return C 00043 10 Random c 48 Mini projet C 2004 Morpion 3D 00001 include global h 00002 00003 Jdid a a a sk ak a ak a a ak ak akak ak kk R akak k k kkk k k kk kk 00004 InitRandom xe 00005 Initialisation de la fonction rand 00006 T ak ake ake ake k HER AA a ake e ake SRE kak ak A A a ak ae ae ke aki HR aa ak 00007 void InitRandom void 00008 1 00009 time t date 00010 00011 time amp date 00012 srand date 00013 00014 00015 MP tk ee ee ee ee EE EE EE 00016 Randomize ka 00017 Tire un nombre aleatoire entre inf et sup a 00018 ake ake ae ak K ae ak ake ae ae ae ee eee ke ee ee ee ee eee ke eee eee eee eee ik 00019 int Randomize int inf int sup 00020 00021 int x 00022 00023 InitRandom 00024 if inf lt sup 00025 return inf 00026 x rand sup inf 1 inf 00027 return x 00028 11 Screen c 00001 include global h 00002 00003 P tk ak ak kk kak kak kk ee ee EE ak ak ka ak aa ak be 00004 Display
37. 00060 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00061 00062 if lastplay z i lt O Il lastplay z i gt NBZ 00063 continue 00064 On va passer par le pion que l on vient de mettre 00065 if ContenuTab tab lastplay x lastplay y lastplay z i joueur gt id 00066 nb 00067 else 00068 nb 0 00069 if nb gt NBPIONSALIGN 00070 00071 cmpt 00072 break 00073 00074 00075 00076 Test sur les diagonales 2 diagonales par plan au plus et il y a 3 plans xy xz et yz 00077 Plan xy 00078 nb 0 00079 nb2 0 00080 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00081 00082 if lastplay x i lt O Il lastplay x i gt NBX 00083 continue 00084 if astplay y i gt 0 amp amp lastplay y i lt NBY 00085 00086 if ContenuTab tab lastplay x i lastplay y i lastplay z joueur gt id 00087 nb 00088 else 00089 nb 0 00090 00091 if astplay y 1 gt 0 amp amp lastplay y i lt NBY 00092 00093 if ContenuTab tab lastplay x i lastplay y i lastplay z joueur gt id 00094 nb2 00095 else 00096 nb2 0 00097 00098 if nb gt NBPIONSALIGN 51 Mini projet C 2004 Morpion 3D 00099 00100 cmpt 00101 break 00102 00103 if nb2 gt NBPIONSALIGN 00104 00105 cmpt 00106 break 00107 00108 00109 00110 IF Plan xz 00111 nb
38. 00114 00115 Pak at ak ak ak ak ak ak ak ak eee ee D ak ak kak ak kak kak ak ke ak ak ak ak ak ak ke kk ak ak kk ak a 00116 WriteDataPlayer 00117 Ecrit les donnees d un joueur sur la sortie representee par handle 00119 int WriteDataPlayer int handle t_joueur joueur 00120 00121 00122 00123 00124 00125 00126 00127 00128 00129 00130 00131 00132 00133 00134 00135 00136 00137 00138 00139 char buffer SIZEBUFFER if WriteChar handle n return FALSE sprintf buffer Jos joueur gt nom if WriteString handle buffer 1 return FALSE if IWriteChar handle joueur gt id return FALSE WriteChar handle n sprintf buffer 9oc joueur pion if WriteString handle buffer 1 return FALSE sprintf buffer 9oi joueur gt nbcoup if IWriteString handle buffer 1 return FALSE sprintf buffer f f f joueur gt couleur red joueur couleur green joueur gt couleur blue if WriteString handle buffer 0 return FALSE 58 Mini projet C 2004 Morpion 3D 00140 00141 return TRUE 00142 00143 OO LA A PEER ANA AS AS DID RE EDS AR SDS He I R aak RE EDS HS A SP HE ED RSS RE SE HE SDS PSS RE R kk k kk SR EEE 00145 SaveGame 00146 Sauvegarde une partie en ecrivant dans un fichier le plateau du jeu 00147 Er les caracteristiques des 2 joueurs joueur qui jouait en premier 00149 int SaveGame char tab t joueur joueurl t joueur joueur2 001
39. 0038 define ECARTTAB w1 40 00039 define RATIO 0 8 00040 define XCASE2 WIDTHSUB2 3 ECARTTAB 9 00041 define YCASE2 HEIGHTSUB2 2 0 2 0 ECARTTAB HEIGHTPOLICE 3 0 00042 define XTAB XCASE2 NBX 00043 define YTAB YCASE2 NBY 00044 define ZCASE LI 00045 define POSTEXTEX2 k 1 ECARTTAB k XTAB XTAB 2 0 glutBitmapLength void font unsigned char buffer 2 00046 define POSTEXTEY2 YTAB ECARTTAB HEIGHTPOLICE 00047 Informations relatives la sous fenetre 1 00048 define ECARTBORD 0 4 00049 define R ATIO 0 6 00050 define ALPHAVALUE 0 5 00051 define POSTEXTEXWIN WIDTHSUBI 2 ECARTBORD glutBitmapLength void font unsigned char buffer 00052 define POSTEXTEY WIN HEIGHTSUBI 2 HEIGHTPOLICE 00053 FIXME 2 00054 00056 DEFINITIONS 00058 displayglobal opengl c 00059 void ChangeSize int w int h 00060 void ChangeSize2 int w int h 00061 void RenderSceneAll void 00062 void RenderScene void 00063 displayS1_opengl c 00064 void RenderScenesw1 void 00065 void DrawCube int i int j int k GLenum state char ARRETE 00066 displayS2 opengl c 00067 void RenderScenesw2 void 00068 font opengl c 32 Mini projet C 2004 Morpion 3D 00069 void setOrthographicProjection void 00070 void resetPerspectiveProjection void 00071 void RenderBitmapString float x float y void font char string 00072 ke
40. 0093 00094 00095 00096 00097 00098 00099 00100 00101 00102 00103 00104 00105 00106 00107 00108 unsigned chari j k d e f unsigned char DONE FALSE COORD select if y gt ECARTTAB amp amp x gt ECARTTAB amp amp WINNER On joue sur la case selectionnee if button GLUT LEFT BUTTON amp amp state GLUT DOWN if ISSELECT ISSELECT FALSE ContenuTab plateau a b c PASDEPION On recherche les coordonnees suivant y ce sont les plus simples for U 0 j lt NBY j if y lt ECARTTAB j RATIO YCASE2 e j break for k 0 k lt NBZ k if DONE TRUE break for i 0 i lt NBX i if x gt k 1 ECARTTAB i XCASE2 k XTAB amp amp x lt k 1 ECARTTAB i RATIO d i f k DONE TRUE break if DONE amp amp ContenuTab plateau d e f PASDEPION ContenuTab plateau d e f CASESELECT select x d select y e select z f Game plateau select amp joueurl amp joueur2 Pour visualiser une case sans pour autant jouer dessus if button GLUT RIGHT BUTTON amp amp state GLUT DOWN if ISSELECT ISSELECT FALSE ContenuTab plateau a b c PASDEPION 74 Mini projet C 2004 Morpion 3D 00109 00110 On recherche les coordonnees suivant y ce sont les plus simples 00111 for U 0 j lt NBY j 00112 if y lt ECARTTAB j
41. 06 Ces coordonn es ne peuvent etre gt NB ou lt 0 ki 00007 Cette fonction servira pour du debuggage 00008 Pas en mode graphique avec OpenGL 00009 kk ak ak ak ak ak ak ake ak ak a eee eee ke ee ae ae ae ee 24 eee eee ee ke ke ee ak ak ok ak ak ak ak ee eee 00010 COORD ReadCoord void 00011 00012 COORD place 00013 on initialise une valeur enti re non sign e impossible dans le jeu 00014 place x NBX 1 00015 place y NBY 1 00016 place z NBZ 1 00017 WriteString STDOUT Saisissez les coordonnees de l endroit ou vous voulez jouer n 1 00018 while place x gt NBX 00019 00020 WriteString STDOUT X 0 00021 place x GetChar STDIN 00022 place x 0 00023 IY Pour supprimer le retour a la ligne 00024 GetString STDIN SIZEBUFFER 00025 00026 while place y gt NBY 00027 00028 WriteString STDOUT Y 0 00029 place y GetChar STDIN 00030 place y 0 00031 Pour supprimer le retour a la ligne 00032 GetString STDIN SIZEBUFFER 00033 00034 while place z gt NBZ 00035 00036 WriteString STDOUT Z 0 00037 place z GetChar STDIN 00038 place z 0 00039 IY Pour supprimer le retour a la ligne 00040 GetString STDIN SIZEBUFFER 00041 00042 return place 00043 00044 00045 ki 2 k ki ake aki e e ci ae J e ak ke Y ak ak h ESS AE ak A Ae ak ake AE ak ake ke DES AE ake a a aki RER kak 00046
42. 072 XKR ee a kk ak 00073 void DrawCube int i int j int k GLenum state char ARRETE 00074 00075 float xcase ycase zcase 00076 00077 xcase 2 0 2 0 ECARTBORD NBX 00078 ycase 2 0 2 0 ECARTBORD NBY 66 Mini projet C 2004 Morpion 3D 00079 zcase 2 0 2 0 ECARTBORD NBZ 00080 face 1 du cube 00081 glBegin state 00082 ifdef WITHALPHA 00083 1f ARRETE 00084 glColor4f 0 0f 0 0f 0 0f ALPHAVALUE 00085 else if ContenuTab plateau i j k joueurl id 00086 glColor4f joueurl couleur red joueurl couleur green joueurl couleur blue ALPHAVALUE 00087 else if ContenuTab plateau i j k joueur2 id 00088 glColor4f joueur2 couleur red joueur2 couleur green joueur2 couleur blue ALPHAVALUE 00089 else if ContenuTab plateau i j k CASESELECT 00090 glColor4f SELECT red SELECT green SELECT blue ALPHAVALUE 00091 else 00092 glColor4f NOPION red NOPION green NOPION blue ALPHAVALUE 00093 else 00094 if ARRETE 00095 glColor3f 0 0f 0 0f 0 0f 00096 else if ContenuTab plateau i j k joueurl id 00097 glColor3f joueurl couleur red joueurl couleur green joueurl couleur blue 00098 else if ContenuTab plateau i j k joueur2 id 00099 glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue 00100 else if ContenuTab plateau i j k CASESELECT 00101 glColor3f SELECT red SELECT green SE
43. 1 define COULEUR2 Bleu 00122 define JAUNE 3 00123 define COULEUR3 Jaune 00124 define BLANC 4 00125 define COULEUR4 Blanc 00126 D finition de constantes diverses 00127 define SIZEBUFFER 256 00128 define ENTETE FICHIER DE SAUVEGARDE DU MORPION 3D 00129 define UNIMPLEMENTED Non implemente pour l instant 00130 define NAMEIA Artificial intelligence 00131 define IANUMBER 3 00132 define EXTENSIONSAUVEGARDE sav 00133 00134 Alias pour simplifier la compr hension 00135 define NO SOCKET NULL 00136 00137 Jr ak ak ke ak ak ak kek ak ak ae 00138 TYPES 00139 k kakakakakak kak ak kok ak okokok ok ok ok ok ak ak ake ak 00140 D finition des types propres au programme 00141 typedef char tplat 00142 00143 eke kok ak ke eee eee 00144 STRUCTURES 00145 777333 kak AAA AAA 00146 Structure d finissant les coordonn es d une case du jeu 00147 typedef struct COORD 00148 00149 unsigned char x y Z 00150 COORD 00151 00152 D finition des couleurs 00153 typedef struct t_color 00154 00155 float red green blue 00156 t_color 00157 00158 Structure d finissant un joueur 00159 typedef struct t_ joueur 00160 00161 char nom 00162 int id 00163 char pion 00164 t_color couleur 00165 unsigned char nbcoup 00166 t joueur 00167 00168 Structure des menus 00169 typedef struct t menu 29 Mini projet C 2004 Morpion 3D
44. 2 00183 while QUIT FALSE 00184 exit 0 00185 00186 00187 void restart 00188 00189 if IQUIT 00190 main 0 NULL 00191 Relance le menu principal lorsque la fermeture de la fen tre opengl a compl tement ferm le programme 00192 5 Misc c 00001 include global h 00002 00003 JF HEAR ake c ke HS aj a ak a ele ak AR ak ak ak OS e a ak HE SDS kkk a EE e ok ak HE SDS ak a a EEE 00004 WriteChar 00005 Ecrit un caract re donn sur la sortie sp cifi 00006 4 ak ak ak ak ak ak ak ak ak al 34e 34 afe 346 ee ke ee ke ae ae ee eee eee ke ak a ak ak ak ak ak ok ak ee 00007 int WriteChar int handle char car 00008 1 00009 if write handle amp car sizeof char 00010 return 0 00011 return 1 00012 00013 OOOLA tak ak ake ak ak ak ae eo eee ee ee D D kk ak ak ake ak ak ak ke ak ak a 00015 WriteString x 00016 Ecrit une chaine de caract re donn sur la sortie sp cifi e 00017 Mert ret n derriere la chaine 00018 S arrete au premier m rencontr dans la chaine k 00019 kk ak ak ak ak ak ak ake ak ak a ak 34 2 ee ke ke ke ke ae ae ae ae ae ae eee ee ee ke ke ae ae ae ae ae ae eee ee ee ak ake ak ak ak ak ak ae aak eee 00020 int WriteString int handle char buf int ret 37 Mini projet C 2004 Morpion 3D 00021 00022 inti 0 00023 00024 while buf i l n amp amp buf i NO 00025 00026 if WriteChar handle buf
45. 35 endif 00036 rer ee kak ee kak ak ea 00037 MACROS 00038 333 ak ak ak ak akk akak ak ak akk kkk kk 00039 define ContenuTab tab x y z tab z NBX NBY y NBX x 00040 ifdef LINUX 00041 define EraseScreen system clear 00042 else 00043 define EraseScreen system cls 00044 endif 00045 00046 Je eee ak ake ak ak ae 00047 DEFINITIONS 00048 kk akakakak kak ak ee ok ok ak oke ok ako ak 00049 D finition des dimensions du plateau 27 Mini projet C 2004 Morpion 3D 00050 define NBX 00051 define NBY 00052 define NBZ 3 3 3 00053 Caract res utilis s pour l affichage des pions 00054 define PASDEPION 00055 define CASESELECT 0 6 00056 D finition des handles correspondants aux T O traditionnels 00057 define STDIN 00058 define STDOUT 00059 define STDERROR 0 1 2 00060 Nombre de pions aligner pou gagner 00061 define NBPIONSALIGN 00062 Booleen 00063 define TRUE 00064 define FALSE 00065 D finition des menus 00066 ifdef WITHOPENGL 00067 ifndef WITHNETWORK 00068 define MENUOFFSET 1 00069 endif 00070 endif 00071 00072 ifdef WITHOPENGL 00073 ifdef WITHNETWORK 00074 define MENUOFFSET 2 00075 endif 00076 else 00077 ifdef WITHNETWORK 00078 define MENUOFFSET 1 00079 else 00080 define MENUOFFSET 0 00081 endif 00082 endif 00083 00084 define LENMENUMAX 00085 define
46. 4 possibilites 00167 d alignement si la case MIDDLE est prise 00168 COORD tab4 4 00169 00170 00171 K 00172 Ce tableau de coordonees contient les cases qui ont 3 possibilites 00173 d alignement si la case MIDDLE est prise 00174 COORD tab3 14 00175 00176 1 NBZ 1 00177 00178 00179 00180 00181 00182 00183 00184 00185 00186 00187 00188 00189 00190 00191 00192 00193 00194 00195 00196 00197 00198 00199 00200 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 0 0 0 0 0 NBZ 1 0 NBY 1 0 0 NBY 1 NBZ 1 NBX 1 0 0 NBX 1 NBY 1 0 NBX 1 0 NBZ 1 NBX 1 NBY 1 NBZ 1 0 NBY 1 2 NBZ 1 2 NBX 1 NBY 1 22 NBZ 1 2 NBX 1 2 0 NBZ 1 2 NBX 1 2 NBY 1 NBZ 1 2 0 NBY 1 2 0 NBX 1 NBY 1 2 0 NBX 1 2 0 0 NBX 1 2 NBY 1 0 0 NBY 1 2 NBZ 1 NBX 1 NBY 1 2 NBZ 1 NBX 1 2 0 NBZ 1 NBX 1 2 NBY 10 0 NBZ 1 2 0 NBY 1 NBZ 1 2 NBX 1 0 NBY 1 2 NBX 1 NBY 1 NBZ 1 2 NBX 1 2 NBY 1 2 0 NBX 1 2 NBY 1 2 NBZ 1 place COORD malloc 8 sizeof char j 0 for i 0 i lt 8 i if ISNoPion tab tab6 i placelj tab6 i j if return place Randomize 0 j 1 place COORD realloc place 4 sizeof char j 0 for i 0 i lt 4
47. 50 00151 char nom 00152 int handle i j k 00153 00154 EraseScreen 00155 if handle CreateFile nom 1 00156 return FALSE 00157 WriteString STDOUT Sauvegarde 1 00158 Pour verifier qu il s agisse d un fichier valide 00159 if WriteString handle ENTETE 1 00160 00161 close handle 00162 unlink nom 00163 retum FALSE 00164 00165 for k 0 k lt NBZ k 00166 for j 0 j lt NBY j 00167 for i 0 i lt NBX i 00168 if WriteChar handle ContenuTab tab i j K 00169 00170 close handle 00171 unlink nom 00172 return FALSE 00173 00174 if WriteDataPlayer handle joueur1 00175 00176 close handle 00177 unlink nom 00178 return FALSE 00179 00180 if WriteDataPlayer handle joueur2 00181 00182 close handle 00183 unlink nom 00184 retum FALSE 00185 00186 close handle 00187 WriteStrine STDOUT Sauvergarde terminee 1 00188 return TRUE 00189 00190 00191 ek ke ake ake ak k ak ake a e aki ke A ak h EDR ESS hhh ae aR ak aE ak Reak ae a ake ake eak 00192 LoadGame ka 00193 Recupere une partie sauvegardee ki 59 Mini projet C 2004 Morpion 3D 00194 Verification du type de fichier ai 00195 Initialisation de la matrice avec les valeurs du fichier k 00196 Initialisation des joueurs is 00197 Renvoie le joueur qui doit jouer 00199 int LoadGame char tab t joueur joueur1
48. 7 unsigned char IsWinner char tab t joueur joueur COORD lastplay 00268 COORD FindPosForWin char tab t joueur joueur int nb 00269 COORD FindTwoPosWin char tab t joueur joueur 00270 endif 2 Opengl h 00001 ifndef OPENGL H_ 00002 define OPENGL H_ 00003 00005 INCLUSIONS ki 00006 ez kaka ak aka kak ak ako ak aka ak ak 00007 ifndef LINUX 00008 include lt GL glut h gt 00009 else 00010 include GL glut h 00011 endif 00012 include math h 00013 include lt stdlib h gt 00014 31 Mini projet C 2004 Morpion 3D 00016 DEFINITIONS 00018 Taille et position de la fenetre 00019 define POSX 0 00020 define POSY 0 00021 define WIDTH 800 00022 define HEIGHT 600 00023 define ECARTFENETRE 4 00024 define MODE DISPLAY GLUT RGB GLUT_DOUBLE GLUT DEPTH 00025 define WINDOWTITLE Morpion 3D 00026 define HEIGHTPOLICE 18 00027 Taille et position de la sous fenetre 1 00028 define POSXSUB1 ECARTFENETRE 00029 define POSYSUBI ECARTFENETRE 00030 define WIDTHSUB1 w1 2 ECARTFENETRE 00031 define HEIGHTSUB1 h1 ECARTFENETRE 2 ECARTFENETRE 00032 Taille et position de la sous fenetre 2 00033 define POSXSUB2 POSXSUBI1 00034 define POSYSUB2 h1 ECARTFENETRE 2 ECARTFENETRE 2 00035 define WIDTHSUB2 w1 2 ECARTFENETRE 00036 define HEIGHTSUB2 HEIGHTSUB1 ECARTFENETRE 2 00037 Informations relatives la sous fenetre 2 0
49. BZI 00258 unsigned char i j k 00259 char temp NBX NBY NBZ 00260 Mini projet C 2004 Morpion 3D 00261 nb 0 00262 CopyTab tplat temp tab 00263 for k 0 k lt NBZ k 00264 00265 place z k 00266 for j 0 j lt NBY j 00267 00268 place y j 00269 for i 0 i lt NBX i 00270 00271 place x i 00272 if IsNoPion tplat temp place 00273 00274 SetCoord tplat temp place joueur 00275 if IsWinner tplat temp joueur place 00276 00277 coordtemp nb place 00278 nb 00279 00280 RemoveCoord tplat temp place 00281 00282 00283 00284 00285 if nb 00286 00287 i Randomize O nb 1 00288 return coordtempli 00289 00290 else 00291 return NOPOS 00292 00293 00295 FindTwoPosWin ba 00296 Cherche une case qui permet d avoir la possibilite de gagner sur 2 cases differentes 00298 COORD FindTwoPosWin tplat tab t joueur joueur 00299 00300 COORD place coordtemp 00301 unsigned chari j k 00302 int nb 0 00303 char temp cmpt 00304 00305 cmpt l 00306 coordtemp COORD malloc NBX NBY NBZ sizeof COORD 00307 temp char malloc NBX NBY NBZ sizeof char 00308 temp CopyTab temp tab 00309 for k 0 k lt NBZ k 00310 00311 place z k 00312 for 0 j lt NBY j 00313 00314 place y j 55 Mini projet C 2004 Mor
50. LECT blue 00102 else 00103 glColor3f NOPION red NOPION green NOPION blue 00104 00105 endif 00106 00107 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j ycase 1 ECARTBORD k zcase 00108 glVertex3f 1 ECARTBORD i RATIO1 xcase 1 ECARTBORD j ycase 1 ECARTBORD k zcase 20103 glVertex3f 1 ECARTBORD i RATIO xcase 1 ECARTBORD j RATIO vease 1 ECARTBORD k 00110 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j RATIO ycase 1 ECARTBORD k zcase 00111 glEnd 00112 face 2 du cube 00113 glBegin state 00114 ifdef WITHALPHA 00115 1f ARRETE 00116 glColor4f 0 0f 0 0f 0 0f ALPHAVALUE 00117 else if ContenuTab plateau i j k joueurl id 00118 glColor4f joueurl couleur red joueurl couleur green joueurl couleur blue ALPHAVALUE 00119 else if ContenuTab plateau i j k joueur2 id 00120 glColor4f joueur2 couleur red joueur2 couleur green joueur2 couleur blue ALPHAVALUE 00121 else if ContenuTab plateau i j k CASESELECT 00122 glColor4f SELECT red SELECT green SELECT blue ALPHAVALUE 00123 else 00124 glColor4f NOPION red NOPION green NOPION blue ALPHAVALUE 00125 else 00126 1f ARRETE 00127 glColor3f 0 0f 0 0f 0 0f 00128 else if ContenuTab plateau i j k joueurl id 00129 glColor3fjoueurl couleur red joueurl couleur green joueurl couleur blue 00130 else if
51. LIGN 00206 53 Mini projet C 2004 Morpion 3D 00207 cmpt 00208 break 00209 00210 00211 00212 nb 0 00213 nb2 0 00214 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00215 00216 if lastplay x i lt 0 II astplay x i gt NBX Il lastplay y i lt 0 li lastplay y i gt NBY 00217 continue 00218 if lastplay z i gt 0 amp amp lastplay z i lt NBZ 00219 00220 if ContenuTab tab lastplay x i lastplay y i lastplay z 1 joueur gt id 00221 nb 00222 else 00223 nb 0 00224 00225 if lastplay z i gt 0 amp amp lastplay z i lt NBZ 00226 00227 if ContenuTab tab lastplay x i astplay y i lastplay z i joueur gt id 00228 nb2 00229 else 00230 nb2 0 00231 00232 if nb gt NBPIONSALIGN 00233 00234 cmpt 00235 break 00236 00237 if nb2 gt NBPIONSALIGN 00238 00239 cmpt 00240 break 00241 00242 00243 00244 Si on arrive ici il n y a pas d alignement de NBPIONSALIGN 00245 return cmpt 00246 00247 00748 eaeoe 00249 FindPosForWin vi 00250 Trouve si il y a une possibilite de gagner 00251 nb est le nombre de fois ou l on gagne ki 00252 Renvoi une position aleatoire ou l on gagne 00254 00255 COORD FindPosForWin tplat tab t joueur joueur int nb 00256 00257 COORD place coordtemp NBX NBY N
52. LSE TRUE 00029 79
53. Morpion 3D Mini projet C 2004 Morpion 3D Profondeur 2 Profondeur 1 AAA S Profondeur 0 Morpion 3D BARON Julien FRAN OIS S bastien Mini projet C 2004 Morpion 3D Sommaire l ETUDE DU PROJET 1 Rappel des cahiers des charges 2 Bilan des objectifs et des r sultats obtenus ll STRATEGIE DE DEVELOPPEMENT 1 Organisation 1 R partition du programme en diff rents fichiers lll MANUEL D UTILISATION IV DEFINITION DES STRUCTURES UTILISEES V LES MACROS UTILISEES 1 ContenuTab 2 Effacer l cran VI L ALGORITHME DE L INTELLIGENCE ARTIFICIELLE IA 1 Etude du fonctionnement de PIA 2 Sch ma de fonctionnement de l algorithme d intelligence artificielle VII DETECTION D UN GAGNANT VIII EXEMPLES DE JEUX 1 L OpenGL 2 En r seau mode texte IX SYSTEME DE SAUVEGARDE ET DE CHARGEMENT 1 Sauvegarde 2 Chargement d une partie X OPENGL XI RESEAU 1 S quence de connexion 2 Protocole utilis XII BUGS ET OBSERVATIONS XIII ANNEXE LISTING DU CODE A o o OO N 0O auw o O 11 12 13 15 16 16 16 17 24 24 25 26 27 Mini projet C 2004 Morpion 3D l Etude du projet 1 Rappel des cahiers des charges Cahier n 1 On souhaite concevoir un jeu de morpion en 3D sur ordinateur deux joueurs pourront s y affronter et il est demand dans un premier temps de g rer la partie de v rifier que les pions sont correctement plac
54. PION 00016 return 00017 00018 00020 InitPlayer 00021 Initialise les donnees concernant un joueur 00022 ak a kak ak ak kk ak ae ee ee 00023 void InitPlayer char id t joueur joueur 00024 00025 char couleur 00026 EraseScreen 00027 WriteString STDOUT Initialisation d un joueur 1 00028 printf Nom du joueur joueur d n id 00029 joueur gt nom GetString STDIN SIZEBUFFER 00030 if joueur gt nom 0 00031 00032 00033 char tbuf 2 00034 joueur gt nom char malloc 8 sizeof char 00035 strcpy joueur gt nom joueur 00036 tbuf 0 id O conversion entier gt 1 10 en ascii 00037 tbuf 1 O 00038 strcat joueur nom tbuf 00039 00040 couleur ChooseMenu DisplayMenu COULEURMENU FALSE 00041 switch couleur 00042 00043 case ROUGE 00044 joueur gt couleur RED 00045 joueur gt pion Y 00046 break 00047 case BLEU 00048 joueur gt couleur BLUE 00049 joueur gt pion b 00050 break 00051 case VERT 00052 joueur gt couleur GREEN 00053 joueur gt pion g 00054 break 00055 case JAUNE 00056 joueur gt couleur YELLOW 00057 joueur gt pion y 40 Mini projet C 2004 Morpion 3D 00058 break 00059 case BLANC 00060 joueur gt couleur WHITE 00061 joueur gt pion w 00062 break 00063 default 00064 break 00065 00066 joueur gt id id 00067 joueur gt nbcoup
55. SetCoord 00047 Place le pion du joueur aux coordon es sp cifi es s 00048 ake ake ae ek ak ake ae ke ak ake ae ak ke ae ae ae ee eee ke ae ak ake ae ae ae ee eee ke eee ae ake ak ake ake ae ee ke eee a ak ake ee ke 00049 int SetCoord char tab COORD place t joueur joueur 00050 00051 if ISNoPion tab place 00052 00053 ContenuTab tab place x place y place z joueur gt id 44 Mini projet C 2004 Morpion 3D 00054 return TRUE 00055 00056 return FALSE 00057 00058 00059 EEEak ke ek ak ak ak ak ake ae eee eee eee ee kak ake eee ee 00060 RemoveCoord ki 00061 Retire un pion d une case N 00067 XXX KKK a kk ak ak KAI 00063 void RemoveCoord char tab COORD place 00064 1 00065 ContenuTab tab place x place y place z PASDEPION 00066 return 00067 00068 00069 PE ak ak ee ee ee EE EE HE EE EE ek ak kek ak kak 00070 IsNoPion 00071 Renvoie 1 si il n y a pas de pion sur la case passee en parametre S 00072 kk ak ak ak ak ak ak ak ak ak a 34 3 34 ee ke ke ke ke ee ae ae ae a eee ee ke ee ke ae ae ae eee eee ee ee ee ae ae ake ae ake ae a a a eee ee ee 00073 char IsNoPion char tab COORD place 00074 00075 if ContenuTab tab place x place y place z PASDEPION 00076 return TRUE 00077 return FALSE 00078 00079 00080 ZEA kk k ake ak ak eke ake ake ee ke eee eee ee eee ke eee eee ee eee eee eee AE ae ee ee ee ee 00081 FindFisrtPos 00082
56. TBORD j RATIO1 ycase 1 ECARTBORD k RATIO1 00230 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j RATIO1 ycase 1 ECARTBORD k zcase 00231 glEnd 00232 face 6 du cube 00233 glBegin state 00234 ifdef WITHALPHA 00235 if ARRETE 69 Mini projet C 2004 Morpion 3D 00236 00237 00238 00239 00240 00241 00242 00243 00244 00245 else 00246 00247 00248 00249 00250 00251 00252 00253 00254 00255 00256 endif 00257 00258 zcase a 00260 zcase glColor4f 0 0f 0 0f 0 0f ALPHAVALUE else if ContenuTab plateau i j k joueurl id glColor4f joueurl couleur red joueurl couleur green joueurl couleur blue ALPHAVALUE else if ContenuTab plateau i j k joueur2 id glColor4f joueur2 couleur red joueur2 couleur green joueur2 couleur blue ALPHAVALUE else if ContenuTab plateau i j k CASESELECT glColor4f SELECT red SELECT green SELECT blue ALPHAVALUE else glColor4f NOPION red NOPION green NOPION blue ALPHAVALUE if ARRETE glColor3f 0 0f 0 0f 0 0f else if ContenuTab plateau i j k joueurl id glColor3f joueurl couleur red joueurl couleur green joueurl couleur blue else if ContenuTab plateau i j k joueur2 id glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue else if ContenuTab plateau i j k CASESELECT glColor3f SELECT red SELECT green SELECT blue e
57. TITREMENUMAIN 3 40 Menu principal 00086 define DEUXJOUEURSUNPC 0 00087 define MENUO 00088 define UNJOUEUR 00089 define MENU Deux joueurs sur le meme PC 1 Joueur contre ordinateur 00090 define DEUXJOUEURSRESEAU 2 00091 define MENU2 Jeu en reseau 00092 define CHARGERPARTIE 1 MENUOFFSET 00093 define MENU3 Charger une partie enregistree 00094 define QUITTER 2 MENUOFFSET 00095 define MENU4 Quitter le jeu 00096 00097 define TITREMENUIA Sous Menu IA Choix de l ordre des joueurs 00098 define JOUEURFIRST 0 00099 define MENUIAO Le joueur joue en premier easy 00100 define IAFIRST 1 00101 define MENUIAI L IA joue en premier very hard 00102 define EGAL 2 00103 define MENUIA2 Tirage au sort de celui qui commencera 00104 define RETOUR 3 00105 define MENUIA3 Revenir au menu principal 00106 00107 define TITREMENURESEAU 00108 define SERVEUR 00109 define MENURESEAUO Sous Menu Reseau Creer un serveur wi xe 28 Mini projet C 2004 Morpion 3D 00110 define CLIENT 1 00111 define MENURESEAUI Etre un client se connecter au serveur 00112 define RETOURRESEAU 2 00113 define MENURESEAU2 Revenir au menu principal 00114 ep 00115 define TITREMENUCOULEUR Choix de la couleur du pion 00116 define ROUGE 0 00117 define COULEURO Rouge 00118 define VERT 1 00119 define COULEURI Vert 00120 define BLEU 2 0012
58. a gagne en 3 coups p sur ENTREE pour continuer Vue du gagnant 15 Mini projet C 2004 Morpion 3D IX Systeme de sauvegarde et de chargement 1 Sauvegarde Pour sauvegarder on appelle la fonction int SaveGame char tab t joueur joueurl t joueur joueur2 Cette fonction sauvegarde le jeu dans un fichier du type sav appel la fonction CreateFile La sauvegarde comprend 4 tapes 1 Ecriture dans le fichier d un en tete qui permet de v rifier la validit du fichier Si le fichier ne contient pas cet en tete il ne s agit pas d un fichier de sauvegarde du jeu 2 Ecriture du tableau de jeu en une seule ligne sans espace Comme dans le tableau de jeu on crit le num ro du joueur 1 2 3 cette ligne est remplie de blanc ou de caract re trange Ce qui limite un peu la tricherie aussi 3 Ecriture des informations concernant le joueur qui doit jouer au prochain chargement du jeu On crit dans l ordre et en sautant une ligne a chaque fois le nom du joueur le num ro du joueur les composantes RGB de la couleur choisie par le joueur et le nombre de coups jou s par le joueur 4 Ecriture de la m me facon des informations concernant le second joueur 2 Chargement d une partie Le chargement d une partie partir de fichier de sauvegarde se fait dans l ordre inverse On fait appel pour cela la fonction int LoadGame char tab t joueur joueurl t joueur joueur2 Cette fonction affiche
59. angeSize 00008 Pour changer la taille des fenetres si la fenetre principale est redimensionn e 00010 void ChangeSize int w int h 00011 00012 Pour ne pas diviser par 0 00013 if h lt 0 00014 h 1 00015 if w lt 0 00016 w l 00017 wl w 00018 hl h 00019 On affiche les differentes fenetres avec leur nouvelle taille 00020 glutSetWindow subWindow1 00021 glutPositionWindow POSXSUB1 POSYSUB1 00022 glutReshapeWindow WIDTHSUB1 HEIGHTSUB1 00023 ChangeSize2 WIDTHSUB1 HEIGHTSUB1 00024 glutSetWindow subWindow2 00025 glutPositionWindow POSXSUB2 POSYSUB2 00026 glutReshapeWindow WIDTHSUB2 HEIGHTSUB2 00027 return 00028 00029 00030 P tek ak He ee ee EE EE EE EE EE ER 00031 ChangeSize2 00032 Change la vue de la fenetre pour s adapter au nouveau ratio 00033 Valable uniquement pour la 3D car on adapte la perspective 00035 void ChangeSize2 int w int h 00036 00037 if w lt h 00038 glViewport 0 h w 2 w w 00039 else 64 Mini projet C 2004 Morpion 3D 00040 glViewport w h 2 0 h h 00041 00042 00043 OOOA APE A2 a ak eak AE e ak RE HEAR ae ak ae hh DS SR OR ES hh h ae ae ae kk 00045 RenderSceneAll l 00046 On r affiche toutes les fenetres et sous fenetres Ka 00047 REA ak ak ke ae ae ak ak ae a ak aki ele ae ake ae ake ake ae ake EDR al a ake RES PRIE a ake ake ee ae ESS ale ake ae ake ake HE PES IE 00048 void Ren
60. ansformation du rep re local l objet SS opha 3D oo x 4 2 AO vid aeiia 41 m CE ES Profondeur 0 Profondeur 1 Profondeur 2 Description de la fen tre Nous cr ons une fen tre de dimension de base 800 600 pixels Nous subdivisons ensuite cette fen tre en deux sous fen tres dans lesquelles nous affichons respectivement un cube compos de 27 petits cubes en 3D qui pourra tourner selon l utilisation de la souris et dans la seconde fen tre nous affichons ce m me cube coup en 3 plans La qualit de l affichage est bien meilleure mais un traitement de l image a t appliqu pour limiter l utilisation du noir le fond de la fen tre tant de cette couleur Diverses fonctions ont donc dues tre mises en place pour g rer le redimensionnement de la fen tre et la r actualisation de cette fen tre Pour charger ces fonctions dans l environnement OpenGL il faut faire appel des fonctions qui se chargent elles m mes de l int grer Ces fonctions ont toutes des prototypes impos s que nous sommes oblig s de suivre Toutes les donn es que nous voulions donc passer en param tre nos fonctions d affichages doivent alors tre mises en variables globales 21 Mini p
61. artie on affichera un cube en 3D qui tournera 00045 subWindowl1 glutCreateSubWindow main Window POSXSUB1 POSYSUB1 WIDTHSUB1 HEIGHTSUB1 00046 On initialise le alpha blending pour jouer avec la transparence 00047 ifdef WITHALPHA 00048 glEnable GL_BLEND 00049 endif 00050 Pour mettre de la couleur sur les surfaces dessin es 00051 glEnable GL COLOR MATERIAL 00052 glutDisplayFunc RenderScenesw1 00053 glutSpecialFunc processSpecialKeys 00054 glutKeyboardFunc ProcessNormalKeys 00055 glutMouseFunc Mousel 00056 glutMotionFunc MouseMotion1 00057 Dans cette 2nde partie on affichera le cube sous forme de 3 coupes planes 00058 subWindow2 glutCreateSubWindow mainWindow POSXSUB2 POSYSUB2 WIDTHSUB2 HEIGHTSUB2 00059 glutDisplayFunc RenderScenesw2 00060 glutSpecialFunc processSpecialKeys 00061 glutKeyboardFunc ProcessNormalKeys 00062 glutMouseFunc Mouse2 00063 return 63 Mini projet C 2004 Morpion 3D 00064 00065 00066 void DestroyWindow void 00067 00068 if mainWindow 00069 00070 glutDestroy Window subWindow1 00071 glutDestroy Window subWindow2 00072 glutDestroy Window mainWindow 00073 00074 return 00075 00076 16 Displayglobal opengl c 00001 include global h 00002 00003 extern int mainWindow subWindow1 subWindow2 00004 int w1 hi 00005 00006 257242 kk kak ee EE EE EE l kk l kak kak kk ak kak EE EN EE EE EE EE EE 00007 Ch
62. ateau COORD select t joueur joueurl t joueur joueur2 00029 00030 On met le pion sur la case sp cifi e 00031 ContenuTab plateau select x select y select z joueur Xid 00032 Incr mentation du nombre de coup jou 00033 joueur nbcoup 00034 On recherche si on a un vainqueur 00035 if IsWinner plateau joueur select 00036 WINNER TRUE 00037 else 00038 joueur joueur joueurl joueur joueurl 00039 return 00040 00041 00042 7833 3k 33 3 eee ee ke a a ake ae 3 a ee ee ee ke ee ke ke ee eee eee ee ee ke ke ae ae ae a ae eee eee ee ee ae ae ae ae ae a a a eee ee 00043 TextGame 00044 Version texte et r seau du coeur du jeu d termine qui joue 00045 fait v rifier les coordonn es g re ventuellement le r seau et I TA 00046 ia kak ea a eo ee ap a l kak ak l kap a l kak a l 00047 void TextGame tplat plateau t joueur joueurl t joueur joueur2 int socket 00048 00049 COORD place 00050 char EOG FALSE 00051 joueur joueur2 00052 IY N cessaire d initialiser une valeur influe sur le joueur jouant le premier dans le mode contre l ordinateur 00053 do 00054 00055 joueur joueur joueur1 joueur joueurl 00056 EraseScreen 00057 WriteString STDOUT Morpion 3D realise par Savon et Seb 1 00058 ifdef WITHOPENGL 00059 WriteStrine STDOUT Pour quitter la partie tapez la lettre VOV pour sauvegarder la partie tapez
63. c des variables d tats variables statiques accessibles uniquement par des fonctions d OpenGL et dont les valeurs persistent jusqu la modification suivante Prototypes des fonctions Les fonctions OpenGL commencent par gl Certaines sont suffix es par un indicatif du nombre et du type d arguments gl 234 fidbsu v Capacit s de rendu Le rendu effectu est simple il s appuie sur la projection dans l espace image de polygones plans Cette technique est rapide mais ne permet pas de rendre les interactions lumineuses complexes l inverse de la technique du lanc de rayons 17 Mini projet C 2004 Morpion 3D Ce qu OpenGL fait Affichage de polygones plans toutes les primitives sont transform es en polygones Projection perspective et orthographique Gestion des transformations et des normales Gestion des faces cach es limination par l orientation technique du z buffer Couleurs RVB m lange composante alpha Textures clairage Impl mente les mod les de lumi re Gouraud et Phong Simulation du brouillard Ce qu OpenGL ne fait pas Lancer de rayons et les possibilit s associ es Projection d ombres et simulation de la r flexion r fraction Gestion d un format de fichier 3D d un format de fichier image Gestion des fen tres et interaction avec l utilisateur clavier souris On utilisera GLUT GL Utility Toolkit qui facilite la cr
64. d 00160 nb2 00161 else 00162 nb2 0 00163 00164 if nb gt NBPIONSALIGN 00165 00166 cmpt 00167 break 00168 00169 if nb2 gt NBPIONSALIGN 00170 00171 cmpt 00172 break 00173 00174 00175 00176 Si on vient de jouer le pion au mileu du plateau case 1 1 1 on a 4 diagonales possibles suppl mentaires 00177 Ou si on vient de jouer un pion sur les 8 coins du cube alors une seule diagonale possible 00178 On aurait pu tester case par case puisqu il n y avait que 4 possibilit mais on perdait la possibilit 00179 de changer le nombre de pions aligner et les dimension du plateau de jeu 00180 nb 0 00181 nb2 0 00182 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i 00183 00184 if lastplay x i lt 0 ll lastplay x i gt NBX Il lastplay y i lt O II lastplay y i gt NBY 00185 continue 00186 if lastplay z i gt 0 ke lastplay z i lt NBZ 00187 00188 if ContenuTab tab lastplay x i lastplay y i lastplay z i joueur gt id 00189 nb 00190 else 00191 nb 0 00192 00193 if lastplay z i gt 0 amp amp lastplay z i lt NBZ 00194 00195 if ContenuTab tab lastplay x i lastplay y i lastplay z 1 joueur id 00196 nb2 00197 else 00198 nb2 0 00199 00200 if nb gt NBPIONSALIGN 00201 00202 cmpt 00203 break 00204 00205 if nb2 gt NBPIONSA
65. de jouer du joueur Cette derni re affirmation n est cependant pas prouv e nous n avons pas test tous les cas mais dans les multiples phases de tests effectu s nous n avons jamais pu vaincre l IA si nous ne jouions pas sur la case centrale 2 Sch ma de fonctionnement de l algorithme d intelligence artificielle Ordinateur commence Je joue sur la case 1 1 1 Je joue cot de lui Case 1 1 1 libre Je joue sur um com du cube Je joue sur le blanc Je joue sur les cases qui m offrent le plus de possibilit d alignenent 10 Mini projet C 2004 Morpion 3D VII D tection d un gagnant La d tection se fait au travers d une seule et unique fonction dont voici le prototype unsigned char IsWinner char tab t joueur joueur COORD lastplay Cette fonction doit tre simple et rapide ex cuter puisqu elle est appel e chaque tour de jeu et de nombreuses fois pour trouver la position du pion jou par l TA On a donc remarqu qu il n tait pas n cessaire de parcourir le tableau en entier a chaque fois pour d terminer si un joueur avait ou non gagn Il suffit de regarder si avec le dernier pion jou par le joueur un alignement de NBPIONSALIGN tait r alis Pour cela il faut tester dans toutes les directions possibles horizontales verticales et diagonales qu un alignement n est pas r alis Pour mieux comprendre cette fonction nous allons tudier une pa
66. derSceneAll void 00049 00050 00051 RenderScene 00052 RenderScenesw10 00053 RenderScenesw2 00054 return 00055 00056 00057 PE ak kak kak ak ee ee ee EE 00058 RenderScene 00059 Affichage de la fenetre principale 00060 T EE ARS ER AAA Ak NA E ERE PS SOS HO k 00061 void RenderScene void 00062 00063 glutSetWindow mainWindow 00064 glClear GL_ COLOR BUFFER BIT 00065 glutSwapBuffers 00066 return 00067 17 displayS1 opengl c 00001 include global h 00002 00003 extern int subWindow1 00004 extern int angley anglex 00005 extern int w1 h1 00006 extern t_joueur joueur1 joueur2 joueur 00007 extern tplat plateau 00008 extern char WINNER 00009 O00 10 ZE EAA a k ak A ae l ki ae A ake a ake ae ak A DE a ak AE HE A ake R Ak ae a ak ak aR kak HAS ak RE a a ae Rk kk 00011 RenderScenesw1 ak 00012 Fonction d affichage de la sous fenetre 1 s 00013 Affichage d un cube compos e de 27 autres cubes 00014 qui pourra tourner avec la souris clic gauche OY SE ake a 34e ake ake ak ake ake ak ak ak ake ake akak ae akak ake kakak kkk 00016 void RenderScenesw1 void 00017 00018 inti j K 00019 00020 glutSetWindow subWindow1 00021 effacement de l image avec la couleur de fond 00022 glClear GL_ COLOR BUFFER BIT GL_DEPTH_BUFFER_ BIT 00023 glPushMatrix 00024 Si on a un vainqueur on l affiche l cran 65 Mini
67. egin state 00204 ifdef WITHALPHA 00205 if ARRETE 00206 glColor4f 0 0f 0 0f 0 0f ALPHAVALUE 00207 else if ContenuTab plateau i j k joueurl id 00208 glColordf joueur1 couleur red joueurl couleur green joueurl couleur blue ALPHAVALUE 00209 else if ContenuTab plateau i j k joueur2 id 00210 glColor4f joueur2 couleur red joueur2 couleur green joueur2 couleur blue ALPHAVALUE 00211 else if ContenuTab plateau i j k CASESELECT 00212 glColor4f SELECT red SELECT green SELECT blue ALPHAVALUE 00213 else 00214 glColor4f NOPION red NOPION green NOPION blue ALPHAVALUE 00215 else 00216 if ARRETE 00217 glColor3f 0 0f 0 0f 0 0f 00218 else if ContenuTab plateau i j k joueurl id 00219 glColor3f joueurl couleur red joueurl couleur green joueurl couleur blue 00220 else if ContenuTab plateau i j k joueur2 id 00221 glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue 00222 else if ContenuTab plateau i j k CASESELECT 00223 glColor3f SELECT red SELECT green SELECT blue 00224 else 00225 glColor3f NOPION red NOPION green NOPION blue 00226 endif 00227 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j ycase 1 ECARTBORD K zcase 00228 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j ycase 1 ECARTBORD k RATIO1 zcase ras glVertex3f 1 ECARTBORD i xcase 1 ECAR
68. et ipserver quit 1 while lquit InitMat plateau joueur2 id 1 char buffer 100 char r sprintf buffer Hello I am s c joueur1 nom joueur1 pion NetSend amp fdsocket buffer strlen buffer if NetReceive Sfdsocket buffer 100 break joueur2 nom char malloc SIZEBUFFER joueur2 nbcoup 0 sscanf buffer Hello I am s c joueur2 nom amp joueur2 pion printf s c n joueur2 nom joueur2 pion InitMat plateau Display plateau amp joueurl amp joueur2 35 Mini projet C 2004 Morpion 3D 00108 00109 00110 00111 00112 00113 00114 00115 00116 00117 00118 00119 00120 00121 00122 00123 00124 00125 00126 00127 00128 00129 00130 00131 00132 00133 00134 00135 00136 00137 00138 00139 00140 00141 00142 00143 00144 00145 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160 00161 do COORD coords r NetReceive amp fdsocket buffer 100 if buffer x sscanf buffer x ou y 7ou z Zou amp coords x amp coords y amp coords z IY N cessaire car la lecture doit se faire en entier sinon on obtient un caract re et non une valeur comprise entre 0 et 2 SetCoord plateau coords amp joueur2 EraseScreen Display plateau amp joueurl amp joueur2 joueur2 nbcoup if strnemp buffer Your turn 10 0 char buf 20 coords ReadCoord
69. f NOPION red NOPION green NOPION blue ALPHAVALUE 00155 else 00156 1f ARRETE 00157 glColor3f 0 0f 0 0f 0 0f 00158 else if ContenuTab plateau i j k joueurl id 00159 glColor3f joueurl couleur red joueurl couleur green joueurl couleur blue 00160 else if ContenuTab plateau i j k joueur2 id 00161 glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue 00162 else if ContenuTab plateau i j k CASESELECT 00163 glColor3f SELECT red SELECT green SELECT blue 00164 else 00165 glColor3f NOPION red NOPION green NOPION blue 00166 endif 00167 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j ycase 1 ECARTBORD k RATIO zcase oree glVertex3f 1 ECARTBORD i RATIO xcase 1 ECARTBORD j ycase 1 ECARTBORD k RATIO1 00169 IVertex3f 1 ECARTBORD i RATIO xcase 1 ECARTBORD j RATIO1 ycase 1 ECARTBORD k RATIO ee 00170 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j RATIO ycase 1 ECARTBORD k RATIO zcase 00171 glEnd 00172 face 4 du cube 00173 glBegin state 00174 ifdef WITHALPHA 00175 1f ARRETE 00176 glColor4f 0 0f 0 0f 0 0f ALPHAV ALUE 00177 else if ContenuTab plateau i j k joueurl id 00178 glColor4f joueurl couleur red joueurl couleur green joueurl couleur blue ALPHAVALUE 00179 else if ContenuTab plateau i j
70. glColor3f TEXTE red TEXTE green TEXTE blue 00062 setOrthographicProjection 00063 glPushMatrix 00064 glLoadldentity 00065 sprintf buffer Profondeur d k 00066 RenderBitmapString POSTEXTEX POSTEXTEY2 void font buffer 00067 glPopMatrix 00068 resetPerspectiveProjection 00069 00070 glFlush 00071 glutSwapBuffers 00072 return 00073 19 keyboard opengl c 00001 include global h 00002 Mini projet C 2004 Morpion 3D 00003 extern char WINNER 00004 extern int main Window 00005 extern t joueur joueur joueurl joueur2 00006 extern char plateau 00007 OOQO SA 2 k a aki ole e A k e ki ake A ak ake RE afe j af A af ak ai ak EDR aki ale aje afe ake HE a ak ak ae ae ak ak le aje ae DA HS HS ak ED ak e ae ae a ake HS ae a DR ake ae ae a ake a 00009 processSpecialKeys 00010 Ce qui se produit si on appuie sur des touches sp ciales du clavier 00011 ake ak a ste ske ake ae ele ke ae ak ke ae ae ae ee eee ke ee ee ee ee eee ke eee eee ee eee ke eee eee ee eee ke eee eee eee KE 00012 void processSpecialKeys int touche int x int y 00013 00014 ALT F4 on quitte le jeu 00015 if touche GLUT KEY F4 amp amp glutGetModifiers GLUT ACTIVE ALT 00016 00017 glutDestroyWindow main Window exit 0 00018 00019 return 00020 00021 00022 22 ak ak a3 3 ak ak 3 ake ake ake a ale ole ake ae a
71. h 00002 00003 SFA e e k 3 3a AA af ak PE a ake a ae ake a DAS DS afe ake PE Ae ske ae RAS HE PIED SSP a ake ake a ake ake ae DR SD PE ak ak PSS RE SPORE PE DR ARE TE SR RER kk k 00004 InitClient 00005 Pr pare un socket pour la connexion du client 00006 ke ake a ak ak he ae ke ak ke ae ake ke ae ake ae ee eee ke ee ee ee ee eee ake eee ke ae ae ee eee ke eee eee ee eee ke eee ake ake ae ee eee ke ak ake ake eee 00007 char InitClient int fd 00008 1 00009 extern int errno 00010 fd socket PF_INET SOCK_STREAM 6 00011 ipv4 flux TCP 00012 if fd 1 return FALSE 00013 puts Socket cr 00014 return TRUE 00015 00016 00017 F AA ke ak ke k k ak y SA ake A ak ak RE DGA A ake j ak A EE 00018 Connect 00019 Pr pare puis tablit la connexion avec l h te distante 00020 Ti d i h e ak ak RE ee ak aa a ka ae ak ki k e a ak ak a a AE ae ak ke RE Be ae ak ak a ae h a ak ak a e a ak ao a ae e oke kek d 00021 char Connect int fd char RemotelP 00022 00023 struct sockaddr in remote 00024 remote sin family AF INET Type internet 00025 remote sin_addr s_addr INADDR ANY toute interface 00026 remote sin_port htons 9999 port 00027 if inet_pton AF_INET RemoteIP amp remote sin_addr lt 0 00028 return FALSE 00029 if 1 connect fd struct sockaddr amp remote sizeof remote 76 Mini projet C 2004 Morpion 3D 00030 00031 printf Impo
72. ie ak 346 ak ak ake ak ak ak afe ale ale ale ae ae ae ak ake a ake a ake ak ak ak ake 346 ake ae ae ae ICI ak ak ak ak ake ake ae ae ae ae ak 3k aak 3k ak ke a 00023 ProcessNormalKeys a 00024 Ce qui se produit si on appuie sur les touches classiques du clavier 00025 kk a kak ak ak kk ak ea ee ee ak ak l ak kap a ke ak ak ak l kak a l ak ak a ak ke ak ak ak ak ke ak ak kak ak ak ak ak ak ak kek ak ak kk ak a 00026 void ProcessNormalKeys unsigned char key int x int y 00027 00028 key tolower key 00029 switch key 00030 00031 S ou s On sauvegarde le jeu 00032 case s 00033 glutDestroyWindow main Window 00034 SaveGame plateau joueur joueur amp joueur1 amp joueur2 amp joueurl 00035 InitWindow 00036 glutPostRedisplay 00037 break 00038 case q 00039 glutDestroyWindow main Window 00040 mainWindow 0 exit 0 00041 break 00042 N importe quelle touche si il y a un vainqueur On quitte le jeu 00043 default 00044 if WINNER 00045 00046 glutDestroyWindow main Window 00047 Dans l ventualit ou l on quitte le jeu on met l identifiant de la fenetre 0 00048 mainWindow 0 00049 00050 break 00051 00052 return 00053 20 mouse opengl c 00001 include global h 72 Mini projet C 2004 Morpion 3D 00002 00003 Pour faire tourner le cube de la sous fenetre 1 00004 extern int w1 h1 00005 extern int subWindow1 00006
73. inateur commence syst matiquement Lors de nos tests l OpenGL avec mode alpha transparence des pions ne fonctionne pas correctement sous Linux Le r seau reste impl menter pour windows travers l interface winsock 26 Mini projet C 2004 Morpion 3D XIII Annexe listing du code Nous avons utilis Doxygen pour g n rer une documentation du code mais les copier collers du code partir d internet explorer transforment les en 1 Global h 00001 ifndef GLOBAL_H_ 00002 define GLOBAL_H_ 00003 00004 kk a 3 ak ee ak ak ak ak ake 3k ak eee k k ee eee ak ok ak ak ak 00005 SYSTEME D EXPLOITATION ki 00006 tak ee eee eee ee kak kk kk 00007 ifdef LINUX 00008 define NETWORK 1 00009 else 00010 define WITHALPHA 1 00011 endif 00012 00013 Je eee ak ak kak ak a 00014 INCLUSIONS si QOQOQ15 Fok kak ak ak kak ak kak ak ok okok ok ok ok kok ak ake ak 00016 include lt errno h gt 00017 include lt fcntl h gt 00018 ifdef LINUX 00019 include lt unistd h gt 00020 include lt ctype h gt tolower 00021 else 00022 include lt io h gt 00023 endif 00024 include lt math h gt 00025 include lt stdio h gt 00026 include lt stdlib h gt 00027 include lt string h gt 00028 include lt sys types h gt 00029 include lt sys stat h gt 00030 include lt time h gt 00031 include opengl h 00032 00033 ifdef WITHNETWORK 00034 include network h 000
74. k joueur2 id 00180 glColor4f joueur2 couleur red joueur2 couleur green joueur2 couleur blue ALPHAVALUE 00181 else if ContenuTab plateau i j k CASESELECT 00182 glColor4f SELECT red SELECT green SELECT blue ALPHAVALUE 00183 else 68 Mini projet C 2004 Morpion 3D 00184 glColor4f NOPION red NOPION green NOPION blue ALPHAVALUE 00185 else 00186 if ARRETE 00187 glColor3f 0 0f 0 0f 0 0f 00188 else if ContenuTab plateau i j k joueurl id 00189 glColor3f joueurl couleur red joueurl couleur green joueurl couleur blue 00190 else if ContenuTab plateau i j k joueur2 id 00191 glColor3f joueur2 couleur red joueur2 couleur green joueur2 couleur blue 00192 else if ContenuTab plateau i j k CASESELECT 00193 glColor3f SELECT red SELECT green SELECT blue 00194 else 00195 glColor3f NOPION red NOPION green NOPION blue 00196 endif Wh glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j RATIO1 ycase 1 ECARTBORD k RATIO1 00198 IVertex3f 1 ECARTBORD i RATIO xcase 1 ECARTBORD j RATIO ycase 1 ECARTBORD k RATIO PR WEN glVertex3f 1 ECARTBORD i RATIO1 xcase 1 ECARTBORD j RATIO vease 1 ECARTBORD k 00200 glVertex3f 1 ECARTBORD i xcase 1 ECARTBORD j RATIO1 ycase 1 ECARTBORD k zcase 00201 glEnd 00202 face 5 du cube 00203 glB
75. ke ae ae eee KKK EK 00071 void StopServer int newfd 00072 00073 puts Arret du serveur le client s est d connect 00074 close newfd 00075 close fd 00076 24 network c 00001 include network h 00002 00003 TEE ak ke eke ake ae ak ek ae ae ak ke ae ake ak ake ae ae ak ak eee ke ee eee ae ak ak ae ake ak ke eee fe eee ake eee ke ae ae ak ake ae eee eee ke ee ake ae ae ake ake 00004 NetSend 00005 Envoie un message sur le socket pass en param tre 00006 k2 ak ak ak ak ak ak ake ak ake a 3 34 3e eee ke ee ee a a ake ee ee eee ee ke ke ke ke 34e ae 24 eee eee eee ee ke ke ke ae a ae ae eee eee ee ee ok ok ok ok ok 2k 00007 char NetSend int newfd char buffer unsigned int bufsize 00008 1 00009 if send newfd buffer bufsize 0 1 00010 78 Mini projet C 2004 Morpion 3D 00011 Pprintf Message envoy s n buffer 00012 return TRUE 00013 00014 else return FALSE 00015 00016 00017 52262 ak ak ak ak ak eo eee ee D D KKK KKK kak ak ak kk ak ak ak a ak ak a a 00018 NetReceive 00019 Attend l arriv e d un message partir du socket pass en param tre et r cup re son contenu 00020 ok a tak eee ae ee ee D 00021 char NetReceive int newfd char buffer unsigned int bufsize 00022 00023 int car 00024 car recv newfd buffer bufsize 0 00025 buffer car O 00026 00027 Pprintf Message re u s 7od m buffer car 00028 return car 0 FA
76. lse glColor3f NOPION red NOPION green NOPION blue glVertex3f 1 ECARTBORD i RATIO xcase 1 ECARTBORD j ycase 1 ECARTBORD k zcase glVertex3f 1 ECARTBORD i RATIO xcase 1 ECARTBORD j ycase 1 ECARTBORD k RATIO1 ja gIVertex3f 1 ECARTBORD i RATIOL xcase 1 ECARTBORD j RATIO1 ycase 1 ECARTBORD k ZCase glVertex3f 1 ECARTBORD i RATIOL xcase 1 ECARTBORD j RATIO1 ycase 1 ECARTBORD k 00261 glEnd 00262 return 00263 18 displayS2 opengl c 00001 include global h 00002 00003 extern int subWindow2 00004 extern int w1 hi 00005 extern t joueur joueurl joueur2 joueur 00006 extern tplat plateau 00007 extern char WINNER 00008 00010 RenderScenesw3 ka 00011 On affiche les differents plans du cube 00013 void RenderScenesw2 void 00014 00015 unsigned chari j k 00016 char buffer SIZEBUFFER 00017 int font 00018 COORD place 00019 00020 glutSetWindow subWindow2 00021 glClearlGL COLOR BUFFER BIT 00022 font int GLUT BITMAP HELVETICA 18 00023 Appel de la fonction de placement du pion de I TA si necessaire 70 Mini projet C 2004 Morpion 3D 00024 if joueur id IANUMBER amp amp WINNER 00025 00026 place FindCoordIA plateau joueur joueur gt id IANUMBER amp joueur ejoueurl 00027 Game plateau place
77. mp amp p str lt taille 00066 p 1 0 00067 return strdup str 00068 00069 00070 ZEE AA k ak ki e a 4 ke a DS a A ak ak Ae aE ak ape ale aj PR A HG A DR EDS A le SPA a A DR GDS A D SPA ke A ake ak SDS RD aR A AE HE A a RDS RE R kk ae A ake Rk a k RER kk 00071 ComleteExtension g 00072 Ajoute au om du fichier son extension au cas ou l utilisateur ne l aurait pas mise 00073 AH HA kk ke ki ke AIO 346 ak ake ake ake oke ale ale al ake ae ake 346 ake ak ak ak ak RH 346 ae ake a ae IDE ak ak ak GO ae ake ak ake aak ake ak af ak ake ak ak akak ak kakak ak ak ai kakak kakak a ake ak kkk 00074 char CompleteExtension char nom char extension 38 Mini projet C 2004 Morpion 3D 00075 00076 char pos 00077 00078 pos strstr nom 00079 if pos NULL 00080 pos U 00081 strcat nom extension 00082 return strdup nom 00083 00084 00085 ke 2 ak ok ke ek ae ak ak eke he ae ke ake ake ake ak 3e ee ke eee ee eee eee ke ee ee ae ak ake ee 00086 CopyTab 00087 Copie un tableau dans un autre tableau 00088 kk kak ak ak ak ak ak ak ak a ae ak ak eee ee ke ae ae ae ae ae ae eee eee ee ak ak ok ak ak ok ok ak 00089 char CopyTab char destination const char source 00090 00091 unsigned char i j k 00092 00093 for k 0 k lt NBZ k 00094 for 0 j lt NBY j 00095 for i 0 i lt NBX i 00096 ContenuTab destination i j k Conte
78. nte connect transmet une s quence d tablissement de connexion recv regoit un message sur le socket send re oit un message sur le socket send regoit un message sur le socket recv re oit un message sur le socket close ferme le socket et r initialise la connexion close ferme le socket et r initialise la connexion 24 Mini projet C 2004 Morpion 3D 2 Protocole utilis Nous avons mis en place un protocole tr s simple bas sur un langage humain Dans cet exemple le client aura pour nom joueurclient le pion c le serveur sera joueurserveur et aura pour pion s Une fois la connexion tablie le serveur se met en r ception et le client transmet son nom et son pion Client gt Serveur Hello I am joueurclient c Serveur gt Client Hello I am joueurserveur s Le serveur commence et doit entrer les coordonn es de son premier pion x 1 y 1Z 1 celles ci sont ensuite transmises au client Serveur gt Client x 1 y 1 z 1 Serveur gt Client Your turn Le serveur passe la main au client celui ci saisit ses coordon es transmises de la m me mani re mais le serveur d termine si le coup est valide ou non le client essaie de jouer aussi en 11 1 Client gt Serveur x 1 y 1 z 1 Serveur gt Client Your turn Le serveur lui repasse la main jusqu ce que le coup soit valide il envoie alors un accus au
79. nter ce rep re dans le rep re monde void glutWireCube GLdouble taillecote void glutWireSphere GLdouble radius GLint slices GLint stacks 18 Mini projet C 2004 Morpion 3D void glutWireTorus GLdoublerayontube GLdouble rayontore GLint slice GLint stacks Matrices de transformations et de projection Un polygone par extension toute primitive graphique subit une s rie de transformations avant son affichage l cran Cette suite de traitements est appel e le pipeline graphique OpenGL utilise 2 matrices 4x4 appel es GL PROJECTION et GL MODELVIEW pour mod liser ces transformations Elles agissent sur les sommets et les normales d finis en coordonn es homog nes Apr s passage par ces deux matrices la division perspective par la quatri me coordonn e intervient les coordonn es sont normalis es puis rapport es au rep re cran voir figure 1 Matrice Matrice rE Transformation el de transformations de projection Division coordonn es cran perspective GL MODELVIEW GL PROJECTION glViewport Coordonn es Coordonn es Coordonn es Coordonn es Observateur de Clipping Normalis es Pixels Sommet FIG 1 Le pipeline graphique d OpenGL GL_PROJECTION permet de mod liser la projection effectu e par la cam ra On la s lectionne avec glMatrixMode GL PROJECTION on peut la param trer avec les fonctions suivantes ou bien manuellement gluPerspective angle
80. nuTab source i j K 00097 return destination 00098 00099 00100 Pak a ak ak ak ak ak ea eee D ak ak ak ak a kk ak a ak ak ak ak ke ak a a 00101 Verify a 00102 Verifie si les valeurs du header sont plausibles 00103 kek ak ak ak ak ak ak ak ak ak al ak ak ak ke ee ke ee ke ake ake ae ake ake ee eee ee ee ee a ak ak ak akak a ak kkk ak ak ak ak 00104 void Verify void 00105 00106 char TEST FALSE 00107 00108 if NBX lt 1 I NBY lt 1 I NBZ lt 1 00109 00110 TEST TRUE 00111 WriteString STDOUT Plateau trop petit 1 00112 GetString STDIN SIZEBUFFER 00113 00114 if NBPIONSALIGN 2 00115 00116 TEST TRUE 00117 WriteStrine STDOUT Alignement mal configure 1 00118 GetString STDIN SIZEBUFFER 00119 00120 if TEST 00121 exit 1 00122 6 Init c 00001 include global h 00002 00003 kk ak ak ok ak eee 3 ak a ee ke ake ake ake ae ake ae ae ae ak eee ak ee ke ake ae ae ae ae ae ae 3e eee eee eee ake ak ak 39 Mini projet C 2004 Morpion 3D 00004 InitMat e 00005 Initialise le plateau de jeu 3 dimensions i 00006 en le remplissant de 0 ka 00007 di a tk ak ak ke ak ak ae ee ee KKK kak ak kak ak ak kk ak ak ke kk ak ak kk ak an 00008 void InitMat tplat tab 00009 00010 char i j k 00011 00012 for k 0 k lt NBZ k 00013 for j 0 j lt NBY j 00014 for i 0 i lt NBX i 00015 ContenuTab tab i j k PASDE
81. ouhaite placer plusieurs objets relativement au rep re monde sans recalculer la transformation chaque fois La cam ra est plac e au centre du rep re monde et regarde vers les Z n gatifs On retiendra les 2 approches suivantes Tourner autour d un objet translation puis rotation Regarder la sc ne depuis un point donn rotation puis translation Les couleurs OpenGL est capable de travailler avec diff rentes repr sentations des couleurs La plus facile utiliser est le mode RGB dans lequel chacune des 3 composantes rouge verte et bleue est cod e sur 8 bits Un appel la fonction glColor3f permet de d finir la couleur pour les trac s suivants jusqu un prochain appel pour choisir une autre couleur Le prototype de la fonction est le suivant void glColor3f GLfloat r GLfloat g GLfloat b r g etb sont les proportions de chaque composante valeur entre 0 et 1 Les fonctions en 4f permettent de jouer sur la transparence 20 Mini projet C 2004 Morpion 3D Exemple d une transformation g om trique Soit la s quence glRotatef 90 1 0 0 1 Rotation autour de X de 90 glTranslatef 10 0 0 2 Translation de 10 selon X glRotatef 90 0 1 0 3 Rotation de 90 autour de Y glTranslatef 0 2 0 4 Translation de 2 selon Y L interpretation graphique dans le sens de lecture du code est pr sent e ci dessous Elle correspond une tr
82. our quitter la boucle v nementielle d OpenGL un appel la fonction exit C est dire que nous fermions le programme sans pour autant revenir au menu principal Comment faire Nous avons d truit la fen tre OpenGL mais sa boucle v nementielle tourne encore puis nous appelons le main Ce n est pas tr s beau mais cela semble fonctionner Et de ce main o nous recr ons la fen tre OpenGL qui r cup re sa boucle v nementielle Nous quittons le programme par un appel exit qui d truira la boucle v nementielle restante 23 Mini projet C 2004 Morpion 3D XI R seau Notre r f rence a t un TP r seau programmation socket sous windows de DUT qu il a fallu croiser avec diff rents man pour adapter sous Linux Un socket est une interface r seau sp cifique ici nous l utilisons en TCP un protocole connect et fiable il permet de s assurer que le paquet envoy est bien re u Nous changerons dessus de mani re bidirectionnelle les informations n cessaires au d roulement du jeu Le port choisi 9999 ne correspond aucun port standard de protocole notre connaissance 1 S quence de connexion attachement du socket une interface de la machine Serveur Client socket socket ouverture d un socket ouverture d un socket bind bind attachement du socket une interface de la machine listen mise en attente accept accepte une connexion dista
83. pion 3D V Les macros utilis es 1 ContenuTab La macro ContenuTab permet d acc der une case du plateau de jeu Sa d finition est la suivante define ContenuTab tab x y zZ tab z NBY NBX y NBX x Il est noter que notre plateau de jeu est d fini de la sorte char plateau NBX NBY NBZ Ci dessous une repr sentation de notre plateau de jeu en m moire Ce tableau permet d expliquer lui seul la macro ContenuTab Si l on veut aller se positionner sur la case de coordonn es 1 2 1 il faut alors aller la case 16 du plateau inscrit en m moire ce qui correspond bien 1 3 3 2 3 1 16 en admettant que l on est bien param tr NBX NBY et NBZ 3 2 Effacer l cran Cette macro permet d effacer tout le texte pr c demment crit dans la console ifdef LINUX define EraseScreen system clear else define EraseScreen system cls endif Cette macro se fait en deux tapes On v rifie tout d abord le type du syst me d exploitation par une variable LINUX d finie dans le Makefile Ainsi pour quelques rares fonctions nous crivons deux versions Dans le cas de notre macro si nous travaillons sous linux chaque fois que dans le code nous aurons la fonction EraseScreen elle sera remplac e par system clear et sous Windows par system cls Mini projet C 2004
84. pion 3D 00315 for i 0 i lt NBX i 00316 00317 place x i 00318 if IsNoPion temp place 00319 00320 SetCoord temp place joueur 00321 FindPosForWin temp joueur amp nb 00322 RemoveCoord temp place 00323 if nb gt 2 00324 00325 cmpt 00326 coordtemp cmpt place 00327 00328 00329 00330 00331 00332 if empt 1 00333 return coordtemp Randomize 0 cmpt 00334 return NOPOS 00335 13 File c 00001 include global h 00002 00003 ee ee ee ee EE HE EH EE EE ak kek ak ak kak e 00004 CreateFile se 00005 Cree un fichier vide ou efface le fichier existant apres accord de l utilisateur 00007 int CreateFile char nom 00008 1 00009 int handle 00010 char c 00011 00012 WriteString STDOUT Sous quel nom voulez vous sauvegardez votre fichier 1 00013 nom GetString STDIN SIZEBUFFER 00014 CompleteExtension nom EXTENSIONSAUVEGARDE 00015 ifdef LINUX 00016 if handle open nom O_EXCL 0 CREAT O_WRONLY S_IWUSR S_IRUSR 1 00017 else 00018 if handle open nom O EXCLI O CREATI O WRONLYI O TEXT S IWRITE _S_IREAD 1 00019 endif 00020 00021 Si le fichier existe d j 00022 if errno EEXIST 00023 00024 WriteString STDOUT Fichier deja existant voulez vous l ecraser o n 1 00025 do 00026 00027 c GetChar STDIN 00028 GetString STDIN SIZEBUFFER 00029 c char
85. points concernant la mani re de r diger notre code de nommer nos fonctions afin d avoir une criture plus coh rente Les diff rentes fonctions suppl mentaires savoir le r seau et l affichage en OpenGL sont int gr es au code de mani re conditionnelle l aide de ifdef Dans le Makefile gcc DWITHOPENGL gcc DWITHNETWORK Permettent d activer respectivement le code sp cifique l OpenGL et au r seau Mini projet C 2004 Morpion 3D 1 R partition du programme en diff rents fichiers Cahier des charges simples coord c init c jeu c main c menu c misc c screen c winner c global h Syst me de sauvegarde file c Intelligence artificielle ia c random c OpenGL displayglobal_opengl c displayS1 opengl c displayS2 opengl c font opengl c keyboard opengl c mouse opengl c opengl init c opengl h R seau client c network c server c network h Manipulation des coordonn es de pions Initialisation des donn es joueurs plateau D roulement du jeu s quentiel en mode texte v nementiel en mode OpenGL Gestion globale du programme Fonctions relatives l utilisation des menus Fonctions d entr e sortie Affichage texte du plateau D tection de fin de partie et de placement pour PIA En t te global du programme Fonctions de sauvegarde et de chargement de parties Menu IA et strat gie pour l IA Fonctions relatives la g n ration de chiffres
86. printf netbuf x u y u z u 00106 place x place y place z 00107 NetSend socket netbuf 20 00108 00109 endif 00110 On incr mente le nombre de coup joue 00111 joueur gt nbcoup 00112 On regarde si le joueur a gagne 00113 EOG IsWinner plateau joueur place 00114 ifdef WITHNETWORK 00115 if socket NO SOCKET amp amp joueur joueurl amp amp EOG 00116 00117 sleep 1 00118 NetSend socket EOG I won 12 00119 00120 endif 00121 while IEOG amp amp joueurl nbcoup joueur2 gt nbcoup lt NBX NBY NBZ 00122 EraseScreen 00123 WriteString STDOUT Morpion 3D realise par Savon et Seb 1 00124 WriteString STDOUT Pour quitter la partie tapez la lettre VOV pour sauvegarder la partie tapez la lettre VSV 2 00125 Display plateau joueurl joueur2 00126 if Goueurl nbcoup joueur2 gt nbcoup NBX NBY NBZ 00127 puts Egalite parfaite aucun joueur n a gagne apres cette partie tr s serree 00128 00129 else 00130 printf s a gagne en d coups n joueur gt nom joueur gt nbcoup 00131 WriteString STDOUT Appuyez sur ENTREE pour continuer 1 00132 GetString STDIN SIZEBUFFER 00133 return 00134 Mini projet C 2004 Morpion 3D 8 Coord c 00001 include global h 00002 00003 5222 ak kak ak kk kak ee eee ee D ak ak ak ak ak a 00004 ReadCoord 00005 Lit les coordonn es d une case et les renvoie 000
87. puis de parcourir les diff rents plans X Y Z ensuite le programme teste les diagonales de chaque plan Il reste enfin tester les diagonales du cube Cet ensemble de tests a t d velopp dans la fonction IsWinner du fichier winner c Cahier des charges n 2 Syst me de sauvegarde Fonctionnel La sauvegarde d une partie s effectue dans un fichier binaire il a t choisi d y sauvegarder le nom du joueur son identifiant son pion le nombre de coup qu il a jou et les diff rentes composantes de sa couleur en OpenGL Les informations du joueur courant sont sauvegard es en premier Le fichier porte une extension sav Cahier des charges n 3 Extensions Fonctionnel Nous avons opt pour une approche r seau du mode multi joueur en utilisant des sockets Le mode de connexion est le suivant TCP port 9999 L change des informations se fait au moyen d un protocole simple d taill plus loin dans la documentation Cahier des charges n 4 Le mode joueur contre ordinateur Fonctionnel Dans ce mode l un des joueurs est contr l par un algorithme qui lui permet de d terminer le meilleur coupa jouer pour gagner dans un premier temps puis pour bloquer l adversaire si ce n est pas possible L algorithme de cette recherche est d taill plus loin Mini projet C 2004 Morpion 3D II Strat gie de d veloppement 1 Organisation Nous avons d fini ensemble plusieurs
88. r2 gt nom char malloc SIZEBUFFER joueur2 gt nom GetString handle SIZEBUFFER printf a lu s s n joueurl gt nom joueur2 nom joueur2 gt id GetChar handle GetChar handle buffer GetString handle SIZEBUFFER joueur2 gt pion buffer buffer GetString handle SIZEBUFFER joueur2 gt nbcoup unsigned char atoi buffer buffer GetString handle SIZEBUFFER sscanf buffer f f f amp joueur2 gt couleur red amp joueur2 gt couleur green amp joueur2 gt couleur blue close handle return TRUE 60 Mini projet C 2004 Morpion 3D 14 la c 00001 include global h 00002 00003 ki 2 ak bk k ae ake ak eke a ak ke eke ake ak a ke ae ake ake ake ake ake ak ake ake ae ak ak ae ae ake eee eee ae ak AE ae ae ake ee eee ke ae ak ake ae ae ae ee eee ke ae ee eee eee eee ae ae ak ae ae e ake ake ake eee 3e ee ae ake ak ee 00004 MenulA 00005 Affiche un menu pour choisir si on compte jouer en premier ou si on laisse la main l IA N liO T 00007 void MenulA tplat plateau t joueur joueurA t joueur joueurB int argc char argv 00008 00009 intj 00010 00011 switch ChooseMenu DisplayMenu IAMENU TRUE 00012 00013 case JOUEURFIRST 00014 InitPlayer 1 joueurA 00015 InitlA joueurB 00016 00017 ifdef WITHOPENGL 00018 InitGIGame plateau joueurA joueurB NO SOCKET argc argv 00019 else 00020 TextGame plateau joueurA joueurB NO SOCKET
89. rapportLsurH znear zfar glFrustum left right bottom up near far glOrtho left right bottom up near far GL MODELVIEW permet de mod liser les transformations g om triques a appliquer a la sc ne que ce soit pour d placer les objets ou la cam ra dual On la s lectionne avec glMatrixMode GL MODELVIEW On peut la param trer avec les fonctions suivantes ou bien manuellement glTranslatef x y Z glRotatef angle x y Z glScalef x y zZz Pour faciliter le placement de la cam ra void gluLookAt GLdouble eyeX GLdouble eyeY GLdouble eyez GLdouble centerX GLdouble centerY GLdouble centerz GLdouble upX GLdouble upY GLdouble upz i Ces fonctions modifient la matrice GL MODELVIEW en cours en la multipliant droite par la matrice correspondant la transformation demand e glLoadIdentity permet de charger une matrice identit dans la matrice en cours Les piles de matrices Il existe en fait une pile de matrices pour manipuler GL MODELVIEW de m me pour GL PROJECTION 19 Mini projet C 2004 Morpion 3D La matrice utilis e un instant donn est celle situ e au sommet de la pile La manipulation des piles de matrices est r alis e l aide de glPopMatrix et glPushMatrix qui agissent sur la pile en cours ie GL_PROJECTION ou GL MODELVIEW glPushMatrix copie la matrice active ve
90. rojet C 2004 Morpion 3D Le clavier Une interaction v nementielle avec le clavier a t mise en place Ainsi dans le cas o les joueurs veulent sauvegarder la partie ils n ont qu appuyer sur la touche S qui ferme automatiquement la fen tre OpenGL et lance la fonction de sauvegarde Deux fonctions sont n cessaires la bonne gestion du clavier Une fonction regarde les touches classiques du clavier et une autre qui regarde les touches plus sp cifiques d un clavier comme les douze touches F1 F12 Ainsi pour fermer le programme il est possible d utiliser la combinaison de touches ALT F4 De m me si un joueur a gagn l appui sur n importe quelle touche nous ram nera au menu principal La souris Outil de base de notre application la souris est utilis e pour faire tourner le cube en 3D et ainsi pouvoir voir le cube sous tous les angles Elle est aussi utilis e pour valider une case Le joueur dans la deuxi me fen tre du jeu choisit la case sur laquelle il veut jouer et clique pour valider cette case Par un traitement de la position du clic on arrive retrouver les coordonn es de la case dans laquelle il a Jou et ainsi ins rer son pion Mais l encore deux modes de saisie s offrent au joueurs Si le joueur clique sur une case avec le bouton droit de la souris le programme enregistre le coup au titre d un essai et affiche la case s lectionn e sous une autre couleur pour permet
91. rs le sommet de la pile Cela permet de sauvegarder la matrice en cours glPopMatrix restaure la matrice situ e au sommet de la pile Ceci permet de revenir en arri re dans une configuration sauv e par glPushMatrix M thode pour placer les objets Les objets g om triques sont d finis dans un rep re li a l objet Placer l objet dans la sc ne c est amener le centre du rep re li l objet a l endroit voulu et l orienter correctement Les transformations appliqu es au rep re objet sont aussi appliqu es l objet Initialement rep re objet et rep re monde sont confondus GL_MODELVIEW identit On crit une suite de transformations afin d amener le rep re objet l endroit voulu dans le rep re monde La transformation 1 doit tre d finie relativement au rep re objet dans l tat transform par la suite des i 1 i mes pr c dentes transformations L ordre d criture du code est celui des transformations successives M thode pour placer la cam ra Rappelons que les placements des objets et de la cam ra sont duals puisque qu on agit sur la m me matrice GL MODELVIEW Un d placement de la cam ra s interpr te comme une transformation appliquer tous les objets de la sc ne par cons quent on crit la transformation de l espace correspondante en premier dans le code Une fois install e la transformation cam ra voulue doit tre sauv e avec glPushMatrix si l on s
92. rtie du code de la fonction char i nb unsigned char cmpt cmpt 0 nb 0 for i NBPIONSALIGN 1 i lt NBPIONSALIGN 1 i if lastplay x i lt O lastplay x i gt NBX continue if ContenuTab tab lastplay x i lastplay y lastplay z joueur nb nb else nb 0 if nb gt NBPIONSALIGN cmpt break Cette boucle for teste un alignement suivant les x A chaque pion trouv on incr mente nb jusqu ce que nb soit sup rieure ou gale NBPIONSALIGN A ce moment la si on a atteint le nombre de pions aligner on incr mente cmpt cmpt repr sente le nombre de fois o l on a gagn en jouant sur cette case le nombre d alignement effectu On remarque le test de validit de l quation au d but de la boucle Ce test est essentiel pour ne pas d border du tableau ou tester sur des cases qui ne doivent pas l tre Pour v rifier qu il y a un gagnant il ne reste plus qu r it rer cette boucle for sur chaque alignement possible selon les x y ou z ou encore selon les plans xy xz ou yz ou encore selon les diagonales particuli res du cube 11 Mini projet C 2004 Morpion 3D VIII Exemples de jeux Ci dessous deux exemples de parties finies avec un vainqueur Nous avons essay de faire un match nul mais n y sommes pas parvenus L affichage d un vainqueur aurait pu se faire plus joliment mais le manque d enthousiasme face un objectif purement esth
93. rver sin_family AF INET Type de famille d adresse internet 00025 server sin_addr s_addr INADDR ANY toute interface 00026 server sin_port htons 9999 port 00027 00028 00029 unsigned char retry 0 00030 dol 00031 if 1 bind fd struct sockaddr amp server sizeof server 00032 00033 printf Impossible d attacher le socket s n 00034 strerror errno TI Mini projet C 2004 Morpion 3D 00035 if retry gt MAXNETRETRY 00036 return FALSE 00037 else 00038 sleep 3 00039 00040 else 00041 00042 puts Socket attach e 00043 break 00044 00045 while 1 00046 00047 00048 00049 if 1 listen fd 1 00050 00051 return FALSE 00052 00053 else puts Socket en coute 00054 newfd accept fd struct sockaddr amp remote socklen_t amp remotesize 00055 if newfd l 00056 00057 printf Connexion chou e s n 00058 strerror errno 00059 return FALSE 00060 00061 00062 printf Connexion tablie avec s n inet_ntoa remote sin_addr 00063 return TRUE 00064 00065 00066 00067 2 2 ak kk k ake ak ak ake ake a eee a ak eee ke eee ee eee eee ke eee ee eee eee ke eee ee eee eee ke ee eee eee eee ke ee eee ee 00068 StopServer 00069 Arr t du serveur par fermeture du socket 00070 ke ake a ek ak ake ae ele ke ae ake ke ae ake ae ee eee ke ee ee ee ee eee ake eee ae ae ae ee eee ake eee eee ee eee ke eee a
94. ssible de se connecter s n 00032 strerror errno 00033 return FALSE 00034 00035 puts Socket connect e 00036 return TRUE 00037 00038 00039 00040 2 2 ak kk ek ae ak ae eke ake ak ke ake ake ske ste E ee eee eee ke eee fe eee eee ke ee eee eee eee ke ee eee ee 00041 StopClient 00042 Interrompt la connexion du client 00043 ke ake ak ek ske he ae ak ak ke ae este ake ake ae ee eee eee ee ee ee eee ke eee ake ae ae ee eee ke ae ee eee ee eee ke eee ake ae ae eee eee eee ako ak ak ke 00044 void StopClient int fd 00045 00046 shutdown fd 2 00047 23 server c 00001 include network h 00002 int fd Socket permanent du serveur 00003 00004 Plak ak ak ak ak ak ae ak ak ak eee eee D D D ak ak ke kk ak a a 00005 RunServer 00006 Cr un socket et place le programme en attente d une connexion 00007 43 ak ak ak ak ake ak ake a a ak a ee 346 ak ee ae ake ae a a ae ae ee eee ee ke ke ke ke 34e ae 34 eee eee ee ee ae a ke ke ae ae ake ae eee eee ee ee ak ok ok ok ok 2k 00008 char RunServer int newfd 00009 00010 struct sockaddr in server remote 00011 int remotesize sizeof struct sockaddr in 00012 00013 fd socket PF INET SOCK STREAM 6 00014 ipv4 flux TCP 00015 if fd 1 00016 00017 printf Impossible de cr er le socket s n 00018 strerror errno 00019 return FALSE 00020 00021 00022 puts Socket cr 00023 00024 se
95. tre au joueur de v rifier qu il s agit bien de la case o il voulait jouer Et oui la 3D joue de si vilains tours nos yeux Tandis que si il clique avec le bouton gauche de la souris sur une case son coup est enregistr et on passe au joueur suivant Le cube et sa rotation On calcule les d placements horizontaux et verticaux de la souris lorsque le clique gauche est enfonc et que la souris se situe dans la fen tre du cube En fonction de la valeur de ces d placements on fait appel la fonction glRotatef qui effectue une op ration de rotation sur la matrice repr sentant notre cube et on affiche cette matrice l cran On pourra remarquer que le cube n est pas r ellement cube puisque la dimension de ses c t s d pend de la dimension de la hauteur et de la largeur de la fen tre On dira donc plut t qu il s agit d un pav Le dessin d un petit cube du gros cube se fait en six tapes A chacune de ces tapes nous dessinons une face du cube Au lieu de proc der de la sorte nous aurions pu utiliser les possibilit s offertes par GLUT mais n y ayant pas pens au d but nous ne sommes pas revenus sur cette partie du code 22 Mini projet C 2004 Morpion 3D Les difficult s rencontr es avec OpenGL De nombreuses difficult s ont t rencontr es durant ce mini projet La plus grosse de ces difficult s l utilisation d OpenGL dans son ensemble En effet nous avions commenc par r
96. u tour suivant et l IA joue alors sur une de ces cases e Si ce n est toujours pas le cas IA regarde si le joueur peut aligner deux fois deux pions et joue sur une des cases ou cela est possible e Dans tous les autres cas de figures je doute qu il y en est beaucoup moins d en faire vraiment expr s et encore l IA joue sur une des cases qui lui offre le plus de possibilit s d alignements sachant que la case du milieu est prise Am lioration de IA Pour am liorer cette IA il aurait t possible de ne pas renvoyer une position au hasard mais de sp cifier par l interm diaire de flags les cases les plus avantageuses Prenons par exemple le cas ou l IA ne peut pas gagner mais que le joueur adverse le peut Pourquoi ne pas jouer sur une case ou l adversaire peut gagner et jouer en m me temps sur une case qui nous permet d aligner deux fois deux pions De m me dans l ventualit o l on contre une possibilit de victoire ne devrait on pas jouer sur la case la plus visible comme un alignement en droite horizontale ou verticale plut t que de bloquer une victoire par diagonale que le joueur risque de ne pas voir Mini projet C 2004 Morpion 3D Statistiques sur l IA Apr s tude il s av re que si l IA commence jouer elle ne peut que gagner en 4 coups maximums De m me si le joueur commence ailleurs qu en la case centrale PIA ne peut que gagner le temps d pend de la fa on
97. ucture t color Cette structure est d di e l affichage graphique elle permet d enregistrer la couleur d un pion dans le mode RGB II faut cependant noter que le RGB est quelque peu modifi Ce ne sont plus des entiers de 0 255 mais des flottants de 0 0 1 0 typedef struct t color float red green blue Composante RGB d une couleur KE color Les coordonn es Pour faciliter les passages de coordonn es entre les fonctions nous avons galement cr une structure COORD qui stockera les abscisses ordonn es et hauteurs d une case ou d un pion typedef struct COORD unsigned char x y z Abscisse ordonn e et hauteur COORD Ces trois structures seront utilis es tout au long du jeu pour faciliter le passage en argument certaine fonction et dans un souci de meilleure lisibilit du code Les menus Nous avons une derni re structure quelque peu part pour d finir nos menus la structure t_menu typedef struct t menu char titre Titre du menu char tabmenu LENMENUMAX Les diff rents menus propos s int lenmenu Le nombre de menu propos La valeur LENMENUMAX est d finie en define et correspond au nombre maximum de caract res que peut contenir un l ment du menu Cette derni re structure est utilis e pour rendre plus g n rales certaines fonctions d affichage mais nous verrons ceci plus en d tails ult rieurement Mini projet C 2004 Mor
98. une case pas occup e et dans le tableau 00124 if IsNoPion tab temp amp amp temp x lt NBX 00125 place cmpt temp 00126 00127 temp pion 00128 for i 1 i lt l i 00129 00130 if 0 00131 continue 00132 temp y char pion y i 00133 if IsNoPion tab temp amp amp temp y lt NBY 00134 place cmpt temp 00135 00136 temp pion 00137 for U 1 i lt l i 00138 00139 if i 0 00140 continue 00141 temp z char pion z i 00142 if IsNoPion tab temp amp amp temp z lt NBZ 00143 place cmpt temp 00144 00145 return place Randomize O int empt 1 00146 00147 00148 00149 Jesse ae ak ke ake ke ske ske ke eee ke eee ake ae eee eee eee ee eee eee ke ee ee eee ee 00150 SelectBestPlace K 00151 Renvoie les coordonn es d un des meilleurs 00152 emplacements jouer pour l IA S 00153 ak AA ake ak h E AA HEAR a ak a Be a k a A ae ke e BE h oak AR A A E ae ake El 00154 COORD SelectBestPlace char tab 00155 00156 COORD place 00157 unsigned char i j 00158 00159 Ce sont ces tableaux qui limitent l IA un jeu par 3 3 3 cases 00160 Ce tableau de coordonees contient les cases qui ont 6 possibilites 00161 d alignement si la case MIDDLE est prise 46 Mini projet C 2004 Morpion 3D 00162 COORD tab6 8 00163 00164 00165 00166 Ce tableau de coordonees contient les cases qui ont
99. ur joueurl t joueur joueur2 00236 ia h 00237 void MenulA tplat plateau t joueur joueurA t joueur joueurB int argc char argv 00238 COORD FindCoordIA char tab t joueur IA t_joueur adverse 00239 init c 00240 void InitMat tplat tab 00241 void InitPlayer char id t joueur joueur 00242 void InitIA t joueur joueur 00243 jeu c 00244 void InitGlGame tplat tab t joueur joueurA t joueur joueurB int socket int argc char argv 00245 void Game tplat plateau COORD select t joueur joueurl t joueur joueur2 00246 void TextGame tplat plateau t joueur joueurl t joueur joueur2 int socket 00247 main c 00248 int main int argc char argv 00249 inline void restart 00250 menu c 00251 int DisplayMenu t_menu menu char ERASE 00252 unsigned char ChooseMenu int lenmenu 00253 misc c 00254 int WriteChar int handle char car 00255 int WriteString int handle char buf int ret 00256 char GetChar int handle 00257 char GetString int handle int taille 00258 char CompleteExtension char nom char extension 00259 char CopyTab char destination const char source 00260 void Verify void 00261 random c 00262 void InitRandom void 00263 int Randomize int inf int sup 00264 screen c 00265 void Display tplat tab t joueur joueurl t joueur joueur2 00266 winner c 0026
100. yboard_opengl c 00073 void processSpecialKeys int touche int x int y 00074 void ProcessNormalKeys unsigned char key int x int y 00075 mouse_opengl c 00076 void Mousel int button int state int x int y 00077 void MouseMotion1 int x int y 00078 void Mouse2 int button int state int x int y 00079 opengl init c 00080 void InitLibGlut int argc char argv 00081 void InitWindow void 00082 void DestroyWindow void 00083 00084 endif 3 Network h 00001 ifdef WITHNETWORK 00002 include global h 00003 endif 00004 Sinon l on compile les programmes de test des fonctions r seau 00005 include lt sys socket h gt 00006 include lt netinet in h gt 00007 00008 include lt arpa inet h gt inet_ntoa inet_pton 00009 00010 D finitions 00011 define MAXNETRETRY 10 Nombre maximum de tentative d attachement du socket 00012 00013 Serveur c gi 00014 char RunServer int newfd 00015 void StopServer int newfd 00016 00017 Client c k 00018 char InitClient int fd 00019 char Connect int fd char RemotelIP 00020 void StopClient int fd 00021 00022 Network c KC 00023 char NetSend int newfd char buffer unsigned int bufsize 00024 char NetReceive int newfd char buffer unsigned int bufsize 33 Mini projet C 2004 Morpion 3D 4 Main c 00001 include global h 00002 00003 t joueur joueurl joueur2

Download Pdf Manuals

image

Related Search

Related Contents

Mode d`emploi du DRU Digital Remote Unit (Voies digitales    User's Guide  Extron electronic Extron Electronics Switch XTP PI 400 User's Manual  Hotte de cuisine  Lenovo IdeaCentre C260  LG 20EN33S  2 - Omron Healthcare  Le Chemin Estelle de Compiègne à Paris  Chemlok 205、ロード・ファー・イーストInc  

Copyright © All rights reserved.
Failed to retrieve file