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

📄 test.cpp

📁 Billy The Plumber
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int yPos=0;
	int Pointing=0;

	if(Player.Direction!="STOP")
		Pointing=DirToInt(Player.Direction);
	else
		Pointing=DirToInt(Player.Pointing);

	/********* DRAWS THE LEVEL *******/
	for(int x=0; x<Level.MapSizeX; x++)
	{
		for(int y=0; y<Level.MapSizeY; y++)
		{
			if(Player.x == x && Player.y == y)
				BitBlt(hBBufDC, x*GRIDSIZE, y*GRIDSIZE, GRIDSIZE, GRIDSIZE, Graphics.DCPlayer,	GRIDSIZE*Player.Doing, GRIDSIZE*Pointing, SRCCOPY);

			else if(Level.Level[x][y] == CRATE)
				Paint(x,y,hBBufDC, 6, 0);

			else if(Level.Level[x][y] == DYNAMITE)
				Paint(x,y,hBBufDC, 6, 1);

			else if(Level.Level[x][y] == BOULDER)
				Paint(x,y,hBBufDC, 7, 1);

			else if(Level.Level[x][y] == WATER)
				Paint(x,y,hBBufDC, 8, 0);

			else if(Level.Level[x][y] == BRIDGE)
				Paint(x,y,hBBufDC, 8, 1);

			else if(Level.Level[x][y] == BUTTON)
				Paint(x,y,hBBufDC, 3, 4+GasON);

			else if(Level.Level[x][y] == WALL)
			{
				CheckWallPic(x, y, xPos, yPos, Level.Level, WALL);
				Paint(x,y,hBBufDC, xPos, yPos);
			}
			else if(Level.Level[x][y] == ARMEDWALL)
				Paint(x,y,hBBufDC, 7, 0);

			else if(Level.Level[x][y] == FLAME)
				Paint(x,y,hBBufDC, 6, 2);

			else if(Level.Level[x][y] == ' ')
				BitBlt(hBBufDC, x*GRIDSIZE, y*GRIDSIZE, GRIDSIZE, GRIDSIZE, 0, 0, 0, SRCCOPY);

			else if(Level.Level[x][y] == CLOGGER)
				Paint(x,y,hBBufDC, 5, 3);

			else if(Level.Level[x][y] == SHIFTKEY)
				Paint(x,y,hBBufDC, 6, 3);
			
			else if(Level.Level[x][y] == BRIDGEPLATE)
				Paint(x,y,hBBufDC, 7, 3);
			
			else if(Level.Level[x][y] == SCUBBAGEAR)
				Paint(x,y,hBBufDC, 8, 3);

			else if(Level.Level[x][y] == TOILETT)
			{
				if(NumTeleports==1)
					Paint(x,y,hBBufDC, 4, 4);
				else
				{
					for(int i=0; i<NumTeleports; i++)
					{
						if(Toilett.x[i]==x && Toilett.y[i]==y)
						{
							if(Toilett.Cloged[i])
								Paint(x,y,hBBufDC, 5, 4);
							else
								Paint(x,y,hBBufDC, 6, 4);
						}
					}
				}
			}

			else if(isdigit(Level.Level[x][y]))
			{
				char TempChar[1];
				TempChar[0]=Level.Level[x][y];
				TempChar[1]='\0';
				Paint(x,y,hBBufDC, 4+CharToInt(TempChar), 5);
			}
			else if(Level.Level[x][y] == END)
				Paint(x,y,hBBufDC, 4, 3);

			else if(Level.Level[x][y] != START)
				Paint(x,y,hBBufDC, 9, 0);
			
			
			if(Boulder.Moves)
				Paint(Boulder.x,Boulder.y,hBBufDC, 7, 1);
		}
	}
	for(x=0; x<Level.MapSizeX; x++)
	{
		for(int y=0; y<Level.MapSizeY; y++)
		{
			if(Level.Level[x][y]==FLAME)
				Level.Level[x][y]=' ';
		}
	}

	if(GasON)
		DrawGas(hBBufDC);


	/*Draws the bottom bar*/
	for(int i=0; i<19; i++)
		BitBlt(hBBufDC, (3+i)*32, 16*32, 32, 64, Graphics.DCGraphics, 4*32, 6*32, SRCCOPY);
	/* OXYGEN */
	BitBlt(hBBufDC, 0, 16*32, 96, 64, Graphics.DCGraphics, 0, 6*32, SRCCOPY);
	/** LEVEL **/
	BitBlt(hBBufDC, 9*32, 16*32, 32, 64, Graphics.DCGraphics, 2*32, 6*32, SRCCOPY);
	/** ITEMS **/ 
	for(int t=0; t<4; t++)
		BitBlt(hBBufDC, (4+t)*32, 16*32, 32, 64, Graphics.DCGraphics, 3*32, 6*32, SRCCOPY);

	if(Player.HasClogger)
		BitBlt(hBBufDC, 4*32, 16.5*32, 32, 32, Graphics.DCGraphics, 5*32, 3*32, SRCCOPY);
	if(Player.HasShiftKey)
		BitBlt(hBBufDC, 5*32, 16.5*32, 32, 32, Graphics.DCGraphics, 6*32, 3*32, SRCCOPY);
	if(Player.NumBridges>0)
		BitBlt(hBBufDC, 6*32, 16.5*32, 32, 32, Graphics.DCGraphics, 7*32, 3*32, SRCCOPY);
	if(Player.Oxygen>0)
		BitBlt(hBBufDC, 7*32, 16.5*32, 32, 32, Graphics.DCGraphics, 8*32, 3*32, SRCCOPY);

	/* THE HEAD */
	BitBlt(hBBufDC, 20*32, 16*32, 64, 64, Graphics.DCGraphics, 5*32, 6*32, SRCCOPY);

	/* OXYGEN */
	for(int r=0; r<4; r++)
	{
		if(Player.Oxygen>r)
			BitBlt(hBBufDC, 64+(r*8), (16*32)+21, 8, 23, Graphics.DCGraphics, (7*32)+8, 6*32, SRCCOPY);
		else
			BitBlt(hBBufDC, 64+(r*8), (16*32)+21, 8, 23, Graphics.DCGraphics, 7*32, 6*32, SRCCOPY);
	}
	/**********************/
}
/*******************************************************************\
*					MOVES THE PLAYER ONE STEP						*
\*******************************************************************/
void Move()
{
	/*** CHECKS IF YOU DIED BY THE GAS ***/
	if(GasON)
	{
		int Pos=Gas.Level[Player.x][Player.y];

		if(Pos=='1' || Pos=='2' || Pos=='3' || Pos=='4')
			Dead();
	}
	/** CHECKS IF YOU DIED BY THE FLAME **/
	if(Level.Level[Player.x][Player.y]==FLAME)
		Dead();
	/*************************************/

	int	TempY	=Player.y;
	int	TempX	=Player.x;

	if(Boulder.Moves)
	{
		Boulder.Moves=MoveBoulder(Level.Level,Boulder);
		if(!Boulder.Moves)
			PlaySound("BoulderStop",SND_ASYNC);
	}
	else
	{
		/********** Up **********/
		if(Player.Direction=="UP")
			TempY--;
		/********* DOWN *********/
		if(Player.Direction=="DOWN")
			TempY++;
		/********* LEFT *********/
		if(Player.Direction=="LEFT")
			TempX--;
		/********* Right ********/
		if(Player.Direction=="RIGHT")
			TempX++;

		if(TempX>21)
			TempX=0;
		if(TempX<0)
			TempX=21;
		if(TempY>15)
			TempY=0;
		if(TempY<0)
			TempY=15;

		if(Level.Level[TempX][TempY]==SHIFTKEY)
		{
			Level.Level[TempX][TempY]=' ';
			Player.HasShiftKey=true;
		}
		if(Level.Level[TempX][TempY]==CLOGGER)
		{
			Level.Level[TempX][TempY]=' ';
			Player.HasClogger=true;
		}
		if(Level.Level[TempX][TempY]==BRIDGEPLATE)
		{
			Level.Level[TempX][TempY]=' ';
			Player.NumBridges++;
		}
		if(Level.Level[TempX][TempY]==SCUBBAGEAR)
		{
			Level.Level[TempX][TempY]=' ';
			Player.Oxygen=4;
		}
		if(Level.Level[TempX][TempY]==TOILETT)
		{
			if(TempX!=Player.x || TempY!=Player.y)
			{
				for(int i=0; i<NumTeleports; i++)
				{
					if(Toilett.x[i]==TempX && Toilett.y[i]==TempY)
					{
						if(Toilett.Cloged[i]==false)
						{
							if(i==NumTeleports-1)
							{
								if(!Toilett.Cloged[0])
								{
									Player.x=Toilett.x[0];
									Player.y=Toilett.y[0];
									PlaySound("Flush", SND_ASYNC);
								}
							}
							else
							{
								if(!Toilett.Cloged[i+1])
								{
									Player.x=Toilett.x[i+1];
									Player.y=Toilett.y[i+1];
									PlaySound("Flush", SND_ASYNC);
								}
							}
						}
						else if(Player.HasClogger==true)
							Toilett.Cloged[i]=false;
					}
				}
			}
		}

		if(Level.Level[TempX][TempY]==WATER)
		{
			if(Player.NumBridges>0)
			{
				Level.Level[TempX][TempY]=BRIDGE;
				Player.NumBridges--;

				TempX			=Player.x;
				TempY			=Player.y;
			}
		}

		if(Level.Level[TempX][TempY]==BUTTON)
		{
			if(Player.HasShiftKey)
			{
				if(GasON)
					GasON	=false;
				else
					GasON	=true;
				PlaySound("Button.wav", SND_NOSTOP | SND_ASYNC);
			}
		}

		if(Level.Level[TempX][TempY]==CRATE)
		{
			MoveCrate(TempX, TempY, Player.Direction, Level.Level, CRATE);
			TempX			=Player.x;
			TempY			=Player.y;
		}

		if(Level.Level[TempX][TempY]==DYNAMITE)
			MoveCrate(TempX, TempY, Player.Direction, Level.Level, DYNAMITE);	

		if(Level.Level[TempX][TempY]==BOULDER)
		{
			Boulder.Dir		=Player.Direction;
			Boulder.x		=TempX;
			Boulder.y		=TempY;
			Boulder.Moves	=MoveBoulder(Level.Level, Boulder);

			if(Boulder.Moves)
				PlaySound("Boulder.wav", SND_NOSTOP | SND_ASYNC);
		}

		if(Level.Level[TempX][TempY]==END)
		{
			PlaySound("End.wav", SND_ASYNC);
			KillTimer(hWnd,uTimer);
			uTimer			=0;

			char Puzzel[50]="Congratulazions you have completed puzzel ";
			int len=strlen(Puzzel);
			for(int i=0; i<strlen(Level.CurrentMap); i++)
				Puzzel[len+i]=Level.CurrentMap[i];

			MessageBox(hWnd,Puzzel,"Bravo",MB_OK);
			LoadLevel(IntToChar(CharToInt(Level.CurrentMap)+1));

			TempX			=Player.x;
			TempY			=Player.y;
		}

		if(isdigit(Level.Level[TempX][TempY]) && (TempX!=Player.x || TempY!=Player.y))
		{
			char			TempChar[1];
			int				TempInt=0;
			TempChar[0]		=Level.Level[TempX][TempY];
			TempChar[1]		='\0';
			TempInt			=CharToInt(TempChar);
			if(TempInt>0)
			{
				TempInt--;
				Level.Level[TempX][TempY]=TempInt+48;
				Player.x	=TempX;
				Player.y	=TempY;
				PlaySound("Plate", SND_NOSTOP | SND_ASYNC);
			}
		}
	}

	if((TempX!=Player.x || TempY!=Player.y))
	{
		if(Walkable(Level.Level[TempX][TempY]) && !Boulder.Moves)
		{
			// Prevents you from going into the gas
			if(!GasON || ((Gas.Level[TempX][TempY]>='5' && Gas.Level[TempX][TempY]<='8') || Gas.Level[TempX][TempY]==' '))
			{
				Player.x			=TempX;
				Player.y			=TempY;
			}
			else
			{
				TempX				=Player.x;
				TempY				=Player.y;
			}
		}
		else if(Level.Level[TempX][TempY]==WATER && Player.Oxygen>0)
		{
			Player.x			=TempX;
			Player.y			=TempY;
			Player.Oxygen--;
		}
	}

	if(Level.Level[Player.x][Player.y]==WATER)
		Player.Doing=SWIMMING;
	else if(CheckIfPusching(Player.x, Player.y, Player.Direction, Level.Level))
		Player.Doing=PUSCHING;
	else if(CheckIfPusching(TempX, TempY, Player.Pointing, Level.Level))
		Player.Doing=PUSCHING;
	else
		Player.Doing=NORMAL;
	
	SendMessage(hWndMe, WM_PAINT, 0, NULL);
}
/*******************************************************************\
*						WHEN YOU ARE DEAD							*
\*******************************************************************/
void Dead()
{
	GasON				=true;

	Player.HasClogger	=false;
	Player.HasShiftKey	=false;
	Player.NumBridges	=0;
	Player.Oxygen		=0;

	LoadLevel(Level.CurrentMap);	
}
/*******************************************************************\
*							LOADS MAP								*
\*******************************************************************/
void LoadLevel(char *Map)
{
	GasON=true;

	Player.HasClogger	=false;
	Player.HasShiftKey	=false;
	Player.NumBridges	=0;
	Player.Oxygen		=0;

	Level.CurrentMap=Map;
	char MapPath[30]="Levels\\";
	char GasPath[30]="Levels\\";

	for(int u=0; u<strlen(Map); u++)
	{
		MapPath[u+7]=Map[u];
	}
	for(u=0; u<strlen(Map); u++)
	{
		GasPath[u+7]=Map[u];
	}
	GasPath[strlen(GasPath)]='.';
	GasPath[strlen(GasPath)]='g';
	GasPath[strlen(GasPath)]='a';
	GasPath[strlen(GasPath)]='s';

	MapPath[strlen(MapPath)]='.';
	MapPath[strlen(MapPath)]='t';
	MapPath[strlen(MapPath)]='x';
	MapPath[strlen(MapPath)]='t';

	char c;
	ifstream Levels;
	ifstream GAS;

	Levels.open(MapPath);
	if(!Levels)
	{
		MessageBox(0,"The map file could not be found.","Error", MB_ICONERROR);
		PostQuitMessage(0);
	}

	NumTeleports=0;
	bool cFound=false;
	int x=0;
	int y=0;
	while(Levels.get(c))
	{
		if(c == TOILETT || c == TOILETTCLOGGED)
		{
			Toilett.x[NumTeleports]=x;
			Toilett.y[NumTeleports]=y;
			NumTeleports++;
		}
		if(c==CLOGGER)
			cFound=true;
		if(c=='\n')
		{
			y++;
			x=0;
		}
		else
		{
			Level.Level[x][y]=c;
			/* CHECKS WERE THE STARTING POS IS */
			if(c=='S')
			{
				Player.x=x;
				Player.y=y;
			}
			/***********************************/
			x++;
		}
	}
	
	for(int i=0; i<NumTeleports; i++)
	{
		if(Level.Level[Toilett.x[i]][Toilett.y[i]] == TOILETTCLOGGED && cFound)
		{	
			Level.Level[Toilett.x[i]][Toilett.y[i]]=TOILETT;
			Toilett.Cloged[i]=true;
		}
		else
			Toilett.Cloged[i]=false;
	}

	GAS.open(GasPath);
	if(!GAS)
	{
		MessageBox(0,"The gas file could not be found.","Error", MB_ICONERROR);
		PostQuitMessage(0);
	}

	x=0;
	y=0;
	while(GAS.get(c))
	{
		if(c=='\n')
		{
			y++;
			x=0;
		}
		else
		{
			Gas.Level[x][y]=c;
			x++;
		}
	}
}

⌨️ 快捷键说明

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