Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <time.h>
- #define SERVER_ADDRESS "127.0.0.1"
- #define SERVER_PORT 8888
- #define OPEN 1
- #define CLOSE 0
- // Função para imprimir o tabuleiro
- void imprimirTabuleiro(char tabuleiro[3][3]) {
- printf("\n 1 | 2 | 3\n");
- printf(" -----------\n");
- printf(" 4 | 5 | 6\n");
- printf(" -----------\n");
- printf(" 7 | 8 | 9\n\n");
- printf("Tabuleiro atual:\n\n");
- printf(" %c | %c | %c\n", tabuleiro[0][0], tabuleiro[0][1], tabuleiro[0][2]);
- printf(" -----------\n");
- printf(" %c | %c | %c\n", tabuleiro[1][0], tabuleiro[1][1], tabuleiro[1][2]);
- printf(" -----------\n");
- printf(" %c | %c | %c\n\n", tabuleiro[2][0], tabuleiro[2][1], tabuleiro[2][2]);
- }
- // Função para verificar se há um vencedor
- char verificarVencedor(char tabuleiro[3][3]) {
- // Verificar linhas e colunas
- for (int i = 0; i < 3; i++) {
- if (tabuleiro[i][0] == tabuleiro[i][1] && tabuleiro[i][1] == tabuleiro[i][2] && tabuleiro[i][0] != ' ')
- return tabuleiro[i][0];
- if (tabuleiro[0][i] == tabuleiro[1][i] && tabuleiro[1][i] == tabuleiro[2][i] && tabuleiro[0][i] != ' ')
- return tabuleiro[0][i];
- }
- // Verificar diagonais
- if (tabuleiro[0][0] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][2] && tabuleiro[0][0] != ' ')
- return tabuleiro[0][0];
- if (tabuleiro[0][2] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][0] && tabuleiro[0][2] != ' ')
- return tabuleiro[0][2];
- // Verificar empate
- int empate = 1;
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- if (tabuleiro[i][j] == ' ') {
- empate = 0;
- break;
- }
- }
- if (!empate)
- break;
- }
- if (empate)
- return 'D'; // Indica empate
- return ' '; // Se nenhum vencedor ainda
- }
- // Função para verificar se a célula está vazia
- int celulaVazia(char tabuleiro[3][3], int posicao) {
- int linha = (posicao - 1) / 3;
- int coluna = (posicao - 1) % 3;
- return tabuleiro[linha][coluna] == ' ';
- }
- // Função para fazer a jogada do computador
- int jogadaComputador(char tabuleiro[3][3]) {
- printf("Turno do computador (O):\n");
- int posicao;
- // Primeiro, verifique se há uma jogada vencedora disponível
- for (posicao = 1; posicao <= 9; posicao++) {
- if (celulaVazia(tabuleiro, posicao)) {
- int linha = (posicao - 1) / 3;
- int coluna = (posicao - 1) % 3;
- tabuleiro[linha][coluna] = 'O';
- if (verificarVencedor(tabuleiro) == 'O')
- return posicao; // Jogada vencedora encontrada
- tabuleiro[linha][coluna] = ' '; // Desfazer a jogada
- }
- }
- // Em seguida, verifique se há uma jogada do oponente para bloquear
- for (posicao = 1; posicao <= 9; posicao++) {
- if (celulaVazia(tabuleiro, posicao)) {
- int linha = (posicao - 1) / 3;
- int coluna = (posicao - 1) % 3;
- tabuleiro[linha][coluna] = 'X';
- if (verificarVencedor(tabuleiro) == 'X') {
- tabuleiro[linha][coluna] = 'O'; // Bloquear a jogada do oponente
- return posicao;
- }
- tabuleiro[linha][coluna] = ' '; // Desfazer a jogada
- }
- }
- // Se não houver jogadas vencedoras ou de bloqueio, escolha uma célula aleatória
- srand(time(NULL)); // Semente do gerador de números aleatórios
- do {
- posicao = rand() % 9 + 1;
- } while (!celulaVazia(tabuleiro, posicao));
- int linha = (posicao - 1) / 3;
- int coluna = (posicao - 1) % 3;
- tabuleiro[linha][coluna] = 'O';
- return posicao;
- }
- void delay(int delayTime) {
- usleep(delayTime * 1000);
- }
- void initSocket(int* sock, char* buffer){
- struct sockaddr_in serv_addr;
- // Create a socket
- if ((*sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- printf("\n Socket creation error \n");
- exit(1);
- }
- // Set the server address and port
- memset(&serv_addr, '0', sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_port = htons(SERVER_PORT);
- // Convert IPv4 and IPv6 addresses from text to binary form
- if (inet_pton(AF_INET, SERVER_ADDRESS, &serv_addr.sin_addr) <= 0) {
- printf("\n Invalid address/ Address not supported \n");
- exit(1);
- }
- // Connect to the server
- if (connect(*sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
- printf("\n Connection Failed \n");
- exit(1);
- }
- }
- void movJoints(int sock, char* buffer, float j1, float j2, float j3, float j4, float j5,float j6, int state){
- sprintf(buffer, "%f,%f,%f,%f,%f,%f,%d", j1, j2, j3, j4, j5, j6,state);
- send(sock, buffer, strlen(buffer), 0);
- int valread = read(sock, buffer, 2048);
- printf("Result: %s\n", buffer);
- }
- void meumovJoints(int sock, char* buffer, float* j, int state){
- sprintf(buffer, "%f,%f,%f,%f,%f,%f,%d", j[0], j[1], j[2], j[3], j[4], j[5],state);
- send(sock, buffer, strlen(buffer), 0);
- int valread = read(sock, buffer, 2048);
- printf("Result: %s\n", buffer);
- }
- void pegarPeca(int sock){
- //int sock = 0;
- char buffer[2048] = {0};
- float PosPrePeca[6]= {-1.58,-0.26, -0.89,-0.07,0.18,0.08};
- float PosPeca[6] = {-1.60,-0.50,-0.77,-0.07,0.18,0.09};
- meumovJoints(sock, buffer, PosPrePeca, OPEN);
- delay(1000);
- meumovJoints(sock, buffer, PosPeca, OPEN);
- delay(350);
- meumovJoints(sock, buffer, PosPeca, CLOSE);
- delay(350);
- meumovJoints(sock, buffer, PosPrePeca, CLOSE);
- delay(150);
- }
- int main(int argc, char *argv[]) {
- //variaveis para conexcao com o robo NAO MEXER
- int sock = 0;
- char buffer[2048] = {0};
- //conexao com o robo NAO MEXER
- initSocket(&sock, buffer);
- //Programe aqui ---------------------------------------------------
- float Pos1[6] = {-0.25, -0.66, -0.46, -0.18, -0.43, -0.03};
- float Pos2[6] = {-0.05,-0.63,-0.48,-0.03,-0.51,-0.18};
- float Pos3[6] = {0.18,-0.62,-0.45,0.04,-0.49,-0.05};
- float Pos4[6] = {-0.22,-0.81,-0.12,-0.10,-0.60,-0.16};
- float Pos5[6] = {-0.05, -0.75, -0.23, 0.00, -0.49, -0.04};
- float Pos6[6] = {0.13,-0.80,-0.14,-0.03,-0.60,-0.18};
- float Pos7[6] = {-0.19, -0.90,0.06,-0.12,-0.49,-0.07};
- float Pos8[6] = {-0.03, -0.93, 0.08, -0.03, -0.49, 0.06};
- float Pos9[6] = {0.12, -0.93, 0.07, 0.11, -0.49, -0.04};
- float PosPrePeca[6]= {-1.58,-0.26, -0.89,-0.07,0.18,0.08};
- float PosPeca[6] = {-1.60,-0.50,-0.77,-0.07,0.18,0.09};
- float posicoes[11][6]= {{-0.25, -0.66, -0.46, -0.18, -0.43, -0.03},
- {-0.05,-0.63,-0.48,-0.03,-0.51,-0.18},
- {0.18,-0.62,-0.45,0.04,-0.49,-0.05},
- {-0.22,-0.81,-0.12,-0.10,-0.60,-0.16},
- {-0.05, -0.75, -0.23, 0.00, -0.49, -0.04},
- {0.13,-0.80,-0.14,-0.03,-0.60,-0.18},
- {-0.19, -0.90,0.06,-0.12,-0.49,-0.07},
- {-0.03, -0.93, 0.08, -0.03, -0.49, 0.06},
- {0.12, -0.93, 0.07, 0.11, -0.49, -0.04},
- {-1.58, -0.26, -0.89,-0.07,0.18,0.08},
- {-1.60,-0.50,-0.77,-0.07,0.18,0.09}}; //de 1 pra 9 e depois a pré-peça e peça
- char tabuleiro[3][3] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
- printf("Bem-vindo ao Jogo da Velha!\n");
- printf("Você é o jogador X. Faça sua jogada digitando um número de 1 a 9 correspondente à posição no tabuleiro.\n");
- while (1) {
- imprimirTabuleiro(tabuleiro);
- // Verificar se houve um vencedor ou empate
- char resultado = verificarVencedor(tabuleiro);
- if (resultado != ' ') {
- if (resultado == 'D')
- printf("Empate!\n");
- else if (resultado == 'X')
- printf("Parabéns! Você venceu!\n");
- else
- printf("O computador venceu!\n");
- break;
- }
- // Obter a jogada do jogador
- int posicao;
- printf("Sua vez (X), digite sua jogada (1 a 9): ");
- scanf("%d", &posicao);
- // Verificar se a jogada é válida
- if (posicao < 1 || posicao > 9 || !celulaVazia(tabuleiro, posicao)) {
- printf("Jogada inválida! Tente novamente.\n");
- continue;
- }
- pegarPeca(sock);
- meumovJoints(sock, buffer, posicoes[posicao-1], OPEN); //jogada do humano feita pelo braço robótico
- // Atualizar o tabuleiro com a jogada do jogador
- int linha = (posicao - 1) / 3;
- int coluna = (posicao - 1) % 3;
- tabuleiro[linha][coluna] = 'X';
- // Verificar se houve um vencedor ou empate após a jogada do jogador
- resultado = verificarVencedor(tabuleiro);
- if (resultado != ' ')
- continue;
- // Jogada do computador
- int jogada_pc = jogadaComputador(tabuleiro);
- printf("O computador jogou na posição: %d\n", jogada_pc);
- pegarPeca(sock);
- meumovJoints(sock, buffer, posicoes[jogada_pc-1], OPEN);
- }
- imprimirTabuleiro(tabuleiro);
- return 0;
- //-----------------------------------------------------------------
- // Encerra a conexao NAO MEXER
- close(sock);
- return 0;
- }
Add Comment
Please, Sign In to add comment