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

📄 blackvswhite.java

📁 一个简单的黑白棋游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				//是对方棋子,置为临时颜色
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				//是本方,跳出循环
				else if (grid[num7] == colorb)
					break;
			}
		}
		//清零
		judgenum = 0;
		//判断下方
		num10 = replace1 + 1;
		while (num10 < DIM) 
		{
			num7 = num10 * DIM + replace2;
			if (grid[num7] != colorr) 
			{
				if (grid[num7] == colorb)
					judgenum = 1;
				break;
			} 
			else
				++num10;
		}
		if (judgenum != 0) 
		{
			for (num11 = replace1 + 1; num11 < DIM; ++num11) 
			{
				num7 = num11 * DIM + replace2;
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				else if (grid[num7] == colorb)
					break;
			}
		}
		judgenum = 0;
		//判断上方
		num11 = replace1 - 1;
		while (num11 >= 0) 
		{
			num7 = num11 * DIM + replace2;
			if (grid[num7] != colorr) 
			{
				if (grid[num7] == colorb)
					judgenum = 1;
				break;
			} 
			else
				--num11;
		}
		if (judgenum != 0) 
		{
			for (num12 = replace1 - 1; num12 >= 0; --num12) 
			{
				num7 = num12 * DIM + replace2;
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				if (grid[num7] == colorb)
					break;
			}
		}
		judgenum = 0;
		//判断右上方
		num12 = replace2 + 1;
		num13 = replace1 - 1;
		while (num12 < DIM && num13 >= 0) 
		{
			num7 = num13 * DIM + num12;
			if (grid[num7] != colorr) 
			{
				if (grid[num7] == colorb)
					judgenum = 1;
				break;
			} 
			else 
			{
				++num12;
				--num13;
			}
		}
		if (judgenum != 0) 
		{
			num14 = replace2 + 1;
			for (num15 = replace1 - 1; num14 < DIM && num15 >= 0; --num15) 
			{
				num7 = num15 * DIM + num14;
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				if (grid[num7] == colorb)
					break;
				++num14;
			}
		}
		judgenum = 0;
		
		//判断右下方
		num14 = replace2 + 1;
		num15 = replace1 + 1;
		while (num14 < DIM && num15 < DIM) 
		{
			num7 = num15 * DIM + num14;
			if (grid[num7] != colorr) 
			{
				if (grid[num7] == colorb)
					judgenum = 1;
				break;
			} 
			else 
			{
				++num14;
				++num15;
			}
		}
		if (judgenum != 0) 
		{
			num16 = replace2 + 1;
			for (num17 = replace1 + 1; num16 < DIM && num17 < DIM; ++num17) 
			{
				num7 = num17 * DIM + num16;
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				if (grid[num7] == colorb)
					break;
				++num16;
			}
		}
		judgenum = 0;
		//判断左上方
		num16 = replace2 - 1;
		num17 = replace1 - 1;
		while (num16 >= 0 && num17 >= 0) 
		{
			num7 = num17 * DIM + num16;
			if (grid[num7] != colorr) 
			{
				if (grid[num7] == colorb)
					judgenum = 1;
				break;
			} 
			else 
			{
				--num16;
				--num17;
			}
		}
		if (judgenum != 0) 
		{
			num18 = replace2 - 1;
			for (num19 = replace1 - 1; num18 >= 0 && num19 >= 0; --num19) 
			{
				num7 = num19 * DIM + num18;
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				if (grid[num7] == colorb)
					break;
				--num18;
			}
		}
		judgenum = 0;
		//判断左下方
		num18 = replace2 - 1;
		num19 = replace1 + 1;
		while (num18 >= 0 && num19 < DIM) 
		{
			num7 = num19 * DIM + num18;
			if (grid[num7] != colorr) 
			{
				if (grid[num7] == colorb)
					judgenum = 1;
				break;
			} 
			else 
			{
				--num18;
				++num19;
			}
		}
		if (judgenum != 0) 
		{
			int replace20 = replace2 - 1;
			int replace21;
			for (replace21 = replace1 + 1; replace20 >= 0 && replace21 < DIM; ++replace21) 
			{
				num7 = replace21 * DIM + replace20;
				if (grid[num7] == colorr)
					grid[num7] = tempcolor;
				if (grid[num7] == colorb)
					break;
				--replace20;
			}
		}
		//实现动画
		animating = true;
	}

	//检查双方的计分
	public void checkScore() 
	{
		int scanj;

		redScore = blueScore = 0;
		for (scanj = 0; scanj < DIM; ++scanj) 
		{
			int scani;
			for (scani = 0; scani < DIM; ++scani) 
			{
				//从上到下,从左到右扫描棋盘
				int scanij = scanj * DIM + scani;

				//对不同颜色分别计分
				if (grid[scanij] == 2 || grid[scanij] == 5)
					++redScore;
				else if (grid[scanij] == 3 || grid[scanij] == 4)
					++blueScore;
			}
		}
	}
	
	//绘制函数
	public synchronized void paint(Graphics g) 
	{
		//检查图象是否装载完毕
		if (!imageTracker.checkAll()) 
		{
			g.setColor(getForeground());
			g.drawString("Loading images", 50, 50);
		} 
		//如果完毕
		else 
		{
			int num2;
			int num3;
			int num4;
			int num5;
			int num6;
			//获取棋盘的大小
			buttonHeight = button.getSize().height + button.getLocation().y * 2;
			getFontMetrics(f);
			num2 = getSize().width - fontHeight * 3 - buttonHeight;
			num3 = getSize().height - fontHeight * 3 - buttonHeight;
			if (num2 != boardSize) 
			{
				if (num2 > num3)
					boardSize = num3 / DIM * DIM;
				else
					boardSize = num2 / DIM * DIM;
			}
			if (boardSize > 400)
				//限制棋盘尺寸
				boardSize = 400;
			//绘制棋盘背景
			offScrGraphics.setColor(getBackground());
			offScrGraphics.fillRect(0, 0, getSize().width, getSize().height);
			//绘制棋盘底色
			offScrGraphics.setColor(Color.white);
			offScrGraphics.fillRect(0, 0, boardSize, boardSize);
			//获取单个格子的尺寸
			num4 = boardSize / DIM;
			//绘制棋盘上的格子
			offScrGraphics.setColor(Color.black);
			
			//绘制棋子
			for (num5 = 0; num5 < DIM; ++num5) 
			{
				offScrGraphics.drawLine(0, num5 * num4, boardSize - 1, num5
						* num4);
				for (num6 = 0; num6 < DIM; ++num6) 
				{
					offScrGraphics.drawLine(num6 * num4, 0, num6 * num4,
							boardSize - 1);
					if (grid[num5 * DIM + num6] == 2)
						offScrGraphics.drawImage(redImage, num6 * num4 + 1,
								num5 * num4 + 1, num4 - 2, num4 - 2, this);
					else if (grid[num5 * DIM + num6] == 3)
						offScrGraphics.drawImage(blueImage, num6 * num4 + 1,
								num5 * num4 + 1, num4 - 2, num4 - 2, this);
					else if(grid[num5 * DIM + num6] == 1)
						offScrGraphics.drawImage(noneImage, num6 * num4 + 1,
								num5 * num4 + 1, num4 - 2, num4 - 2, this);
				}
			}
			offScrGraphics.drawLine(boardSize - 1, 0, boardSize - 1,
					boardSize - 1);
			offScrGraphics.drawLine(0, boardSize - 1, boardSize - 1,
					boardSize - 1);
			offScrGraphics.setColor(getForeground());
			//如果非法行棋,给予提示
			if (illegalMove)
				{
				offScrGraphics.drawString("下子非法,请重新下子!",
						button.getLocation().x, boardSize + fontAscent);
				messageText.setText(messageText.getText()  + "\n电脑:这个地方不能放你的子\n      换个地方吧!");
				}
						
			//如果电脑让步,给予提示
			else if (blueNotMoving)
			{
				offScrGraphics.drawString("Computer Pass",
						button.getLocation().x, boardSize + fontAscent);
				messageText.setText(messageText.getText()  + "\n电脑:我没地方走了\n      你自己走吧!");
			}
			//显示双方的计分
			offScrGraphics.drawImage(redImage, button.getLocation().x,
					boardSize + fontHeight * 2 - fontAscent, fontAscent,
					fontAscent, this);
			offScrGraphics.drawString("  玩家: " + (String.valueOf(redScore)),
					button.getLocation().x + fontAscent, boardSize + fontHeight
							* 2);
			offScrGraphics.drawImage(blueImage, button.getLocation().x,
					boardSize + fontHeight * 3 - fontAscent, fontAscent,
					fontAscent, this);
			offScrGraphics.drawString("  电脑: " + (String.valueOf(blueScore)),
					button.getLocation().x + fontAscent, boardSize + fontHeight
							* 3);
			offScrGraphics.setColor(Color.white);
			num6 = 0;
			//替换棋子的动画效果
			if (animating) 
			{
				num6 = num4 - 2;
				while (num6 > 0) 
				{
					int num7;
					for (num7 = 0; num7 < DIM; ++num7) 
					{
						int num8;
						for (num8 = 0; num8 < DIM; ++num8)
						{
							//如果格子中棋子的颜色是临时红色
							//在格子中绘制红色棋子
							if (grid[num7 * DIM + num8] == 5) 
							{
								offScrGraphics.fillRect(num8 * num4 + 1, num7
										* num4 + 1, num4 - 1, num4 - 1);
								offScrGraphics.drawImage(blueImage, num8 * num4
										+ 1 + num4 / 2 - num6 / 2, num7 * num4
										+ 1 + num4 / 2 - num6 / 2, num6, num6,
										this);
								if (num6 <= 2)
									grid[num7 * DIM + num8] = 2;
							} 
							//如果是临时的蓝色,就绘制蓝色棋子
							else if (grid[num7 * DIM + num8] == 4) 
							{
								offScrGraphics.fillRect(num8 * num4 + 1, num7
										* num4 + 1, num4 - 1, num4 - 1);
								offScrGraphics.drawImage(redImage, num8 * num4
										+ 1 + num4 / 2 - num6 / 2, num7 * num4
										+ 1 + num4 / 2 - num6 / 2, num6, num6,
										this);
								if (num6 <= 2)
									grid[num7 * DIM + num8] = 3;
							}
						}
					}
					g.drawImage(offScrImage, button.getLocation().x,
							buttonHeight, this);
					num6 -= 3;
					//主线程异常的捕捉
					try 
					{
						Thread.sleep(50L);
						continue;
					} 
					catch (Exception unused9) 
					{
						continue;
					}
				}
				animating = false;
				paint(g);
			}
			//如果格子填满的时候,游戏结束,并输出结果

			int tnum =  Integer.parseInt(rannum.getSelectedItem());
			if ((redScore + blueScore + tnum) == DIM * DIM) 
				{
				offScrGraphics.drawString(
				
						(redScore > blueScore) ? "Congratulations! You Win!" : "What a pity! You Lose!",
						button.getLocation().x, boardSize + fontAscent);
//				Login L = new Login();
				if(redScore > blueScore)
					messageText.setText(messageText.getText()  + "\n电脑:你赢啦,我不服气,再来一把.");
				else
					messageText.setText(messageText.getText()  + "\n电脑:哈哈,我赢啦,还敢再来吗?");
				
				}

			else
			{
				offScrGraphics.drawString("No One Win!", button
						.getLocation().x, boardSize + fontAscent);
		g.drawImage(offScrImage, button.getLocation().x,
						buttonHeight, this);
//		Login L = new Login();
			}
		}
	}
					

			
			
	//刷新页面
	public synchronized void update(Graphics g) 
	{
		paint(g);
	}

	//按钮事件的处理函数
	public void actionPerformed(ActionEvent e) 
	{
		newGame();

	}

	public void mousePressed(MouseEvent e) 
	{
		
	}

	public void mouseClicked(MouseEvent e) 
	{
		
	}

	public void mouseEntered(MouseEvent e) 
	{
	}

	public void mouseExited(MouseEvent e) 
	{
		
	}

	public synchronized void mouseReleased(MouseEvent e) 
	{
		int x = e.getX();
		int y = e.getY();
		if (imageTracker.checkID(0, true)) 
		{
			times += 0;
			System.arraycopy(grid, 0, save, 0, grid.length); 
			//确定鼠标点击的位置
			int num4 = (x - button.getLocation().x) * DIM / boardSize;
			int num5 = (y - buttonHeight) * DIM / boardSize;
			if (num5 < DIM && num4 < DIM && grid[num5 * DIM + num4] == 0) 
			{
				illegalMove = false;
				//如果能替换的数目小于零
				if (isGood(num5, num4, 2, 3) <= 0) 
				{
					illegalMove = true;//则为非法
					paint(getGraphics());
					return;
				} 
				//走棋合法的时候
				else 
				{
					grid[num5 * DIM + num4] = 2;
					change(num5, num4, 2, 3, 5);
					checkScore();
					paint(getGraphics());
					try 
					{
						Thread.sleep(1000L);
					} 
					catch (Exception unused6) 
					{
						
					}
					//选择难度
					int chooseTheDifficulty = difficulty.getSelectedIndex();
					switch(chooseTheDifficulty)
					{
					case 0: difnum = 0;break;
					case 1: difnum = 1;break;
					case 2: difnum = 2;break;
					case 3: difnum = 3;break;
					}
					
					//电脑走棋
					switch(difnum)
					{
					case 0:blueMove0();break;
					case 1:blueMove1();break;
					case 2:blueMove2();break;
					case 3:blueMove3();break;
					}
					// 选择电脑的难度
					checkScore();
					paint(getGraphics());
				}
			} 
			//如果格子中已经有蓝棋,则被视为非法
			else if (num5 < DIM && num4 < DIM && grid[num5 * DIM + num4] == 3) 
			{
				illegalMove = true;
				paint(getGraphics());
				return;
			}
		}
		return;
	}
	
}

⌨️ 快捷键说明

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