📄 test.cpp
字号:
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 + -