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

📄 maze.h

📁 Visual C++游戏开发技术与实例一书配套光盘。包含了冒险屠宰场、入侵者、赛车、网络五子棋、网络台球、对战坦克大战和面包圈7个游戏实例的完整源代码。
💻 H
📖 第 1 页 / 共 5 页
字号:
											{
												dir=1;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
												turn=0;
												max=markall[x-1][y];
												if(max<markall[x+1][y])
												{	max=markall[x+1][y] ;}
												num=0;
												if(max==markall[x-1][y])	num+=1;
												if(max==markall[x+1][y])	num+=2;
												tag++;
												SubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
												}
											}
										}
										else
										{
											dir=1;
											turn=0;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=3;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
												turn=1;
												max=markall[x-1][y];
												if(max<markall[x+1][y])
												{	max=markall[x+1][y] ;}
												num=0;
												if(max==markall[x-1][y])	num+=1;
												if(max==markall[x+1][y])	num+=2;
												tag++;
												SubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
												}
											}
										}
									}
								}
							
							break;
					case 13:
								// all go to (x-1,y) and (x,y-1) and (x,y+1)
								turn=0;
								for(i=0;i<n;i++)
								{	
									if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
									{
										dir=0;
										if(tag==4)
										{
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											tag=0;
											return ;
										}
										switch(turn)
										{
										case 0:
											dir=0;
											turn=1;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=3;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
													dir=1;
													if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
													{
														turn=0;
														dir=2;
														if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
														{
															dir=0;
															_stackarray[i].TestDirection(dir,markall,mark,pos);
															
														}
													}
												}
											}
											break;
										case 1:
											dir=3;
											turn=2;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=1;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
													dir=0;
													if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
													{
														turn=1;
														dir=2;
														if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
														{
															dir=0;
															_stackarray[i].TestDirection(dir,markall,mark,pos);
															
														}
													}
												}
											}
											break;
										case 2:
											dir=1;
											turn=0;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=0;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
													dir=3;
													if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
													{
														turn=2;
														dir=2;
														if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
														{
															dir=0;
															_stackarray[i].TestDirection(dir,markall,mark,pos);
															
														}
													}
												}
											}
											break;
										}
									}
								}
								break;
					case 14:
								// all go to (x+1,y) and (x,y-1) and (x,y+1)
								turn=0;
								for(i=0;i<n;i++)
								{	
									if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
									{
										dir=0;
										if(tag==4)
										{
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											tag=0;
											return ;
										}
										switch(turn)
										{
										case 0:
											dir=2;
											turn=1;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=3;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
													dir=1;
													if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
													{
														turn=0;
														dir=0;
														if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
														{
															dir=0;
															_stackarray[i].TestDirection(dir,markall,mark,pos);
															
														}
													}
												}
											}
											break;
										case 1:
											dir=3;
											turn=2;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=1;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
													dir=1;
													if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
													{
														turn=1;
														dir=2;
														if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
														{
															dir=0;
															_stackarray[i].TestDirection(dir,markall,mark,pos);
															
														}
													}
												}
											}
											break;
										case 2:
											dir=1;
											turn=0;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=2;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
													dir=3;
													if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
													{
														turn=2;
														dir=0;
														if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
														{
															dir=0;
															_stackarray[i].TestDirection(dir,markall,mark,pos);
															
														}
													}
												}
											}
											break;
									     
										}
									}
								}
								break;
					case 15:	// all go to (x-1,y) and (x+1,y) and (x,y-1) and (x,y+1)
								turn=0;
								for(i=0;i<n;i++)
								{	
									if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
									{
										dir=0;
										if(tag==4)
										{
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											tag=0;
											return ;
										}
										switch(turn)
										{
										case 0:
											dir=0;
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											turn=1;
											break;
										case 1:
											dir=1;
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											turn=2;
											break;
										case 2:
											dir=2;
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											turn=3;
											break;
										case 3:
											dir=3;
											_stackarray[i].TestDirection(dir,markall,mark,pos);
											turn=0;
											break;
										}
									}
								}
								break;
					default:
							break;
					}

}

void HumanSubAllocate(int count,Stack _stackarray[],int n,element position,int markall[CONST_MAZEX][CONST_MAZEY],bool mark[CONST_MAZEX][CONST_MAZEY],int pos[CONST_MAZEX][CONST_MAZEY],int &tag)
// hxm end
{
		int max,i;
		int num;
		int dir;
		int x=position.row;
		int y=position.col;
		int turn;
		
		switch(count)
		{
			case 1:	// all go to (x-1,y)
				for(i=0;i<n;i++)
				{	
					if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
					{		
													
								dir=0;
								if(tag==4)
								{
									_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
									tag=0;
									return ;
								}
								if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
								{
									max=markall[x+1][y];
									if(max<markall[x][y-1])
									{	max=markall[x][y-1];}
									if(max<markall[x][y+1])
									{	max=markall[x][y+1];}
									num=0;
									if(max==markall[x+1][y])	num+=2;
									if(max==markall[x][y-1])	num+=4;
									if(max==markall[x][y+1])	num+=8;
									tag++;
									HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
								}
					}
				}
				break;
			case 2:		// all go to (x+1,y)
						for(i=0;i<n;i++)
						{	
							if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
							{		
								dir=2;
								if(tag==4)
								{
									_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
									tag=0;
									return ;
								}
								if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
								{
									max=markall[x-1][y];
									if(max<markall[x][y-1])
									{	max=markall[x][y-1];}
									if(max<markall[x][y+1])
									{	max=markall[x][y+1];}
									num=0;
									if(max==markall[x-1][y])	num+=1;
									if(max==markall[x][y-1])	num+=4;
									if(max==markall[x][y+1])	num+=8;
									tag++;
									HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
								}
							}
						}
						break;
			case 3:		// all to (x-1,y) and (x+1,y)
						turn=0;
						for(i=0;i<n;i++)
						{	
							if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
							{
								if(turn==0)
								{
									dir=0;
									if(tag==4)
									{
										_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
										tag=0;
										return ;
									}
									turn=1;
									if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
									{
										dir=2;
										if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
										{
											turn=0;
											max=markall[x][y-1];
											if(max<markall[x][y+1])
											{	max=markall[x][y+1];}
											num=0;
											if(max==markall[x][y-1])	num+=4;
											if(max==markall[x][y+1])	num+=8;
											tag++;
											HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
										}
									}
								}
								else
								{
									dir=2;
									if(tag==4)
								{
									_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
									tag=0;
									return ;
								}
									if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
									{
										dir=0;
										turn=0;
										if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
										{
											turn=1;
											max=markall[x][y-1];
											if(max<markall[x][y+1])
											{	max=markall[x][y+1] ;}
											num=0;
											if(max==markall[x][y-1])	num+=4;
											if(max==markall[x][y+1])	num+=8;
											tag++;
											HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
										}
									}
								}
							}
						}
						break;
							
			case 4:	
						// all go to (x,y-1)
						for(i=0;i<n;i++)
						{	
							if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
								{
										dir=3;
										if(tag==4)
										{
											_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
											tag=0;
											return ;
										}
										if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
										{
											max=markall[x-1][y];
											if(max<markall[x+1][y])
											{	max=markall[x+1][y] ;}
											if(max<markall[x][y+1])
											{	max=markall[x][y+1] ;}
											num=0;
											if(max==markall[x-1][y])	num+=1;
											if(max==markall[x+1][y])	num+=2;
											if(max==markall[x][y+1])	num+=8;
											tag++;
											HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);						
										}
								}
						}
						break;
				case 5:			// all go to (x-1,y) and (x,y-1)
								turn=0;
								for(i=0;i<n;i++)
								{	
									if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
									{
										if(turn==0)
										{
											dir=0;
											if(tag==4)
											{
												_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
												tag=0;
												return ;
											}
											turn=1;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=3;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
												turn=0;
												max=markall[x+1][y];
												if(max<markall[x][y+1])
												{	max=markall[x][y+1] ;}
												num=0;
												if(max==markall[x+1][y])	num+=2;
												if(max==markall[x][y+1])	num+=8;
												tag++;
												HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
												}
											}
										}
										else
										{
											dir=3;
											if(tag==4)
											{
												_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
												tag=0;
												return ;
											}
											turn=0;
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=0;

												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
												turn=1;
												max=markall[x+1][y];
												if(max<markall[x][y+1])
												{	max=markall[x][y+1] ;}
												num=0;
												if(max==markall[x+1][y])	num+=2;
												if(max==markall[x][y+1])	num+=8;
												tag++;
												HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);					
												}
											}
										}
									}
								}
								break;
					case 6:		// all go to (x+1,y) and (x,y-1)
								turn=0;
								for(i=0;i<n;i++)
								{	
									if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
									{
										if(turn==0)
										{
											turn=1;
											dir=2;
											if(tag==4)
											{
												_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
												tag=0;
												return ;
											}
											if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
											{
												dir=3;
												if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
												{
												turn=0;
												max=markall[x-1][y];
												if(max<markall[x][y+1])

⌨️ 快捷键说明

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