author | peter_k
<peter_k> 2005-11-01 08:49:31 UTC |
committer | peter_k
<peter_k> 2005-11-01 08:49:31 UTC |
parent | 90f1d45cfb7245cf0fae0ed3a78fcbde49920451 |
poprecog/connect4/boards.c | +64 | -0 |
poprecog/connect4/genboard.cpp | +52 | -3 |
poprecog/connect4/genboard.exe | +0 | -0 |
poprecog/connect4/genboard.o | +0 | -0 |
diff --git a/poprecog/connect4/boards.c b/poprecog/connect4/boards.c index d4b5384..0dd89f3 100644 --- a/poprecog/connect4/boards.c +++ b/poprecog/connect4/boards.c @@ -17,12 +17,76 @@ class board { inline board::putToken44(int column) { switch(column) { case 0: + switch((board[0]|board[1])&4369) { + case 1048576: + board[actualPlayer]|=65536; + break; + case 1048576: + board[actualPlayer]|=4096; + break; + case 1052672: + board[actualPlayer]|=256; + break; + case 1052928: + board[actualPlayer]|=16; + break; + case 1052929: + return -2; + break; break; case 1: + switch((board[0]|board[1])&8738) { + case 2097152: + board[actualPlayer]|=131072; + break; + case 2097152: + board[actualPlayer]|=8192; + break; + case 2105344: + board[actualPlayer]|=512; + break; + case 2105856: + board[actualPlayer]|=32; + break; + case 2105858: + return -2; + break; break; case 2: + switch((board[0]|board[1])&17476) { + case 4194304: + board[actualPlayer]|=262144; + break; + case 4194304: + board[actualPlayer]|=16384; + break; + case 4210688: + board[actualPlayer]|=1024; + break; + case 4211712: + board[actualPlayer]|=64; + break; + case 4211716: + return -2; + break; break; case 3: + switch((board[0]|board[1])&34952) { + case 8388608: + board[actualPlayer]|=524288; + break; + case 8388608: + board[actualPlayer]|=32768; + break; + case 8421376: + board[actualPlayer]|=2048; + break; + case 8423424: + board[actualPlayer]|=128; + break; + case 8423432: + return -2; + break; break; }; } diff --git a/poprecog/connect4/genboard.cpp b/poprecog/connect4/genboard.cpp index 197500e..874827d 100644 --- a/poprecog/connect4/genboard.cpp +++ b/poprecog/connect4/genboard.cpp @@ -16,14 +16,37 @@ typedef struct sBoardSize { int height; } tBoardSize; +void setBit(unsigned long long &number, int bit) { + unsigned long long tmp = 1; + + if (!((bit>=0)&&(bit<=63))) + return; + while(bit--) + tmp*=2; + number |= tmp; +} + int main(int argc, char *argv[]) { const int boardNumber = 1; const tBoardSize boardList[boardNumber] = {{4, 4}/*, {7, 6}, {7, 7}, {8, 7}*/}; ofstream output; int actualBoard; - int i; + int column; + int line; + int height; + unsigned long long longNumber; + unsigned long long longNumber2; + /*longNumber=0; + setBit(longNumber, 3); + setBit(longNumber, 7); + setBit(longNumber, 11); + setBit(longNumber, 15); + cout << longNumber << endl; + system("pause"); + return 0;*/ + output.open("boards.c"); output << "/* Code below was generated by a machine, so please don't edit */\n\n" @@ -42,13 +65,39 @@ int main(int argc, char *argv[]) output << "};\n\n"; + /** + * putToken + */ for (actualBoard=0; actualBoard<boardNumber; actualBoard++) { output << "inline board::putToken" << boardList[actualBoard].width << boardList[actualBoard].height << "(int column) {\n" << " switch(column) {\n"; - for (i = 0; i < boardList[actualBoard].width; i++) { + for (column = 0; column < boardList[actualBoard].width; column++) { + longNumber = 0; + for (line=0; line<boardList[actualBoard].height; line++) + setBit(longNumber, line*boardList[actualBoard].height+column); + output + << " case " << column << ":\n" + << " switch((board[0]|board[1])&" << longNumber << ") {\n"; + longNumber=0; + for (height=0; height<boardList[actualBoard].height; height++) { + for (line=0; line<height; line++) + setBit(longNumber, line*boardList[actualBoard].height+column); + longNumber2=0; + setBit(longNumber2, height*boardList[actualBoard].height+column); + output + << " case " << longNumber << ":\n" + << " board[actualPlayer]|=" << longNumber2 << ";\n" + << " break;\n"; + } + /* if row is busy */ + setBit(longNumber, column); + output + << " case " << longNumber << ":\n" + << " return -2;\n" + << " break;\n"; + /* - */ output - << " case " << i << ":\n" << " break;\n"; } output diff --git a/poprecog/connect4/genboard.exe b/poprecog/connect4/genboard.exe index 79a10e5..15ed40b 100644 Binary files a/poprecog/connect4/genboard.exe and b/poprecog/connect4/genboard.exe differ diff --git a/poprecog/connect4/genboard.o b/poprecog/connect4/genboard.o index ad4232c..4c4d262 100644 Binary files a/poprecog/connect4/genboard.o and b/poprecog/connect4/genboard.o differ