#include "state.h" #include int State::size = 19; State::State( void ) { board = new type[size * size]; } State::~State( void ) { delete[] board; } void State::printState( void ) { int i,j; for (i = 0; i < size; i++) { for (j = 0; j < size; j++) { //for all points: switch (board[i*size + j]) { case BLACK: printf("B "); break; case WHITE: printf("W "); break; case BOARD: printf("- "); break; } } printf("\n"); } printf("\n"); } State State::generateState (SDL_Surface *boardImg, Settings settings) { State state; int i, j, x, y, r, sum; point p; r = 10; //what kind of magic number is this? for (i = 0; i < size; ++i) { for (j = 0; j < size; ++j) { //for all points: p = positionPoint(i, j, settings); //retrieve the estimated point sum = 0; //TODO: this loop should be placed into its own function! for (y = p.y-r; y < p.y+r; ++y) { for (x = p.x-r; x < p.x+r; ++x) { //for -10 to 10 around the point uint32_t px = PX(boardImg, x, y); sum += (PXR(px) + PXG(px) + PXB(px)); //sum up the colors } } sum/=400; //printf("%d\t", sum); type t = BOARD; if (sum < settings.getBlackTreshold()) t = BLACK; if (sum > settings.getWhiteTreshold()) t = WHITE; PX_(state.board, i, j, size, size) = t; } //printf("\n"); } //printf("\n"); return state; } point State::positionPoint(int i, int j, Settings s) { point ul = s.getUL(), ur = s.getUR(), bl = s.getBL(), br = s.getBR(); point topp, botp, pp; topp.x = ul.x + (i*(ur.x-ul.x))/size; topp.y = ul.y + (i*(ur.y-ul.y))/size; botp.x = bl.x + (i*(br.x-bl.x))/size; botp.y = bl.y + (i*(br.y-bl.y))/size; pp.x = topp.x + (j*(botp.x-topp.x))/size; pp.y = topp.y + (j*(botp.y-topp.y))/size; return pp; }