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;
|
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)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
@ -51,9 +90,10 @@ int main(void)
|
||||||
|
|
||||||
//number of stones of X/O
|
//number of stones of X/O
|
||||||
unsigned int numX=0, numO=0; //TODO: make it a property of field struct
|
unsigned int numX=0, numO=0; //TODO: make it a property of field struct
|
||||||
|
ownc = state_buffer[0];
|
||||||
|
|
||||||
if(!enemyc)
|
if(!enemyc)
|
||||||
{
|
{
|
||||||
ownc = state_buffer[0];
|
|
||||||
enemyc = getEnemyChar(ownc);
|
enemyc = getEnemyChar(ownc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +102,14 @@ int main(void)
|
||||||
movesList *moves = new movesList();
|
movesList *moves = new movesList();
|
||||||
|
|
||||||
findMoves(field, moves);
|
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))
|
if(!(moves->movesNumber))
|
||||||
{
|
{
|
||||||
turn_row=0;
|
turn_row=0;
|
||||||
|
@ -70,6 +118,9 @@ int main(void)
|
||||||
else
|
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
|
// 3. Return result
|
||||||
send_move(turn_row, turn_col);
|
send_move(turn_row, turn_col);
|
||||||
|
|
||||||
|
delete [] field;
|
||||||
|
delete [] moves;
|
||||||
/* END PLAYER-SPECIFIC CODE */
|
/* END PLAYER-SPECIFIC CODE */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef PLAYERLIB_H
|
#ifndef PLAYERLIB_H
|
||||||
#define 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 enemyc; //initially 0, contains char of enemy's stone
|
||||||
extern char ownc;
|
extern char ownc;
|
||||||
|
@ -16,7 +16,7 @@ struct move {
|
||||||
|
|
||||||
struct movesList {
|
struct movesList {
|
||||||
unsigned int movesNumber = 0;
|
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
|
//returns the character used for the enemy's stones
|
||||||
|
|
Loading…
Reference in a new issue