⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzq.java

📁 黑白交错等多个程序。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* OK first of all, when I wrote this, I just copied my c code and translated to java.
I had never written any java code ever before, and now, three years later, I find this
code horrible. 
But because of the many requests for the code I've decided to put out the code anyway,
but I warn you, don't code like this!

Note that this engine doesn't think ahead, it just evaluate the current position.
The best way to proceed is maybe to modify the Analyze function and use it with the 
MiniMax algorithm. I actually started coding some think-ahead but I think i'ts
commented below.

Well that's it, and good luck!

Staffan Ekvall
pnyxtr@yahoo.com

*/


import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.applet.*;
//import java.util.math;

public
class Connect5 extends Applet
	{
	char Board[][][] = new char[32][32][2];
	int PointBoard[][] = new int[32][32];
   int x, y;
   int startx = 15, endx = 15, starty = 15, endy = 15;

   int white;
   int black;
   char cleararea = 1;
   static final int PLAYING = 0;
   static final int NOTPLAYING = 1;
   static final int WAITING = 1;
   static final int YOUWON = 2;
   static final int YOULOST = 3;
   int status = NOTPLAYING;
   int picturestatus = WAITING;

   int status2[] = { 0, 0 };
   int fx, fy;

   static final char EMPTY = 0;
   static final char MARKX = 1;
   static final char MARKO = 2;
   static final char EDGE = 3;

   static final int FIVE = 80000;
   static final int FOUR = 12000;
	static final int THREE = 500;
	static final int THREEHOLE = 450;
	static final int FOURBLOCK = 450;
	static final int FOURBLOCKHOLE = 400;
	static final int TWO = 50;
	static final int TWOHOLE = 45;
	static final int THREEBLOCK = 40;
	static final int TWOBLOCK = 3;

   void
   CopyBoard(int from, int to)
   	{
      for (x = 0; x < 32; x++)
	      for (y = 0; y < 32; y++)
            Board[x][y][to] = Board[x][y][from];
      }

	int
   ChkWin(int realcheck)
		{
		int x, y, mx[] = { 1, 0, 1, -1 }, my[] = { 0, 1, 1, 1 }, i, type;
		for (x = startx - 4; x < endx + 4; x++)
			for (y = starty - 4; y < endy + 4; y++)
				{
      		if (Board[x][y][0] > 0)
		         {
      			type = Board[x][y][0];
		         if (type != EDGE)
					for (i = 0; i < 4; i++)
						if (Board[x + 1 * mx[i]][y + 1 * my[i]][0] == type  &&
						    S(x + 2 * mx[i], y + 2 * my[i]) == type  &&
						    S(x + 3 * mx[i], y + 3 * my[i]) == type  &&
						    S(x + 4 * mx[i], y + 4 * my[i]) == type)
		               {
							if (realcheck == 1)
                     	{
								status = NOTPLAYING;
      		   	      if (type == MARKX)
		      	            {
                           picturestatus = YOUWON;
		   	               }
   							else
   	   		            {
                           picturestatus = YOULOST;
	      		            }
                        }
                     return type;
            		   }
      		   }
		      }
      return 0;
		}

	boolean
	yourMove(int x, int y)
		{
		if (x < 1 || x > 30 || y < 1 || y > 30)
		   return false;
		if (Board[x][y][0] != EMPTY)
		   return false;
		MakeMark(x, y, MARKX);
		return true;
	   }

      int
      S(int x, int y)
			{
			if (x < 0) return EDGE;
			if (y < 0) return EDGE;
			if (x > 31) return EDGE;
			if (y > 31) return EDGE;
			return (Board[x][y][0]);
			}

		int
		Analyze(char type, float multiplier)
		{
		/*
		# = EMPTY
		_ = CURRENT SQUARE
		X = OWN MARKS
		O = OPP MARKS
		* == X or #
		*/

		int x, y, mx[] = { 1, -1, 0, 0, 1, -1, 1, -1 }, my[] = { 0, 0, 1, -1, 1, 1, -1, -1 }, i;
		int points = 0;
		int blockmult[][] = new int[32][32];
		for (x = 0; x < 32; x++)
			for (y = 0; y < 32; y++)
		      blockmult[x][y] = 1;

		for (x = startx - 4; x < endx + 4; x++)
			for (y = starty - 4; y < endy + 4; y++)
				{
	   	   if (S(x, y) == EMPTY)
		      for (i = 0; i < 8; i++)
		      	{
					if (S(x + 1 * mx[i], y + 1 * my[i]) == type)
   		      	{
	      			if (S(x + 2 * mx[i], y + 2 * my[i]) == type)
		               {
   				   	if (S(x + 3 * mx[i], y + 3 * my[i]) == type)
								{
		   			   	if (S(x + 4 * mx[i], y + 4 * my[i]) == type)  // _XXXX	XXXX_
									{
									points += FIVE;
		                     PointBoard[x][y] += FIVE * multiplier;
   			               continue;
                           }
		                  if (S(x + 4 * mx[i], y + 4 * my[i]) == EMPTY)
      		            	{
            		         if (S(x - 1 * mx[i], y - 1 * my[i]) == type) // X_XXX#    #XXX_X
                  		   	{
										points += FIVE;
   			                  PointBoard[x][y] += FIVE * multiplier;
            		            continue;
                  		      }
		                     if (S(x - 1 * mx[i], y - 1 * my[i]) == EMPTY) // #_XXX#   #XXX_#
      		               	{
										points += FOUR;
   	            		      PointBoard[x][y] += FOUR * multiplier;
		                        continue;
      		                  }
            		         // O_XXX#   #XXX_O
									points += FOURBLOCK;
		  	                  PointBoard[x][y] += FOURBLOCK * multiplier * blockmult[x][y];
									blockmult[x][y]++;
	         		         continue;
                  		   }
	      		         // S(x + 4 * mx[i], y + 4 * my[i]) = fi || edge
			               if (S(x - 1 * mx[i], y - 1 * my[i]) == type) // X_XXXO   OXXX_X
		      		          	{
										points += FIVE;
	            		         PointBoard[x][y] += FIVE * multiplier;
   	   		               continue;
			                     }
      		            if (S(x - 1 * mx[i], y - 1 * my[i]) == EMPTY) // #_XXXO   OXXX_#
		                   	{
									points += FOURBLOCK;
	   		               PointBoard[x][y] += FOURBLOCK * multiplier * blockmult[x][y];
									blockmult[x][y]++;
		                     continue;
		                     }
		                  // O_XXXO     OXXX_O
								continue;
      		            }
		// ---------------------------- S(x + 3 * mx[i], y + 3 * my[i]) != type
							if (S(x + 3 * mx[i], y + 3 * my[i]) == EMPTY)
		               	{
		                  if (S(x - 1 * mx[i], y - 1 * my[i]) == EMPTY) // #_XX#    #XX_#
		                  	{
									points += THREE;
		  	                  PointBoard[x][y] += THREE * multiplier;
		     	               continue;
		                     }
   		               if (S(x - 1 * mx[i], y - 1 * my[i]) == type)
	      	            	{
		                     if (S(x - 2 * mx[i], y - 2 * my[i]) == EMPTY) // #X_XX#   #XX_X#
	     		               	{
										points += FOUR;
	  			                  PointBoard[x][y] += FOUR * multiplier;
		                        continue;
      		                  }
		                     if (S(x - 2 * mx[i], y - 2 * my[i]) == type) // XX_XX#    #XX_XX   Dual
      		               	{
										points += FIVE / 2;
   			                  PointBoard[x][y] += FIVE * multiplier / 2;
		                        continue;
      		                  }
		                     // OX_XX#    #XX_XO
									points += FOURBLOCK;
  	   		               PointBoard[x][y] += FOURBLOCK * multiplier * blockmult[x][y];
									blockmult[x][y]++;
      		               continue;
		                     }
	   	               // S(x - 1 * mx[i], y - 1 * my[i]) == fi || edge
		                  if (S(x + 4 * mx[i], y + 4 * my[i]) == EMPTY) // O_XX##    ##XX_O
            		      	{
									points += THREEBLOCK;
		  	                  PointBoard[x][y] += THREEBLOCK * multiplier;
                  		   continue;
            		         }
      		            if (S(x + 4 * mx[i], y + 4 * my[i]) == type) // O_XX#X   X#XX_O
		                  	{
									points += FOURBLOCKHOLE;
  	   		               PointBoard[x][y] += FOURBLOCKHOLE * multiplier * blockmult[x][y];
									blockmult[x][y]++;
		                     continue;
      		               }
		                  // O_XX#O   O#XX_O
		                  continue;
      		            }

							// S(x + 3 * mx[i], y + 3 * my[i]) == fi || edge
		               if (S(x - 1 * mx[i], y - 1 * my[i]) == EMPTY)
               			{
            		      if (S(x - 2 * mx[i], y - 2 * my[i]) == EMPTY) // ##_XXO    OXX_##
      		            	{
									points += THREEBLOCK;
  	               		   PointBoard[x][y] += THREEBLOCK * multiplier;
            		         continue;
      		               }
		                  if (S(x - 2 * mx[i], y - 2 * my[i]) == type) // X#_XXO  OXX_#X
      		            	{
									points += FOURBLOCKHOLE;
  	               		   PointBoard[x][y] += FOURBLOCKHOLE * multiplier * blockmult[x][y];
									blockmult[x][y]++;
      		               continue;
		                     }
                  		// O#_XXO    OXX_#O
            		      continue;
      		            }
		               if (S(x - 1 * mx[i], y - 1 * my[i]) == type) // X_XXO   OXX_X
            		   	{
      		            if (S(x - 2 * mx[i], y - 2 * my[i]) == EMPTY) // #X_XXO  OXX_X#
		                  	{
									points += FOURBLOCK;
		  	                  PointBoard[x][y] += FOURBLOCK * multiplier * blockmult[x][y];
									blockmult[x][y]++;
            		         continue;
      		               }
		                  if (S(x - 2 * mx[i], y - 2 * my[i]) == type) // XX_XXO  OXX_XX   Dual
               		   	{
									points += FIVE / 2;
  			                  PointBoard[x][y] += FIVE * multiplier / 2;
	                 		   continue;
            		         }
      		            // OX_XXO    OXX_XO
		                  continue;
      		            }
		               // O_XXO    OXX_O
      		         continue;
		               }
		// --------------------- S(x + 2 * mx[i], y + 2 * my[i]) != type
						if (S(x + 2 * mx[i], y + 2 * my[i]) == EMPTY) // _X#
            		  	{
      		         if (S(x - 1 * mx[i], y - 1 * my[i]) == EMPTY) // #_X#
		                	{
                  		if (S(x - 2 * mx[i], y - 2 * my[i]) == type) // X#_X#
            		      	{
      		               if (S(x - 3 * mx[i], y - 3 * my[i]) == EMPTY) // #X#_X#
		                     	{
										points += THREEHOLE;
  		      		            PointBoard[x][y] += THREEHOLE * multiplier;
      		                  continue;
		                        }
                  		   if (S(x - 3 * mx[i], y - 3 * my[i]) == type) // XX#_X#
            		         	{
										points += FOURBLOCKHOLE;
		  		                  PointBoard[x][y] += FOURBLOCKHOLE * multiplier * blockmult[x][y];
										blockmult[x][y]++;
            		            continue;
      		                  }
									points += THREEBLOCK;
		              		   PointBoard[x][y] += THREEBLOCK * multiplier;
            		         // OX#_X#
      		               continue;
		                     }
		                  if (S(x - 2 * mx[i], y - 2 * my[i]) == EMPTY) // ##_X#
               		   	{
         		            if (S(x + 3 * mx[i], y + 3 * my[i]) == EMPTY) // ##_X##
   		                  	{
										points += TWO;
  		            		      PointBoard[x][y] += TWO * multiplier;
            		            continue;
      		                  }
		                     if (S(x + 3 * mx[i], y + 3 * my[i]) == type) // ##_X#X
                     			{
                  		      if (S(x + 4 * mx[i], y + 4 * my[i]) == EMPTY) // ##_X#X#
            		            	{
											points += THREEHOLE;
		  		   	               PointBoard[x][y] += THREEHOLE * multiplier;
                        		   continue;
                  		         }
            		            if (S(x + 4 * mx[i], y + 4 * my[i]) == type) // ##_X#XX
      		                  	{
											points += FOURBLOCKHOLE;
  		   	      		         PointBoard[x][y] += FOURBLOCKHOLE * multiplier * blockmult[x][y];
											blockmult[x][y]++;
      		                     continue;
		                           }
                     		   // ##_X#XO
										points += THREEBLOCK;
  					               PointBoard[x][y] += THREEBLOCK * multiplier;
		                        continue;
                  		      }
									// ##_X#O
									points += TWO;
			                  PointBoard[x][y] += TWO * multiplier;
	               		   continue;
         	   	         }
								// O#_X#
		                  if (S(x + 3 * mx[i], y + 3 * my[i]) == EMPTY) // O#_X##
                  			{
									points += TWO;
	   		               PointBoard[x][y] += TWO * multiplier;
		 		               continue;
               		      }
      			         if (S(x + 3 * mx[i], y + 3 * my[i]) == type)
		                  	{
                  		   if (S(x + 4 * mx[i], y + 4 * my[i]) == EMPTY) // O#_X#X#
            		         	{
										points += THREEHOLE;
		  		                  PointBoard[x][y] += THREEHOLE * multiplier;
                        		continue;
                  		      }
            		         if (S(x + 4 * mx[i], y + 4 * my[i]) == type) // O#_X#XX
      		               	{
										points += FOURBLOCKHOLE;
  		               	   	PointBoard[x][y] += FOURBLOCKHOLE * multiplier * blockmult[x][y];							blockmult[x][y]++;
										blockmult[x][y]++;
            		            continue;
      		                  }
		                     // O#_X#XO
									points += THREEBLOCK;
  	         		         PointBoard[x][y] += THREEBLOCK * multiplier;
 	   		              	continue;
		                     }
								// O#_X#O
		                  continue;
		                  }
         	      if (S(x - 1 * mx[i], y - 1 * my[i]) == type)
			              	{
		                  if (S(x - 2 * mx[i], y - 2 * my[i]) == type) // XX_X#
		                  	continue; // Already processed
		                  if (S(x - 2 * mx[i], y - 2 * my[i]) == EMPTY) // #X_X# // Dual
		                  	{
									points += THREE / 2;
		  	                  PointBoard[x][y] += THREE * multiplier / 2;
		                     continue;
		                     }
      		            if (S(x + 3 * mx[i], y + 3 * my[i]) == EMPTY) // OX_X##
		                  	{
									points += THREEBLOCK;
		  	                  PointBoard[x][y] += THREEBLOCK * multiplier;
		                     continue;
		                     }
		                  if (S(x + 3 * mx[i], y + 3 * my[i]) == type) // OX_X#X
		                  	{
									points += FOURBLOCKHOLE;
		  	                  PointBoard[x][y] += FOURBLOCKHOLE * multiplier;
		                     continue;
		                     }
								// OX_X#O
		                  continue;
		                  }
		               if (S(x + 3 * mx[i], y + 3 * my[i]) == EMPTY)
		               	{
				            if (S(x + 4 * mx[i], y + 4 * my[i]) == EMPTY) // O_X###
		                  	{
									points += TWOBLOCK;
		  		               PointBoard[x][y] += TWOBLOCK * multiplier;
      		               continue;
		                     }
				            if (S(x + 4 * mx[i], y + 4 * my[i]) == type) // O_X##X
		                  	{
									points += TWOBLOCK;
		  		               PointBoard[x][y] += TWOBLOCK * multiplier;
		                     continue;
		                     }
								// O_X##O
	      	            continue;
		                  }
		               if (S(x + 3 * mx[i], y + 3 * my[i]) == type)
		               	{
				            if (S(x + 4 * mx[i], y + 4 * my[i]) == EMPTY) // O_X#X#
		                  	{
									points += THREEBLOCK;
		  	                  PointBoard[x][y] += THREEBLOCK * multiplier;
		                     continue;
		                     }
				            if (S(x + 4 * mx[i], y + 4 * my[i]) == type) // O_X#XX
   		               	{
									points += FOURBLOCKHOLE;
  	   		               PointBoard[x][y] += FOURBLOCKHOLE * multiplier * blockmult[x][y];
									blockmult[x][y]++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -