11#define _CRT_SECURE_NO_WARNINGS
2+ #include "Jogo da Velha.h"
3+ #include "ai.h"
4+ #include "minimax.h"
25#include <stdio.h>
36#include <stdlib.h>
47#include <string.h>
5- #include "Jogo da Velha.h"
6- #include "ai.h"
78
89/*verifica se alguém venceu e retorna um array[3]
910caso verdade, retorna {1, W, C},
@@ -123,17 +124,9 @@ int* winVerifyer(int grid[3][3])
123124e retorna as 3 posições, ou menos*/
124125int * * freeCells (int grid [3 ][3 ])
125126{
126- static int freePositions [4 ][2 ];
127+ static int freePositions [4 ][2 ] = { 0 } ;
127128 int count1 ;
128129
129- freePositions [3 ][0 ] = -1 ;
130- freePositions [3 ][1 ] = -1 ;
131- freePositions [2 ][0 ] = -1 ;
132- freePositions [2 ][1 ] = -1 ;
133- freePositions [1 ][0 ] = -1 ;
134- freePositions [1 ][1 ] = -1 ;
135- freePositions [0 ][0 ] = -1 ;
136- freePositions [0 ][1 ] = -1 ;
137130 count1 = 0 ;
138131
139132 for (int i = 0 ; i < 3 ; i ++ )
@@ -158,16 +151,16 @@ int** freeCells(int grid[3][3])
158151 }
159152 }
160153 }
161- if (freePositions [2 ][0 ] == -1 && freePositions [2 ][1 ] == -1 && freePositions [1 ][0 ] == -1 && freePositions [1 ][1 ] == -1 && freePositions [0 ][0 ] == -1 && freePositions [0 ][1 ] == -1 )
154+ if (freePositions [2 ][0 ] == 0 && freePositions [2 ][1 ] == 0 && freePositions [1 ][0 ] == 0 && freePositions [1 ][1 ] == 0 && freePositions [0 ][0 ] == 0 && freePositions [0 ][1 ] == 0 )
162155 {
163- freePositions [3 ][0 ] = 0 ;
164- freePositions [3 ][1 ] = 0 ;
165- freePositions [2 ][0 ] = 0 ;
166- freePositions [2 ][1 ] = 0 ;
167- freePositions [1 ][0 ] = 0 ;
168- freePositions [1 ][1 ] = 0 ;
169- freePositions [0 ][0 ] = 0 ;
170- freePositions [0 ][1 ] = 0 ;
156+ freePositions [3 ][0 ] = 3 ;
157+ freePositions [3 ][1 ] = 3 ;
158+ freePositions [2 ][0 ] = 3 ;
159+ freePositions [2 ][1 ] = 3 ;
160+ freePositions [1 ][0 ] = 3 ;
161+ freePositions [1 ][1 ] = 3 ;
162+ freePositions [0 ][0 ] = 3 ;
163+ freePositions [0 ][1 ] = 3 ;
171164 }
172165 return freePositions ;
173166}
@@ -709,7 +702,7 @@ int main(int argc, char* argv[])
709702 if (grid [playCoordinates [0 ]][playCoordinates [1 ]] != 0 )
710703 {
711704 printf ("\nEssa casa já foi marcada!\n" );
712- system ( "pause" );
705+ if ( getchar () != NULL );
713706 continue ;
714707 }
715708 if (player == 1 )
@@ -727,6 +720,14 @@ int main(int argc, char* argv[])
727720 memcpy (freeCellsReturn , freeCells (grid ), sizeof (freeCellsReturn ));
728721 if (freeCellsReturn [0 ][0 ] != -1 )
729722 {
723+ if (freeCellsReturn [0 ][0 ] = 3 )
724+ {
725+ gridPrinter (gridTiedReturner (grid , 1 ), 2 );
726+ printf ("\nDeu velha...\n" );
727+ tie = 1 ;
728+ break ;
729+ }
730+
730731 if (tieVerifyer (grid , player , insertionPreference ) == 1 )
731732 {
732733 memcpy (grid , gridTiedReturner (grid , 1 ), sizeof (grid ));
@@ -746,6 +747,11 @@ int main(int argc, char* argv[])
746747
747748 if (player == 1 )
748749 {
750+ int difficulty ;
751+ printf ("Selecione sua dificuldade: 1- Fácil, 2- Normal, 3- Impossível\n" );
752+ if (scanf (" %i" , & difficulty ) == 1 );
753+ difficulty -- ;
754+ aiStart (grid , - symbolPreference );
749755 while (keepPlaying != 'n' && keepPlaying != 'N' )
750756 {
751757 for (int i = 0 ; i < 3 ; i ++ )
@@ -763,44 +769,62 @@ int main(int argc, char* argv[])
763769 while (win == 0 && tie == 0 )
764770 {
765771 printf ("\033[2J" ); //funciona como system("clear") ou system("cls");
766- gridPrinter (grid , 2 );
767772 if (player == 3 )
768773 player = 1 ;
769- printf ("Jogue, Jogador %i\n" , player );
770- if (insertionPreference == 1 )
771- {
772- if (scanf ("%i" , & playPosition ) == 1 );
773- memcpy (playCoordinates , convertToCoordinate (playPosition ), sizeof (playCoordinates ));
774- }
775- if (insertionPreference == 2 )
776- {
777- if (scanf ("%i %i" , & playCoordinates [0 ], & playCoordinates [1 ]) == 2 );
778- playCoordinates [0 ]-- ;
779- playCoordinates [1 ]-- ;
780- }
781- if (playCoordinates [0 ] < 0 || playCoordinates [1 ] < 0 )
782- break ;
783- if (grid [playCoordinates [0 ]][playCoordinates [1 ]] != 0 )
774+ if (player == 1 )
784775 {
785- printf ("\nEssa casa já foi marcada!\n" );
786- system ("pause" );
787- continue ;
776+ gridPrinter (grid , 2 );
777+ printf ("Jogue, Jogador!\n" );
778+ if (insertionPreference == 1 )
779+ {
780+ if (scanf ("%i" , & playPosition ) == 1 );
781+ memcpy (playCoordinates , convertToCoordinate (playPosition ), sizeof (playCoordinates ));
782+ }
783+ if (insertionPreference == 2 )
784+ {
785+ if (scanf ("%i %i" , & playCoordinates [0 ], & playCoordinates [1 ]) == 2 );
786+ playCoordinates [0 ]-- ;
787+ playCoordinates [1 ]-- ;
788+ }
789+ if (playCoordinates [0 ] < 0 || playCoordinates [1 ] < 0 )
790+ break ;
791+ if (grid [playCoordinates [0 ]][playCoordinates [1 ]] != 0 )
792+ {
793+ printf ("\nEssa casa já foi marcada!\n" );
794+ if (getchar () != NULL );
795+ continue ;
796+ }
788797 }
789798 if (player == 1 )
790799 grid [playCoordinates [0 ]][playCoordinates [1 ]] = symbolPreference ;
791800 if (player == 2 )
801+ {
802+ memcpy (playCoordinates , aiPlay (grid , difficulty ), sizeof (playCoordinates ));
792803 grid [playCoordinates [0 ]][playCoordinates [1 ]] = - symbolPreference ;
804+ }
805+
793806 if ((winVerifyer (grid ))[0 ] == 1 )
794807 {
795808 gridPrinter (grid , 5 );
796- printf ("\nJogador %i venceu!" , player );
809+ if (player == 1 )
810+ printf ("\nVocê venceu!" );
811+ if (player == 2 )
812+ printf ("\nVocê Perdeu!\n" );
797813 win = 1 ;
798814 break ;
799815 }
800816 player ++ ;
801817 memcpy (freeCellsReturn , freeCells (grid ), sizeof (freeCellsReturn ));
802818 if (freeCellsReturn [0 ][0 ] != -1 )
803819 {
820+ if (freeCellsReturn [0 ][0 ] == 3 )
821+ {
822+ gridPrinter (grid , 2 );
823+ printf ("\nDeu velha...\n" );
824+ tie = 1 ;
825+ break ;
826+ }
827+
804828 if (tieVerifyer (grid , player , insertionPreference ) == 1 )
805829 {
806830 memcpy (grid , gridTiedReturner (grid , 1 ), sizeof (grid ));
0 commit comments