/* ================================================================== // This is winmain, the main entry point for Windows applications ================================================================== */ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) { // Initialize the window if ( !initWindow( hInstance ) ) return false; // called after creating the window if ( !d3dMgr->initD3DManager(wndHandle) ) return false; if ( !d3dxSRMgr->initD3DXSpriteMgr(d3dMgr->getTheD3DDevice())) return false; // Grab the frequency of the high def timer __int64 freq = 0; // measured in counts per second; QueryPerformanceFrequency((LARGE_INTEGER*)&freq); float sPC = 1.0f / (float)freq; // number of seconds per count __int64 currentTime = 0; // current time measured in counts per second; __int64 previousTime = 0; // previous time measured in counts per second; float numFrames = 0.0f; // Used to hold the number of frames float timeElapsed = 0.0f; // cumulative elapsed time GetClientRect(wndHandle,&clientBounds); float fpsRate = 1.0f/25.0f; //variables to hold the monkey, banana and new banana positions D3DXVECTOR3 monkeyPos; D3DXVECTOR3 BananaPos; D3DXVECTOR3 NewPos; //string to hold the score and display on screen sprintf_s( gScoreStr, 50, "Score : %d", gScore); //=========================================================== // load texture for the bananas //=========================================================== for (int txture = 0; txture < 1; txture++) { BananaTextures[txture] = new cD3DXTexture(d3dMgr->getTheD3DDevice(), BananaTxtres[txture]); } //create a texture for the explosion txtExp->createTexture(d3dMgr->getTheD3DDevice(),"Images\\explosion.png"); //create a texture for the monkey cD3DXTexture* txtMonkey = new cD3DXTexture(); txtMonkey->createTexture(d3dMgr->getTheD3DDevice(),"Images\\theMonkey.png"); txtMonkey->setTextureInfo("Images\\theMonkey.png");//set the texture information ie. height, width theMonkey.setTranslation(D3DXVECTOR2(0.0f, 0.0f));//set the translation of the monkey theMonkey.setTexture(txtMonkey);//apply the texture to the monkey theMonkey.update();//update the monkey sprite /* initialize random seed: */ srand ( (unsigned int)time(NULL) ); //integer to hold the number of bananas int numBananas = 1; for(int loop = 0; loop < numBananas; loop++)//for each banana set the position, direction, speed and texture { BananaPos = D3DXVECTOR3((float)clientBounds.right/(2),(float)clientBounds.top-100,0); aBanana.push_back(new cBanana()); aBanana[loop]->setSpritePos(BananaPos); aBanana[loop]->setTranslation(D3DXVECTOR2(0.0f,speed)); aBanana[loop]->setTexture(BananaTextures[loop]); } LPDIRECT3DSURFACE9 TitleSurface;//the title surface LPDIRECT3DSURFACE9 GameSurface; //the main game background LPDIRECT3DSURFACE9 GameOverSurface; // the game over surface LPDIRECT3DSURFACE9 theBackbuffer = NULL; // This will hold the back buffer MSG msg; ZeroMemory( &msg, sizeof( msg ) ); // Create the background surface TitleSurface = d3dMgr->getD3DSurfaceFromFile("Images\\TitleScreen.png"); GameSurface = d3dMgr->getD3DSurfaceFromFile("Images\\GameBackground.png"); GameOverSurface = d3dMgr->getD3DSurfaceFromFile("Images\\GameOverSurface.png"); // load custom font cD3DXFont* balloonFont = new cD3DXFont(d3dMgr->getTheD3DDevice(),hInstance, "SNAP_"); //rectangle to hold the score during gameplay RECT textPos; SetRect(&textPos, 50, 10, 400, 100); //rectangle to hold the score on the gameover screen RECT textPos2; SetRect(&textPos2, 250, 250, 600, 400); QueryPerformanceCounter((LARGE_INTEGER*)&previousTime); while( msg.message!=WM_QUIT ) { // Check the message queue if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { // Game code goes here QueryPerformanceCounter((LARGE_INTEGER*)¤tTime); float dt = (currentTime - previousTime)*sPC; // Accumulate how much time has passed. timeElapsed += dt; if(timeElapsed > fpsRate) { //start rendering d3dMgr->beginRender(); if(mouseClicks==0)//if mouseClicks is equal to zero { theBackbuffer = d3dMgr->getTheBackBuffer(); d3dMgr->updateTheSurface(TitleSurface, theBackbuffer);//apply the title surface d3dMgr->releaseTheBackbuffer(theBackbuffer); gameOver=false;//set gameOver to false gScore = 0;//set gScore to zero sprintf_s( gScoreStr, 50, "Score : %d", gScore);//set the score string with zero } else { if(bananaSquash == 3)//if bananaSquash is equal to three { gameOver = true;//set gameOver to mouseClicks = -1;// set mouseClicks to negative one bananaSquash = 0;//set bananaSquash to zero speed = 50.0f;//set the speed to 50 } else { if(gameOver == true)//if gameOver is true { theBackbuffer = d3dMgr->getTheBackBuffer(); d3dMgr->updateTheSurface(GameOverSurface, theBackbuffer);//apply the game over surface d3dMgr->releaseTheBackbuffer(theBackbuffer); sprintf_s( gScoreStr, 50, "You Scored : %d", gScore);//update the score balloonFont->printText(gScoreStr,textPos2);//print the score on the gameOver surface } else { vector<cBanana*>::iterator iterBanana = aBanana.begin(); while(iterBanana != aBanana.end()) { (*iterBanana)->update(timeElapsed); // update banana BananaPos = (*iterBanana)->getSpritePos();//get the position of the banana if((*iterBanana)->collidedWith((*iterBanana)->getBoundingRect(), theMonkey.getBoundingRect())) //check if monkey and banana have collided { OutputDebugString("Collision!!");//if they have collided output collision iterBanana = aBanana.erase(iterBanana);//delete banana gScore++;//increment the score sprintf_s( gScoreStr, 50, "Score : %d", gScore);//update the score string speed = speed+3;//add three to the speed gMonkeySound.playSound(L"Sounds\\monkeySound2.wav",false);//play monkey sound effect } else { if (BananaPos.y >(clientBounds.bottom-60 ))//if the banana hits the floor { expPos = (*iterBanana)->getSpritePos();//get the banana position gExplode.push_back(new cExplosion(expPos,txtExp)); //play explosion animation at same position as banana gExplodeSound.playSound(L"Sounds\\explosion.wav",false);//play explosion sound iterBanana = aBanana.erase(iterBanana);//delete the banana OutputDebugString("Collision!!");//output collision bananaSquash++;//increment bananaSquash } else { ++iterBanana;// increment the iterator OutputDebugString("ITERBanana");//display ITERbanana } } } int vSize=aBanana.size();//integer to hold the size of aBanana BananaPos = aBanana[vSize-1]->getSpritePos();//variable to hold the position of the banana if(BananaPos.y>(clientBounds.bottom-300))//check if the banana has fallen past about 3 quarters of the way down the screen { int xPos = (rand() % 600 + 1);//integer variable to hold a random number for the new bananas x-position NewPos = D3DXVECTOR3((float)xPos,(float)clientBounds.top-100,0);//variable to hold new bananas starting position aBanana.push_back(new cBanana());//create a new banana vSize=aBanana.size();//get the size of aBanana aBanana[vSize-1]->setSpritePos(NewPos);//set the position for the new banana aBanana[vSize-1]->setTranslation(D3DXVECTOR2(0.0f,speed));//set the speed and direction of the new banana aBanana[vSize-1]->setTexture(BananaTextures[0]);//apply a texture to the new banana } monkeyPos = D3DXVECTOR3(monkeyTrans.x,monkeyTrans.y,0);//variable to hold the position of the monkey theMonkey.setSpritePos(monkeyPos);//set the position of the monkey theMonkey.update();//update the monkey sprite theBackbuffer = d3dMgr->getTheBackBuffer();//retrieve the backbuffer d3dMgr->updateTheSurface(GameSurface, theBackbuffer);//apply the game surface d3dMgr->releaseTheBackbuffer(theBackbuffer);//release the backbuffer d3dxSRMgr->beginDraw();//start drawing the window d3dxSRMgr->setTheTransform(theMonkey.getSpriteTransformMatrix());//set the position of the monkey sprite d3dxSRMgr->drawSprite(theMonkey.getTexture(),NULL,NULL,NULL,0xFFFFFFFF);// draw the monkey vector<cBanana*>::iterator iterB = aBanana.begin(); for(iterB = aBanana.begin(); iterB != aBanana.end(); ++iterB)//for each banana in aBanana { d3dxSRMgr->setTheTransform((*iterB)->getSpriteTransformMatrix()); //set the position of the banana d3dxSRMgr->drawSprite((*iterB)->getTexture(),NULL,NULL,NULL,0xFFFFFFFF);//draw the banana } list<cExplosion*>::iterator iter = gExplode.begin();//set the iterator to begin while(iter != gExplode.end())//while the iterator is not set to end { if((*iter)->isActive() == false)//if the iterator is not active { iter = gExplode.erase(iter);//delete the explosion } else { (*iter)->update(timeElapsed); d3dxSRMgr->setTheTransform((*iter)->getSpriteTransformMatrix()); //set the position for the explosion d3dxSRMgr->drawSprite((*iter)->getTexture(),&((*iter)->getSourceRect()),NULL,NULL,0xFFFFFFFF);//draw the explosion ++iter;//increment iter } } balloonFont->printText(gScoreStr,textPos);//print the score } } d3dxSRMgr->endDraw();//finish drawing } d3dMgr->endRender();//finish rendering OutputDebugString("timeElapsed > fpsRate"); timeElapsed = 0.0f;//set timeElapsed to zero } previousTime = currentTime; /* StringCchPrintf(szTempOutput, 30, TEXT("dt=%f\n"), dt); OutputDebugString(szTempOutput); StringCchPrintf(szTempOutput, 30, TEXT("timeElapsed=%f\n"), timeElapsed); OutputDebugString(szTempOutput); StringCchPrintf(szTempOutput, 30, TEXT("previousTime=%u\n"), previousTime); OutputDebugString(szTempOutput); StringCchPrintf(szTempOutput, 30, TEXT("fpsRate=%f\n"), fpsRate); OutputDebugString(szTempOutput); */ } } d3dxSRMgr->cleanUp(); d3dMgr->clean(); return (int) msg.wParam; }
/* ================================================================== // This is winmain, the main entry point for Windows applications ================================================================== */ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) { // Initialize the window if ( !initWindow( hInstance ) ) return false; // called after creating the window if ( !d3dMgr->initD3DManager(wndHandle) ) return false; if ( !d3dxSRMgr->initD3DXSpriteMgr(d3dMgr->getTheD3DDevice())) return false; __int64 freq = 0; // measured in counts per second; QueryPerformanceFrequency((LARGE_INTEGER*)&freq); float sPC = 1.0f / (float)freq; // number of seconds per count __int64 currentTime = 0; // current time measured in counts per second; __int64 previousTime = 0; // previous time measured in counts per second; float numFrames = 0.0f; // Used to hold the number of frames float timeElapsed = 0.0f; // cumulative elapsed time GetClientRect(wndHandle,&clientBounds); float fpsRate = 1.0f/25.0f; LPDIRECT3DSURFACE9 roomSurface; // the Direct3D surface LPDIRECT3DSURFACE9 gameOverSurface; LPDIRECT3DSURFACE9 theBackbuffer = NULL; // This will hold the back buffer // Create the background surface gameOverSurface = d3dMgr->getD3DSurfaceFromFile("Images\\GameOver.png"); roomSurface = d3dMgr->getD3DSurfaceFromFile("Images\\RoomBackGround.png"); /* bool roomArray[5][5]= { {0,0,0,0,0}, {0,0,1,0,0}, {0,1,1,1,0}, {0,0,1,0,0}, {0,0,0,0,0}, }; int posX = 3; int posY = 3; cRoom room1(posX,posY,roomArray[posX][posY-1],roomArray[posX][posY+1],roomArray[posX-1][posY],roomArray[posX+1][posY],0); posX = 2; posY = 3; cRoom room2(posX,posY,roomArray[posX][posY-1],roomArray[posX][posY+1],roomArray[posX-1][posY],roomArray[posX+1][posY],1); posX = 3; posY = 4; cRoom room3(posX,posY,roomArray[posX][posY-1],roomArray[posX][posY+1],roomArray[posX-1][posY],roomArray[posX+1][posY],2); posX = 4; posY = 3; cRoom room4(posX,posY,roomArray[posX][posY-1],roomArray[posX][posY+1],roomArray[posX-1][posY],roomArray[posX+1][posY],3); posX = 3; posY = 2; cRoom room5(posX,posY,roomArray[posX][posY-1],roomArray[posX][posY+1],roomArray[posX-1][posY],roomArray[posX+1][posY],4); cRoom rooms[4]; rooms[0]=room1; rooms[1]=room2; rooms[2]=room3; rooms[3]=room4; rooms[4]=room5; cRoom currentRoom = room1; */ D3DXVECTOR3 healthBarPos = D3DXVECTOR3(100,100,0); cSprite healthBar(healthBarPos,d3dMgr->getTheD3DDevice(),"Images\\HealthBar.png"); /* D3DXVECTOR3 upDoorPos = D3DXVECTOR3(400,25,0); cSprite upDoor(upDoorPos,d3dMgr->getTheD3DDevice(),"Images\\door.png"); D3DXVECTOR3 downDoorPos = D3DXVECTOR3(400,125,0); cSprite downDoor(downDoorPos,d3dMgr->getTheD3DDevice(),"Images\\door.png"); D3DXVECTOR3 leftDoorPos = D3DXVECTOR3(25,125,0); cSprite leftDoor(leftDoorPos,d3dMgr->getTheD3DDevice(),"Images\\door.png"); D3DXVECTOR3 rightDoorPos = D3DXVECTOR3(400,125,0); cSprite rightDoor(rightDoorPos,d3dMgr->getTheD3DDevice(),"Images\\door.png"); */ cSprite thePlayer(playerPos,d3dMgr->getTheD3DDevice(),"Images\\WizardDown.png"); D3DXVECTOR3 enemyPos1 = D3DXVECTOR3(700,100,0); cHealth* gooHealth1 = new cHealth(10); cSprite* gooSprite1 = new cSprite(enemyPos1,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); D3DXVECTOR3 enemyPos2 = D3DXVECTOR3(100,300,0); cHealth* gooHealth2 = new cHealth(10); cSprite* gooSprite2 = new cSprite(enemyPos2,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); D3DXVECTOR3 enemyPos3 = D3DXVECTOR3(650,300,0); cHealth* gooHealth3 = new cHealth(10); cSprite* gooSprite3 = new cSprite(enemyPos3,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); D3DXVECTOR3 enemyPos4 = D3DXVECTOR3(200,100,0); cHealth* gooHealth4 = new cHealth(10); cSprite* gooSprite4 = new cSprite(enemyPos4,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); /* if (projectileStart == true) { cSprite* projectile = new cSprite(thePlayer.getSpritePos(),d3dMgr->getTheD3DDevice(),"Images\\goo.png"); projectile->setTranslation(D3DXVECTOR2(projectileVeloc.x,projectileVeloc.y)); projectileStart = false; } */ // Build our matrix to rotate, scale and position our sprite D3DXMATRIX playerTransformMatrix; MSG msg; ZeroMemory( &msg, sizeof( msg ) ); while( msg.message!=WM_QUIT ) { // Check the message queue if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { // Game code goes here QueryPerformanceCounter((LARGE_INTEGER*)¤tTime); float dt = (currentTime - previousTime)*sPC; // Accumulate how much time has passed. timeElapsed += dt; if(timeElapsed > fpsRate) { if(playerHealth.deathCheck()) { d3dMgr->beginRender(); theBackbuffer = d3dMgr->getTheBackBuffer(); d3dMgr->updateTheSurface(gameOverSurface, theBackbuffer); d3dMgr->releaseTheBackbuffer(theBackbuffer); d3dxSRMgr->beginDraw(); // d3dxSRMgr->endDraw(); d3dMgr->endRender(); previousTime = currentTime; } else { /* if (roomSpawned == false) { D3DXVECTOR2 playerPos = D3DXVECTOR2(200,400); thePlayer.setSpriteTransformMatrix(playerTransformMatrix, thePlayer.getSpriteCentre(),0.0f,playerScale,thePlayer.getSpriteCentre(),0.0f,playerPos); roomSpawned = true; } */ if (gooHealth1->deathCheck()) { delete gooSprite1; delete gooHealth1; Sleep(1000); gooHealth1 = new cHealth(10); gooSprite1 = new cSprite(enemyPos1,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); } if (gooHealth2->deathCheck()) { delete gooSprite2; delete gooHealth2; Sleep(1000); gooHealth2 = new cHealth(10); gooSprite2 = new cSprite(enemyPos2,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); } if (gooHealth3->deathCheck()) { delete gooSprite3; delete gooHealth3; Sleep(1000); gooHealth3 = new cHealth(10); gooSprite3 = new cSprite(enemyPos3,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); } if (gooHealth4->deathCheck()) { delete gooSprite4; delete gooHealth4; Sleep(1000); gooHealth4 = new cHealth(10); gooSprite4 = new cSprite(enemyPos4,d3dMgr->getTheD3DDevice(),"Images\\goo.png"); } if(playerVeloc.x != 0 && playerVeloc.y != 0 && controlDiagonalCheckCooldown == false) { playerVeloc.x *= 0.75f; playerVeloc.y *= 0.75f; controlDiagonalCheckCooldown = true; } playerTrans += playerVeloc; if (playerTrans.x < (clientBounds.left +25)) { playerTrans.x = clientBounds.left +26; } if (playerTrans.y < (clientBounds.top +25)) { playerTrans.y = clientBounds.top +26; } if (playerTrans.x > (clientBounds.right - (25 + 75))) { playerTrans.x = clientBounds.right -(26 + 75); } if (playerTrans.y > (clientBounds.bottom -(154 + 75))) { playerTrans.y = clientBounds.bottom -(155 +75); } if(playerVeloc.x > 0) { thePlayer.setTexture(d3dMgr->getTheD3DDevice(),"Images\\WizardRight.png"); playerScale = D3DXVECTOR2(1.0f,1.0f); } if(playerVeloc.x < 0) { thePlayer.setTexture(d3dMgr->getTheD3DDevice(),"Images\\WizardRight.png"); playerScale = D3DXVECTOR2(-1.0f,1.0f); } if(playerVeloc.y < 0) { thePlayer.setTexture(d3dMgr->getTheD3DDevice(),"Images\\WizardUp.png"); } if(playerVeloc.y > 0) { thePlayer.setTexture(d3dMgr->getTheD3DDevice(),"Images\\WizardDown.png"); } healthBarScale.x = (FLOAT)playerHealth.getHealth()/100; thePlayer.setSpritePos(D3DXVECTOR3(playerTrans.x,playerTrans.y,0)); thePlayer.setSpriteScaling(playerScale.x,playerScale.y); healthBar.setSpritePos(D3DXVECTOR3(healthBarTrans.x,healthBarTrans.y,0)); healthBar.setSpriteScaling(healthBarScale.x,healthBarScale.y); /* upDoor.setSpritePos(D3DXVECTOR3(upDoorTrans.x,upDoorTrans.y,0)); downDoor.setSpritePos(D3DXVECTOR3(downDoorTrans.x,downDoorTrans.y,0)); leftDoor.setSpritePos(D3DXVECTOR3(leftDoorTrans.x,leftDoorTrans.y,0)); leftDoor.setSpriteRotation(90.0f); rightDoor.setSpritePos(D3DXVECTOR3(rightDoorTrans.x,rightDoorTrans.y,0)); rightDoor.setSpriteRotation(90.0f); */ thePlayer.update(); healthBar.update(); /* upDoor.update(); downDoor.update(); leftDoor.update(); rightDoor.update(); */ /* if (thePlayer.collidedWith(thePlayer.getBoundingRect(),upDoor.getBoundingRect())) { //if a collision occurs change the room OutputDebugString("Collision!!"); for(int i=0; i<=4; i++) { if(rooms[i].getPosY() == (currentRoom.getPosY())+1) { currentRoom = rooms[i]; roomSpawned = false; } } } */ d3dMgr->beginRender(); theBackbuffer = d3dMgr->getTheBackBuffer(); d3dMgr->updateTheSurface(roomSurface, theBackbuffer); d3dMgr->releaseTheBackbuffer(theBackbuffer); d3dxSRMgr->beginDraw(); d3dxSRMgr->setTheTransform(thePlayer.getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(thePlayer.getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(healthBar.getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(healthBar.getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(gooSprite1->getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(gooSprite1->getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(gooSprite2->getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(gooSprite2->getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(gooSprite3->getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(gooSprite3->getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(gooSprite4->getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(gooSprite4->getTexture(),NULL,NULL,NULL,0xFFFFFFFF); //d3dxSRMgr->setTheTransform(projectile->getSpriteTransformMatrix()); //d3dxSRMgr->drawSprite(projectile->getTexture(),NULL,NULL,NULL,0xFFFFFFFF); /* d3dxSRMgr->setTheTransform(upDoor.getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(upDoor.getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(downDoor.getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(downDoor.getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(leftDoor.getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(leftDoor.getTexture(),NULL,NULL,NULL,0xFFFFFFFF); d3dxSRMgr->setTheTransform(rightDoor.getSpriteTransformMatrix()); d3dxSRMgr->drawSprite(rightDoor.getTexture(),NULL,NULL,NULL,0xFFFFFFFF); */ d3dxSRMgr->endDraw(); d3dMgr->endRender(); previousTime = currentTime; } } } } d3dxSRMgr->cleanUp(); d3dMgr->clean(); return (int) msg.wParam; }