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

📄 j_fir_server.java

📁 单机黑白棋显示
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
									}
								//以上确认所邀请的用户是否还保持空闲状态
								if (FindOne) {
									
									if (NewGame) {
										m_output[i].writeObject(PLAY_REQUEST+userName[Code]);
									} else {
										m_output[i].writeObject(CONTINUE_REQUEST+userName[Code]);
										TransportationFinished[Code] = false;
										TransportationFinished[i] = false;
										//如果是"续下"模式就要进行文件传输
									}
									mb_displayAppend(userName[Code]+"向"+userName[i]+"发出了邀请。");
									
									while (Response[i].equals(NO_RESPONSE))
											;
									//等待对方回音
									str = Response[i];
																	
									if (str.equals(REQUEST_REJECTED)) {
										
										m_output[Code].writeObject(REQUEST_REJECTED);
										mb_displayAppend(userName[Code]+"的邀请被拒绝。");
										TransportationFinished[Code] = true;
										TransportationFinished[i] = true;
										
									} else {
										
										mBuf = new StringBuffer(str);
							
										if (mBuf.indexOf(REQUEST_ACCEPTED)==0) {
											mBuf.delete(0,REQUEST_ACCEPTED.length());
											str = mBuf.toString();
											
											if (str.equals(userName[Code])) {
										
												m_output[Code].writeObject(REQUEST_ACCEPTED);
												mb_displayAppend(userName[Code]+"成功邀请到"+userName[i]+"下棋!");
												MatchedClient[Code] = i;
												MatchedClient[i] = Code;					
												SideDecided[Code] = false;		
												SideDecided[i] = false;					
												SideQSent[Code] = false;
												SideQSent[i] = false;
												SideChosen[Code] = -1;
												SideChosen[i] = -1;
												//邀请成功后需要选棋等等
											}
										}
										
									}
										
									} else {
										m_output[Code].writeObject(REQUEST_REJECTED);
										mb_displayAppend(userName[Code]+"所邀请的用户已下线或正在下棋。");
									}
							} else
							if (mBuf.indexOf(REQUEST_ACCEPTED)==0)  {
								Response[Code] = str;
								MatchedClient[Code] = -2;
								//接收了其他客户端的邀请,但对方姓名未在此发送,故用-2代替;用-2的其他原因自己有点忘记了。。。
								mb_displayAppend("收到"+userName[Code]+"的接受邀请的回复。");
							} else
							if (str.equals(REQUEST_REJECTED)) {
								Response[Code] = str;
								mb_displayAppend("收到"+userName[Code]+"的拒绝邀请的回复。");
							} else
							if (str.equals(EXIT_SERVER)) {
								//退出服务器
								m_output[Code].writeObject(EXIT_SERVER);
								Disconnected = true;
							} else
							if (str.equals(REPLAYING_GAME)) {
								//正在复盘,请勿打扰
								isReplaying[Code] = true;
							} else
							if (str.equals(EXIT_REPLAY)) {
								//退出复盘,回归空闲状态
								isReplaying[Code] = false;
							}
										
					}
					 
					if (Disconnected) break;
					
					if (MatchedClient[Code]!=-1 && MatchedClient[Code]!=-2) {
						
						u = Code;	
						v = MatchedClient[Code];
						//为使下文简便,使用u,v分别代表两方
						
						if (TransportationFinished[Code]) {
						//正常模式或"续下"模式传输结束
							if (u<v && !SideDecided[u]) {
								SideQSent[u] = true;
								SideQSent[v] = true;
								m_output[u].writeObject(SIDE_DECISION);
								mb_displayAppend("向"+userName[u]+"询问黑白棋选择。");
								m_output[v].writeObject(SIDE_DECISION);
								mb_displayAppend("向"+userName[v]+"询问黑白棋选择。");
							}
							
							while (!SideQSent[u])
								;						
							//以上是强制u,v中有且仅有一个执行上面的语句块
						} 
						str = (String) m_input[u].readObject();
						mBuf = new StringBuffer(str);
						
						if (mBuf.indexOf(SIDE_COLOR)==0) {
							mBuf.delete(0,SIDE_COLOR.length());
							str = mBuf.toString();
						
							if (str.equals("BLACK")) {
								SideDecided[u] = true;
								SideChosen[u] = 1; 
								mb_displayAppend(userName[u]+"选择了黑棋。");
							} else 
							if (str.equals("WHITE")) {
								SideDecided[u] = true;
								SideChosen[u] = 2;
								mb_displayAppend(userName[u]+"选择了白棋。");
							} else
							if (str.equals("RANDOM")) {
								SideDecided[u] = true;
								SideChosen[u] = 3;
								mb_displayAppend(userName[u]+"选择了随机。");
							}
						
								
							while (SideChosen[v]==-1)
								;
							//等待对方选棋
							if (u<v) { //强制只执行一次
								if (SideChosen[u]==1 && SideChosen[v]==2) {
								} else
								if (SideChosen[u]==2 && SideChosen[v]==1) {
									i = v; v = u; u = i;
								} else {
									i = (int)(Math.random()*2)+1;
									if (i==1) { i = v; v = u; u = i; }
								}
								
								m_output[u].writeObject(SIDE_COLOR+"BLACK");
								mb_displayAppend(userName[u]+"执黑先下。");
								m_output[v].writeObject(SIDE_COLOR+"WHITE");
								mb_displayAppend(userName[v]+"执白后下。");
								
							}
						} else
						if (mBuf.indexOf(PLAYING_COMMAND)==0) {
								mb_displayAppend(userName[u]+"下棋了。");
								m_output[v].writeObject(str);
						} else
						if (mBuf.indexOf(WINNER_DECIDED)==0) {
								mBuf.delete(0,WINNER_DECIDED.length());
								str = mBuf.toString();
								if (str.equals("Win")) {
									mb_displayAppend(userName[u]+"战胜了"+userName[v]+"!");
									m_output[u].writeObject(WINNER_DECIDED+"Win");
									m_output[v].writeObject(WINNER_DECIDED+userName[u]);
								} else {
									mb_displayAppend(userName[v]+"战胜了"+userName[u]+"!");
									m_output[v].writeObject(WINNER_DECIDED+userName[v]);
									m_output[v].writeObject(WINNER_DECIDED+"Win");
								}
								
						} else
						if (str.equals(PLAY_AGAIN)) {
							mb_displayAppend(userName[u]+"想和"+userName[v]+"再下一盘。");
							m_output[v].writeObject(str);
						} else
						if (str.equals(I_WANT_TO_GO)) {
							mb_displayAppend(userName[u]+"离开了对局室,回到了广场。");
							if (MatchedClient[v]==u) m_output[v].writeObject(str);
							MatchedClient[u] = -1;
						}	else			
						if (str.equals(EXIT_SERVER)) {
							m_output[Code].writeObject(EXIT_SERVER);
							Disconnected = true;
							break;
						}	else
						if (mBuf.indexOf(STEP_NUM)==0) {
							//"续下"模式中 传输棋的步数
							m_output[v].writeObject(str);
							mBuf.delete(0,STEP_NUM.length());
							str = mBuf.toString();
							Continue_n = Integer.parseInt(str);
							TransportationCount = -1;
							if (Continue_n>-1) TransportationFinished[Code] = false;
						} else
						if (mBuf.indexOf(STEP_CONTENT)==0) {
							//"续下"模式中 传输每步棋的位置
							TransportationCount++;
							if (TransportationCount==Continue_n) TransportationFinished[Code] = true;
							mb_displayAppend("已传输了"+(TransportationCount+1)+"步");
							m_output[v].writeObject(str);													
						} else 
						if (str.equals(DATA_RECEIVING_COMPLETED)) {
							//"续下"模式 传输结束
							TransportationFinished[u] = true;							
						} else 
						if (str.equals(I_REGRET)) {
							//悔棋
							m_output[v].writeObject(str);
						} else
						if (str.equals(REGRET_AS_YOU_LIKE)) {
							//同意悔棋
							m_output[v].writeObject(str);
						} else
						if (str.equals(NO_REGRET)) {
							//拒绝悔棋,这几处server都充当"传话筒"
							m_output[v].writeObject(str);
						} else
						{
							//其余都归于聊天
							mb_displayAppend(userName[u]+"对"+userName[v]+"说:"+str);
							m_output[v].writeObject(str);
						}											
					}
				}
			}
			catch (Exception ee)
			{
				System.out.println("出现异常:"+ee);
				ee.printStackTrace();
			}
			finally
			{
				try
				{
					mb_displayAppend("用户"+Code+"已断开与服务器的连接。");
					if (MatchedClient[Code]>=0) m_output[MatchedClient[Code]].writeObject(DROP_LINE);
					ClientOccupied[Code] = false;
					m_clientNumber--;
				}
				catch (Exception ee)
				{
					System.out.println("出现异常:"+ee);
					ee.printStackTrace();
				}
			}
			
		}
	}
	
	public static void main(String args[])
	{
		J_FIR_Server app = new J_FIR_Server();
		
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.setSize(400,400);
		app.setVisible(true);
		app.mb_run();
	}
}

⌨️ 快捷键说明

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