int put_symbole(char **grille, char symbole) { int lignes; int colones; int somme; lignes = 0; colones = 0; somme = 0; while (42) { write(1, "\nVeuillez donner les numeros de la ligne et de la colonne :", 59); scanf("%d %d", &colones, &lignes); if ((lignes > 0) && (lignes <= NBLIGNES) && (colones>0) && (colones <= NBCOLONES)) { lignes--; colones--; if (grille[lignes][colones] != ' ') write(1, "La case a deja ete remplie.", 27); else { grille[lignes][colones] = symbole; system("clear"); aff_grille(grille); somme = somme + grille[lignes][colones]; if (somme == 747 || somme == 756) { system("clear"); write(1, "\n\nEGALITE\n\n", 11); exit (0); } test_winner(grille, symbole); if (symbole == 'O') symbole = 'X'; else symbole = 'O'; } } else { write(1, "Indice de ligne ou colonne incorrect.", 37); lignes = 0; colones = 0; put_symbole(grille, symbole); } } }
///Runs all test-functions in order bool run_full_test(void) { bool result = true; // ---------- CHECK WINNER ---------- // int winner_matrix[3][8][8] = {{ {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{2, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}; int winner_code[3] = {0,1,2}; for (int i = 0; i < 3; i++) { result = test_winner(winner_matrix[i], winner_code[i]); } // ---------- CHECK TURN VALID ---------- // int turnvalid_matrix[6][8][8] = { { {1, 0, 2, 0, 0, 1, 1, 1}, {0, 0, 2, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 1, 2, 2}, {2, 2, 0, 2, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 2, 0}, {0, 0, 0, 2, 1, 1, 0, 2}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 1} }, { {1, 0, 2, 0, 0, 1, 1, 1}, {0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 2, 0, 0, 2, 1, 1}, {0, 0, 0, 2, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 2, 0}, {0, 0, 0, 2, 1, 1, 0, 2}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 1} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 2, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 1, 0, 0, 2, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0}, {2, 0, 1, 2, 0, 2, 0, 0}, {0, 2, 0, 2, 2, 2, 2, 2}, {0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 2, 2, 2}, {0, 2, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 1, 0, 0} }, { {2, 1, 0, 0, 2, 1, 1, 1}, {0, 2, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 2, 0, 0, 0, 1}, {0, 1, 1, 1, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 2}, {0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 0, 0, 0, 0, 2, 0}, {1, 1, 2, 0, 0, 2, 2, 1} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} } }; int turnvalid_player[6] = {1, 2, 2, 1, 2, 1}; int turnvalid_pos[6][2] = { {2, 3}, {0, 3}, {4, 3}, {3, 4}, {3, 5}, {3, 4} }; bool turnvalid_valid[6] = {0, 0, 0, 1, 1, 0}; for (int i = 0; i < 6; i++) { // TODO: Call the check function result = test_turn_valid(turnvalid_matrix[i], turnvalid_player[i], turnvalid_pos[i][0], turnvalid_pos[i][1], turnvalid_valid[i]); } // ---------- CHECK EXECUTE TURN ---------- // int executeturn_matrix_in[9][8][8] = { { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 2, 2}, {2, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 2, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 2, 0, 2, 0, 0}, {0, 0, 0, 2, 2, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 2, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 2, 0, 2, 0, 0}, {0, 0, 0, 2, 2, 0, 0, 0}, {0, 1, 2, 0, 2, 2, 1, 0}, {0, 0, 0, 2, 2, 0, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 2, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 2, 1}, {1, 0, 1, 1, 2, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} } }; int executeturn_matrix_out[9][8][8] { { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 2, 2}, {2, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 2, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 2, 0, 1, 0, 0}, {0, 0, 0, 2, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 2, 0, 0, 0, 0}, {0, 0, 0, 2, 0, 1, 0, 0}, {0, 0, 0, 2, 1, 0, 0, 0}, {0, 0, 0, 2, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0}, {0, 0, 0, 0, 2, 0, 0, 0}, {0, 0, 0, 2, 0, 0, 0, 0}, {0, 0, 2, 1, 1, 1, 1, 0}, {0, 0, 2, 0, 0, 0, 0, 0}, {0, 0, 2, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 2, 1}, {1, 2, 2, 2, 2, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} } }; int executeturn_player[9] = {1, 2, 2, 1, 2, 1, 1, 2, 2}; int executeturn_pos[9][2] = { {2, 3}, {0, 3}, {4, 3}, {3, 4}, {3, 5}, {3, 4}, {3, 4}, {2, 4}, {1, 4} }; for (int i = 0; i < 9; i++) { // TODO: Call the check function result = test_execute_turn(executeturn_matrix_in[i], executeturn_matrix_out[i], executeturn_player[i], executeturn_pos[i][0], executeturn_pos[i][1]); } // ---------- CHECK POSSIBLE TURNS ---------- // int possibleturns_matrix[2][8][8] { { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 2, 0, 0, 0}, {0, 0, 0, 2, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 2, 1, 0, 0, 0}, {0, 0, 0, 2, 1, 1, 0, 0}, {0, 0, 0, 2, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} } }; int possibleturns_player[2] = {1, 1}; int possibleturns_count[2] = {4, 5}; for (int i = 0; i < 2; i++) { // TODO: Call the check function result = test_possible_turns(possibleturns_matrix[i], possibleturns_player[i], possibleturns_count[i]); } return result; }
void zeromq_thread() { { void* objectContext = zmq_ctx_new(); void* objectSocket = zmq_socket(objectContext, ZMQ_PAIR); { char charZeromq[1024] = { }; sprintf(charZeromq, "tcp://localhost:%d", main_intZeromq); if (zmq_connect(objectSocket, charZeromq) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } } { zeromq_objectSocket = objectSocket; } { void* objectMonitor = zmq_socket(objectContext, ZMQ_PAIR); { if (zmq_socket_monitor(objectSocket, "inproc://minichess-zeromq-monitor", ZMQ_EVENT_ALL) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } if (zmq_connect(objectMonitor, "inproc://minichess-zeromq-monitor") == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } } { do { int intEventspecifier = 0; int intEventvalue = 0; char charEventaddress[256] = { }; #if (ZMQ_VERSION_MAJOR == 3) { zmq_msg_t objectMessage = { }; zmq_msg_init(&objectMessage); if (zmq_recvmsg(objectMonitor, &objectMessage, 0) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } zmq_event_t objectEvent = { }; memcpy(&objectEvent, zmq_msg_data(&objectMessage), sizeof(objectEvent)); intEventspecifier = objectEvent.event; intEventvalue = 0 charEventaddress[0] = '\0'; zmq_msg_close(&objectMessage); } #elif (ZMQ_VERSION_MAJOR == 4) { zmq_msg_t objectMessage = { }; zmq_msg_init(&objectMessage); if (zmq_recvmsg(objectMonitor, &objectMessage, 0) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } uint8_t* intData = (uint8_t*) (zmq_msg_data(&objectMessage)); intEventspecifier = *(uint16_t*) (intData + 0); intEventvalue = *(uint32_t*) (intData + 2); zmq_msg_close(&objectMessage); } { zmq_msg_t objectMessage = { }; zmq_msg_init(&objectMessage); if (zmq_recvmsg(objectMonitor, &objectMessage, 0) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } charEventaddress[0] = '\0'; zmq_msg_close(&objectMessage); } #endif { if (intEventspecifier == ZMQ_EVENT_CONNECTED) { { zeromq_boolConnected = true; webserver_broadcast("zeromq_status", NULL); } { cJSON* objectOut = cJSON_CreateObject(); cJSON* objectIn = NULL; { cJSON_AddStringToObject(objectOut, "strFunction", "ping"); } { zeromq_send(objectOut); objectIn = zeromq_recv(); } { strcpy(zeromq_charClient, cJSON_GetObjectItem(objectIn, "strOut")->valuestring); webserver_broadcast("zeromq_name", NULL); } cJSON_Delete(objectOut); cJSON_Delete(objectIn); } { printf("zeromq: connected to %s\n", zeromq_charClient); } } else if (intEventspecifier == ZMQ_EVENT_DISCONNECTED) { { zeromq_boolConnected = false; webserver_broadcast("zeromq_status", NULL); } { printf("zeromq: disconnected from %s\n", zeromq_charClient); } } } { if (intEventspecifier == ZMQ_EVENT_CONNECTED) { int intTest = 0; if (intTest > 0) { setbuf(stdout, NULL); } if (intTest > 0) { printf("test_board: "); printf("%d\n", test_board()); } if (intTest > 1) { printf("test_winner: "); printf("%d\n", test_winner()); } if (intTest > 2) { printf("test_isValid: "); printf("%d\n", test_isValid()); } if (intTest > 3) { printf("test_isEnemy: "); printf("%d\n", test_isEnemy()); } if (intTest > 4) { printf("test_isOwn: "); printf("%d\n", test_isOwn()); } if (intTest > 5) { printf("test_isNothing: "); printf("%d\n", test_isNothing()); } if (intTest > 6) { printf("test_eval: "); printf("%d\n", test_eval()); } if (intTest > 7) { printf("test_moves: "); printf("%d\n", test_moves()); } if (intTest > 8) { printf("test_move: "); printf("%d\n", test_move()); } if (intTest > 9) { printf("test_undo: "); printf("%d\n", test_undo()); } if (intTest > 10) { printf("test_movesShuffled: "); printf("%d\n", test_movesShuffled()); } if (intTest > 11) { printf("test_movesEvaluated: "); printf("%d\n", test_movesEvaluated()); } if (intTest > 12) { printf("test_moveRandom: "); printf("%d\n", test_moveRandom()); } if (intTest > 13) { printf("test_moveGreedy: "); printf("%d\n", test_moveGreedy()); } if (intTest > 14) { printf("test_moveNegamax: "); printf("%d\n", test_moveNegamax()); } if (intTest > 15) { printf("test_moveAlphabeta: "); printf("%d\n", test_moveAlphabeta()); } } } } while (pthread_mutex_trylock(&zeromq_objectRunning) != 0); pthread_mutex_unlock(&zeromq_objectRunning); } zmq_close(objectMonitor); } zmq_close(objectSocket); zmq_ctx_destroy(objectContext); } }