calculate, how many turn options the enemy has in the next move
This commit is contained in:
parent
3db8240997
commit
903e559856
|
@ -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 */
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue