calculate, how many turn options the enemy has in the next move

master
Trolli Schmittlauch 2015-03-12 22:52:29 +01:00
parent 3db8240997
commit 903e559856
2 changed files with 56 additions and 3 deletions

View File

@ -21,6 +21,45 @@ send_move(int row, int col)
return 0;
}
unsigned int*
numNextMoves(cell (*field)[fieldSize], movesList *moves) {
//switch stone char
char tmpown = ownc, tmpenemy = enemyc;
char enemyc = getEnemyChar(tmpenemy);
char ownc = getEnemyChar(tmpown);
#ifdef debugprint
printf("Own: %c Enemy: %c\n", ownc, enemyc);
#endif
unsigned int *numberOfEnemyMoves= new unsigned int[maxMoves]();
for (size_t moveNum=0; moveNum < moves->movesNumber; ++moveNum)
{
size_t fieldMemSize = fieldSize*fieldSize*sizeof(cell);
//cell (*futureField)[fieldSize] = (cell (*)[fieldSize]) malloc(fieldMemSize);
auto futureField = new cell[fieldSize][fieldSize]();
memcpy(futureField, field, fieldMemSize);
futureField[(moves->list[moveNum].turnRow-1)][(moves->list[moveNum].turnCol-1)].content=enemyc;
printf("--------------------\nfutureField\n");
#ifdef debugprint
for(size_t n=0;n<fieldSize;++n)
{
for(size_t m=0; m<fieldSize; ++m)
{
printf("%c ", futureField[n][m].content);
}
printf("\n");
}
#endif
movesList *futureMoves = new movesList();
findMoves(futureField, futureMoves);
numberOfEnemyMoves[moveNum] = futureMoves->movesNumber;
delete [] futureMoves;
delete [] futureField;
//free(futureField);
}
return numberOfEnemyMoves;
}
int main(void)
{
@ -51,9 +90,10 @@ int main(void)
//number of stones of X/O
unsigned int numX=0, numO=0; //TODO: make it a property of field struct
ownc = state_buffer[0];
if(!enemyc)
{
ownc = state_buffer[0];
enemyc = getEnemyChar(ownc);
}
@ -62,6 +102,14 @@ int main(void)
movesList *moves = new movesList();
findMoves(field, moves);
unsigned int *numOfEnemyMoves = numNextMoves(field, moves);
for(size_t i=0; i<moves->movesNumber; ++i)
{
printf("Moves %d %d -> %d enemy moves\n", moves->list[i].turnRow, moves->list[i].turnCol, numOfEnemyMoves[i]);
}
if(!(moves->movesNumber))
{
turn_row=0;
@ -70,6 +118,9 @@ int main(void)
else
{
int r = rand() % moves->movesNumber;
turn_row=moves->list[r].turnRow;
turn_col=moves->list[r].turnCol;
}
@ -85,6 +136,8 @@ int main(void)
// 3. Return result
send_move(turn_row, turn_col);
delete [] field;
delete [] moves;
/* END PLAYER-SPECIFIC CODE */
}

View File

@ -1,7 +1,7 @@
#ifndef PLAYERLIB_H
#define PLAYERLIB_H
const int fieldSize=8; // =fieldHeight=fieldWidth
const int fieldSize=8, maxMoves=100; // =fieldHeight=fieldWidth
extern char enemyc; //initially 0, contains char of enemy's stone
extern char ownc;
@ -16,7 +16,7 @@ struct move {
struct movesList {
unsigned int movesNumber = 0;
move *list = new move[100](); //eigentlich maximal 8*8-4 Lösungen, aber manche doppelt? -> Reserve
move *list = new move[maxMoves](); //eigentlich maximal 8*8-4 Lösungen, aber manche doppelt? -> Reserve
};
//returns the character used for the enemy's stones