/* -*- Mode: C -*- */ #include #include #include #include #include #include static int send_move(int row, int col) { FILE *f = fdopen(dup(CHILD_OUT_FD), "w"); fprintf(f, "%u,%u", row, col); fclose(f); return 0; } static void read_move_from_user(int *row, int *col) { char input[128]; do { printf("Zug (,): "); fflush(stdout); if (fgets(input, sizeof(input), stdin) == NULL) abort(); } while((sscanf(input, "%u,%u", row, col) != 2) || (*row > 8) || (*col > 8)); } int main(void) { int done = 0; int turn_row, turn_col; while (!done) { /* BEGIN PLAYER-SPECIFIC CODE */ // 1. Read state char state_buffer[128]; ssize_t bytes = read(CHILD_IN_FD, state_buffer, sizeof(state_buffer)); if (bytes != 65) // invalid number of chars abort(); // state_buffer enthält jetzt 65 Zeichen ('.' oder 'X' oder 'O'): // * Das ERSTE Zeichen gibt an, welcher Spieler an der Reihe ist. // * Die weiteren 64 Zeichen definieren die Belegung des Feldes. // * Die Belegung wird reihenweise gegeben, d.h. die Zeichen // 1 bis 8 definieren die erste Zeile des Feldes, Zeichen 9 bis 17 // geben die zweite Zeile usw. // * X und O stehen hierbei für die jeweiligen Spieler. Leere Felder // sind durch einen Punkt (.) gekennzeichnet. // 2. Input move read_move_from_user(&turn_row, &turn_col); // 3. Return result send_move(turn_row, turn_col); /* END PLAYER-SPECIFIC CODE */ } return 0; } /* EOF */