/* -*- Mode: C -*- */ //#define debugprint #include #include #include #include #include //for seeding rng with cummrent time #include #include #include "playerlib.h" 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; } int main(void) { int done = 0; srandom(time(NULL)); char enemyc=0, ownc=0; while (!done) { int turn_row = 0; int turn_col = 0; /* 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. TODO: Strategie hier einfügen. Resultat in turn_row und turn_col speichern. //number of stones of X/O unsigned int numX=0, numO=0; //TODO: make it a property of field struct if(!enemyc) { ownc = state_buffer[0]; enemyc = getEnemyChar(ownc); } //pure C: //struct cell (*field)[fieldSize] = malloc(fieldSize*fieldSize*sizeof(struct cell)); //C++ version: auto field = new cell[fieldSize][fieldSize](); readStateBuffer(state_buffer, field, &numX, &numO); //stateBuffer ist Pointer auf char, field ist Pointer auf struct cell[] movesList *moves = new movesList(); findMoves(field, moves, enemyc); #ifdef debugprint printf("\nZüge:\n"); for (unsigned int i=0; imovesNumber; ++i) { printf("%d,%d\n",moves->list[i].turnRow,moves->list[i].turnCol); } #endif if(!moves->movesNumber) { turn_row=0; turn_col=0; } else { int r = rand() % moves->movesNumber; turn_row=moves->list[r].turnRow; turn_col=moves->list[r].turnCol; } #ifdef debugprint printf("======================\nGewählter Zug: %d,%d\n======================\n", turn_row, turn_col); #endif // 3. Return result send_move(turn_row, turn_col); //for(int i=0; i