git » fp-git.git » commit 773e284

*** empty log message ***

author peter_k
2005-11-01 08:49:31 UTC
committer peter_k
2005-11-01 08:49:31 UTC
parent 90f1d45cfb7245cf0fae0ed3a78fcbde49920451

*** empty log message ***

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