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

📄 blackvswhite.java

📁 一个简单的黑白棋游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
					}
					
					newGame();
					times = 0;
				}
			}
			
		});
		
		text = new TextArea(15, 15);

		scrollPane = new JScrollPane(text);
//		add(scrollPane, BorderLayout.CENTER);
		scrollPane.setBounds(310, 60, 300, 300);
		text.setBounds(310, 10, 300, 300);
		
		sendlabel = new Label("输入消息");
        messageInfo = new Label("聊天记录:");
        sendText = new TextArea();
        sendButton = new Button("发送");
        clearButton = new Button("清空");
        messageText = new TextArea();
        messageText.setBounds(320, 120, 265, 220);
        messageText.setEditable(true);
//      messageText.setEditable(false);

        add(sendlabel);
        sendlabel.setBounds(320, 50, 200, 20);
        add(messageInfo);
        messageInfo.setBounds(320, 90, 200, 20);
        add(sendText);
        sendText.setBounds(320, 70, 200, 20);


        sendText.setText("你好");

        	
        add(sendButton);
        
        //和电脑聊天
        
        sendButton.addActionListener(new ActionListener() 
        {
        	public void actionPerformed(ActionEvent e) 
        	{
                
                message = sendText.getText();
                if(message.equalsIgnoreCase("你好"))
                {
                	cmessage = "电脑:你好,我是电脑。\n      " +
                			"你想和我聊天吗?\n      (是/否)";
            		messageText.setText(messageText.getText()  + "\n你说:" + message + "\n" + cmessage);
            		sendText.setText("");      
            		
                }
                
                else if(message.equalsIgnoreCase("是"))
                {
                	cmessage = "电脑:我是电脑,怎么会聊天呢?我晕!\n      " +
                	"你还想和我聊天吗?\n      (是/否)";
                	messageText.setText(messageText.getText()  + "\n你说:" + message + "\n" + cmessage);
                	sendText.setText("");    
                }
                
                else if(message.equalsIgnoreCase("否"))
                {
                	cmessage = "电脑:你不想聊天就算了\n      " +
                	"你还想和我聊天吗?\n      (是/否)";
                	messageText.setText(messageText.getText()  + "\n你说:" + message + "\n" + cmessage);
                	sendText.setText("");    
                }
                
                else
                {
                	cmessage = "电脑:请输入你好";
                	messageText.setText(messageText.getText()  + "\n你说:" + message + "\n" + cmessage);
            		sendText.setText("");
                }

        		
        	}
        });
        
        clearButton.addActionListener(new ActionListener()
        {

			public void actionPerformed(ActionEvent e) 
			{
				messageText.setText("");
			}
        	
        });
        

        sendButton.setBounds(525, 70, 35, 20);
        clearButton.setBounds(562, 70, 35, 20);
        add(messageText);
        add(clearButton);
		
		addMouseListener(this);// 设置鼠标事件的监听器
		newGame();// 开始新游戏

//      有待实现的
//		TestServer S = new TestServer();
//		Login L = new Login();
//		TestClient c = new TestClient("harllyhoo", "192.168.18.135"); // 启动客户端聊天主窗口
		
		//实现在双方都没办法继续下时结束游戏
		overButton = new Button("结束棋局");
		overButton.setBounds(400, 360, 70, 20);
		add(overButton);
		overButton.addActionListener(new ActionListener()
		{

			public void actionPerformed(ActionEvent e) 
			{
				cmessage = "电脑:唉,已经都没办法下棋啦!\n      我们看结果吧!";
				messageText.setText(messageText.getText() + "\n" + cmessage);
				if(redScore > blueScore)
				{
					cmessage = "电脑:555,棋还没下完你就赢了!再来!";
					messageText.setText(messageText.getText() + "\n" + cmessage);
					
					//让主线程延迟一下
					try 
					{
						Thread.sleep(5000L);
					} 
					catch (Exception unused9) 
					{
						
					}
					
					newGame();
				}
				
				else if(redScore < blueScore)
				{
					cmessage = "电脑:哈哈,我抢占先机赢了哦!";
					messageText.setText(messageText.getText() + "\n" + cmessage);
					
					
					try 
					{
						Thread.sleep(5000L);
					} 
					catch (Exception unused9) 
					{
					}
					newGame();
				}
				
				else
				{
					cmessage = "电脑:恩恩,难分上下,再来一局!";
					messageText.setText(messageText.getText() + "\n" + cmessage);
					
					
					try 
					{
						Thread.sleep(5000L);
					} 
					catch (Exception unused9) 
					{
					}
					newGame();
				}
				
			}
				
		});
		
		
		//实现请求电脑协助下棋
		helpButton = new Button("求助电脑");
		helpButton.setBounds(320, 360, 70, 20);
		add(helpButton);
		helpButton.addActionListener(new ActionListener()
		{

			public void actionPerformed(ActionEvent e) 
			{
				helpMove();
			}
			
		});
		
		
		//实现退出游戏
		exitGame = new Button("退出游戏");
		exitGame.setBounds(480, 360, 70, 20);
		add(exitGame);
		exitGame.addActionListener(new ActionListener()
		{

			public void actionPerformed(ActionEvent e) 
			{
				//退出的动作
				System.exit(0);
			}
			
		});
		
		//实现人pass功能
		passButton = new Button("让步");
		passButton.setBounds(260, 360, 50, 20);	
		add(passButton);
		passButton.addActionListener(new ActionListener()
		{

			public void actionPerformed(ActionEvent e) 
			{
				cmessage = "电脑:什么?你竟然让我,真是的!";
				messageText.setText(messageText.getText() + "\n" + cmessage);
				switch(difficulty.getSelectedIndex())
				{
				case 0: blueMove0();break;
				case 1: blueMove1();break;
				case 2: blueMove2();break;
				case 3: blueMove3();break;
				}
				checkScore();// 计算双方计分
				repaint();// 重新绘制页面
			}
			
		});

		
		
	}

	// 装载图像
	public synchronized void loadImages() 
	{
		int i;
		try 
		{
			redImage = getImage(getDocumentBase(), "white.gif");
			blueImage = getImage(getDocumentBase(), "black.gif");
			noneImage = getImage(getDocumentBase(), "none.gif");
			offScrGraphics.drawImage(redImage, 0, 0, this);
			offScrGraphics.drawImage(blueImage, 0, 0, this);
			offScrGraphics.drawImage(noneImage, 0, 0, this);

		} 
		catch (Exception e1) 
		{
			System.out.println(e1);
		}
		imageTracker.addImage(redImage, 0);// 红棋图像的装载
		imageTracker.addImage(blueImage, 0);// 蓝棋图像的装载
		for (i = 0; i < 2; ++i) 
		{
			// 捕捉图像的异常
			try 
			{
				imageTracker.checkID(i, true);
				imageTracker.waitForID(i);
				showStatus("Loading image P" + i + ".gif");
			} 
			catch (Exception e2) 
			{
				System.out.println(e2);
			}
		}
	}

	// BlackVSWhite类的开始执行函数
	public void start() 
	{
		aThread = new Thread(this);
		aThread.start();// 启动主线程;
		imageTracker.statusID(0, true);
		imageTracker.statusID(0, true);
	}

	// 主线程的执行函数

	public void run() 
	{
		for (;;) 
		{
			try 
			{
				Thread.sleep(50L);
				continue;
			} 
			catch (Exception unused1) 
			{
				continue;
			}
		}
	}

	// BlackVSWhite类的退出函数
	public void destroy() 
	{

	}
	
	//实现电脑求助功能
	public synchronized void helpMove() 
	{
		//replace1,replace2用来记录替换玩家棋子的数目
		int replace1 = -1;
		int replace2 = -1;
		//cplace1,cplace2用来记录电脑放置棋子的位置
		int cplace1 = -1;
		int cplace2 = -1;
		int uptodown;
		//从上往下,从左至右,分析在每一个空白各自上,
		//电脑放棋后,所能替换玩家棋子的数目,取数目
		//最大时的格子,如果有几个最大值,取最先者
		for (uptodown = 0; uptodown < DIM; ++uptodown) 
		{
			int lefttoright;
			for (lefttoright = 0; lefttoright < DIM; ++lefttoright) 
			{
				//如果格子是空白时  DIM是单方向上的格子数
				if (grid[uptodown * DIM + lefttoright] == 0) 
				{
					//获取替换玩家棋子的数目
					replace2 = isGood(uptodown, lefttoright, 2, 3);
					//取数目最大时的格子的位置值(cplace1,cplace2)
					if (replace1 < replace2 && replace2 > 0) {
						replace1 = replace2;
						cplace1 = uptodown;
						cplace2 = lefttoright;
					}
				}
			}
		}
		//如果电脑替换玩家棋子的数目大于零时
		if (replace1 > 0) 
		{
/*			//将格子中的棋子设为白棋
			grid[cplace1 * DIM + cplace2] = RED;
			//并将相应两个白棋间的黑棋由白棋取而代之
			change(cplace1, cplace2, 2, 3, 5);
*/
			cplace1 += 1;
			cplace2 += 1;
			cmessage = "电脑说:要我帮你,我就帮你算算咯!\n       电脑说:";
			messageText.setText(messageText.getText() + "\n" + cmessage + "你走第" + String.valueOf(cplace1)
					+ "行,第" + String.valueOf(cplace2) + "个吧!");
		} 
		//否则放弃这一步
		else
		{
			cmessage = "电脑说:我也帮不了你,你没地方可以走!";
			messageText.setText(messageText.getText() + "\n" + cmessage);
			switch(difficulty.getSelectedIndex())
			{
			case 0: blueMove0();break;
			case 1: blueMove1();break;
			case 2: blueMove2();break;
			case 3: blueMove3();break;
			}
			checkScore();// 计算双方计分
			repaint();// 重新绘制页面
			
		}
//			blueNotMoving = true;
	}
	
	
	//电脑出棋函数
	//此项为初级电脑
	public synchronized void blueMove0()
	{
		//replace1用来记录替换玩家棋子的数目
		int replace1 = -1;
		//cplace1,cplace2用来记录电脑放置棋子的位置
		int cplace1 = -1;
		int cplace2 = -1;
		//i,j为随机函数即电脑随机放置棋子
		int i = (int)(Math.random() * DIM); 
		int j = (int)(Math.random() * DIM); 
		
		//通过随机数选择放置棋子的地方
		//记录电脑放棋后,所能替换玩家棋子的数目
		//如果能替换的数目大于0,则放置棋子
		int times = 0;
		while(times <= 100)
			//如果格子是空白时  DIM是单方向上的格子数
			//放置棋子
		{
			if(grid[j * DIM + i] == 0)
			{
				//获取替换玩家棋子的数目
				replace1 = isGood(j, i, 3, 2);
				if(replace1 > 0)
				{
					cplace1 = j;
					cplace2 = i;
					break;
				}
				else
				{
					i = (int)(Math.random() * DIM); 
					j = (int)(Math.random() * DIM); 
				}
					
			}
			else
			{
				i = (int)(Math.random() * DIM); 
				j = (int)(Math.random() * DIM); 
			}
			times++;
		}
		blueNotMoving = false;
		//如果电脑替换玩家棋子的数目大于零时
		if (replace1 > 0) 
		{
			//将格子中的棋子设为蓝棋
			grid[cplace1 * DIM + cplace2] = BLUE;
			//并将相应两个蓝棋间的红棋由蓝棋取而代之
			change(cplace1, cplace2, 3, 2, 4);
		} 
		//否则放弃这一步
		else
			blueNotMoving = true;
	}

	
	// 电脑出棋的函数 
	// 分为三种不同的难度
	// 此项为中级电脑

	public synchronized void blueMove1() 
	{
		//replace1,replace2用来记录替换玩家棋子的数目
		int replace1 = -1;
		int replace2 = -1;
		//cplace1,cplace2用来记录电脑放置棋子的位置
		int cplace1 = -1;
		int cplace2 = -1;
		int uptodown;
		//从上往下,从左至右,分析在每一个空白各自上,
		//电脑放棋后,所能替换玩家棋子的数目,取数目
		//最大时的格子,如果有几个最大值,取最先者
		for (uptodown = 0; uptodown < DIM; ++uptodown) 
		{
			int lefttoright;
			for (lefttoright = 0; lefttoright < DIM; ++lefttoright) 
			{
				//如果格子是空白时  DIM是单方向上的格子数
				if (grid[uptodown * DIM + lefttoright] == 0) 
				{
					//获取替换玩家棋子的数目
					replace2 = isGood(uptodown, lefttoright, 3, 2);
					//取数目最大时的格子的位置值(cplace1,cplace2)
					if (replace1 < replace2 && replace2 > 0) {
						replace1 = replace2;
						cplace1 = uptodown;
						cplace2 = lefttoright;
					}
				}
			}
		}
		blueNotMoving = false;
		//如果电脑替换玩家棋子的数目大于零时
		if (replace1 > 0) 
		{
			//将格子中的棋子设为蓝棋
			grid[cplace1 * DIM + cplace2] = BLUE;
			//并将相应两个蓝棋间的红棋由蓝棋取而代之
			change(cplace1, cplace2, 3, 2, 4);
		} 
		//否则放弃这一步
		else
			blueNotMoving = true;
	}
	
	//
	
	// 电脑出棋的函数 
	// 分为三种不同的难度
	// 此项为高级电脑

	public synchronized void blueMove2() 
	{
		//replace1,replace2用来记录替换玩家棋子的数目
		int replace1 = -1;
		int replace2 = -1;
		//cplace1,cplace2用来记录电脑放置棋子的位置
		int cplace1 = -1;
		int cplace2 = -1;
		int uptodown;
		//从上往下,从左至右,分析在每一个空白各自上,
		//电脑放棋后,所能替换玩家棋子的数目,取数目
		//最大时的格子,如果有几个最大值,取最先者
		for (uptodown = 0; uptodown < DIM; ++uptodown) 
		{
			int lefttoright;
			for (lefttoright = 0; lefttoright < DIM; ++lefttoright) 
			{
				//如果格子是空白时  DIM是单方向上的格子数
				if (grid[uptodown * DIM + lefttoright] == 0) 
				{
					//获取替换玩家棋子的数目
					replace2 = isGood(uptodown, lefttoright, 3, 2);
					//取数目最大时的格子的位置值(cplace1,cplace2)
					if (replace1 < replace2 && replace2 > 0) {
						replace1 = replace2;
						cplace1 = uptodown;
						cplace2 = lefttoright;
					}
				}

⌨️ 快捷键说明

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