Henway —— 小鸡过路游戏
来源:互联网 发布:淘宝类目分析报表 编辑:程序博客网 时间:2024/04/27 15:41
游戏规则为玩家控制小鸡避开四辆上下行驶的汽车,自左向右穿过高速公路。游戏支持键盘和游戏杆输入,鼠标左键/游戏杆FIRE1 重新开始。 游戏基于目前的游戏引擎。
程序清单:
//-----------------------------------------------------------------// myHenway Application// C++ Header - myHenway.h//-----------------------------------------------------------------#pragma once//-----------------------------------------------------------------// Include Files//-----------------------------------------------------------------#include#include "Resource.h"#include "GameEngine.h"#include "Bitmap.h"#include "Sprite.h"//-----------------------------------------------------------------// Global Variables//-----------------------------------------------------------------HINSTANCE g_hInstance;GameEngine* g_pGame;HDC g_hOffscreenDC;HBITMAP g_hOffscreenBitmap;Bitmap* g_pHighwayBitmap;//背景Bitmap* g_pChickenBitmap;//小鸡Bitmap* g_pCarBitmaps[4];//车Bitmap* g_pChickenHeadBitmap;//鸡头Sprite* g_pChickenSprite;//小鸡子画面int g_iInputDelay1;//键盘输入延迟int g_iInputDelay2;//游戏杆输入延迟int g_iNumLives;//生命条数int g_iScore;//分数BOOL g_bGameOver;//-----------------------------------------------------------------// Function Declarations//-----------------------------------------------------------------void MoveChicken(int iXDistance, int iYDistance);
//-----------------------------------------------------------------// myHenway Application// C++ Source - myHenway.cpp//-----------------------------------------------------------------//-----------------------------------------------------------------// Include Files//-----------------------------------------------------------------#include "Henway.h"//-----------------------------------------------------------------// Game Engine Functions//-----------------------------------------------------------------BOOL GameInitialize(HINSTANCE hInstance){ // Create the game engine g_pGame = new GameEngine(hInstance, TEXT("Henway"), TEXT("Henway"), IDI_HENWAY, IDI_HENWAY_SM, 465, 400); if (g_pGame == NULL) return FALSE; // Set the frame rate g_pGame->SetFrameRate(30); // Initialize the joystick g_pGame->InitJoystick(); // Store the instance handle g_hInstance = hInstance; return TRUE;}void GameStart(HWND hWindow){ // Seed the random number generator srand(GetTickCount()); // Create the offscreen device context and bitmap g_hOffscreenDC = CreateCompatibleDC(GetDC(hWindow)); g_hOffscreenBitmap = CreateCompatibleBitmap(GetDC(hWindow), g_pGame->GetWidth(), g_pGame->GetHeight()); SelectObject(g_hOffscreenDC, g_hOffscreenBitmap); // Create and load the bitmaps HDC hDC = GetDC(hWindow); g_pHighwayBitmap = new Bitmap(hDC, IDB_HIGHWAY, g_hInstance); g_pChickenBitmap = new Bitmap(hDC, IDB_CHICKEN, g_hInstance); g_pCarBitmaps[0] = new Bitmap(hDC, IDB_CAR1, g_hInstance); g_pCarBitmaps[1] = new Bitmap(hDC, IDB_CAR2, g_hInstance); g_pCarBitmaps[2] = new Bitmap(hDC, IDB_CAR3, g_hInstance); g_pCarBitmaps[3] = new Bitmap(hDC, IDB_CAR4, g_hInstance); g_pChickenHeadBitmap = new Bitmap(hDC, IDB_CHICKENHEAD, g_hInstance); // Create the chicken and car sprites Sprite* pSprite; RECT rcBounds = { 0, 0, 465, 400 }; g_pChickenSprite = new Sprite(g_pChickenBitmap, rcBounds, BA_STOP); g_pChickenSprite->SetPosition(4, 175); g_pChickenSprite->SetVelocity(0, 0); g_pChickenSprite->SetZOrder(1); g_pGame->AddSprite(g_pChickenSprite); pSprite = new Sprite(g_pCarBitmaps[0], rcBounds, BA_WRAP); pSprite->SetPosition(70, 0); pSprite->SetVelocity(0, 7); pSprite->SetZOrder(2); g_pGame->AddSprite(pSprite); pSprite = new Sprite(g_pCarBitmaps[1], rcBounds, BA_WRAP); pSprite->SetPosition(160, 0); pSprite->SetVelocity(0, 3); pSprite->SetZOrder(2); g_pGame->AddSprite(pSprite); pSprite = new Sprite(g_pCarBitmaps[2], rcBounds, BA_WRAP); pSprite->SetPosition(239, 400); pSprite->SetVelocity(0, -5); pSprite->SetZOrder(2); g_pGame->AddSprite(pSprite); pSprite = new Sprite(g_pCarBitmaps[3], rcBounds, BA_WRAP); pSprite->SetPosition(329, 400); pSprite->SetVelocity(0, -10); pSprite->SetZOrder(2); g_pGame->AddSprite(pSprite); // Initialize the remaining global variables g_iInputDelay1 = 0; g_iInputDelay2 = 0; g_iNumLives = 3; g_iScore = 0; g_bGameOver = FALSE;}void GameEnd(){ // Cleanup the offscreen device context and bitmap DeleteObject(g_hOffscreenBitmap); DeleteDC(g_hOffscreenDC); // Cleanup the bitmaps delete g_pHighwayBitmap; delete g_pChickenBitmap; for (int i = 0; i < 4; i++) delete g_pCarBitmaps[i]; delete g_pChickenHeadBitmap; // Cleanup the sprites g_pGame->CleanupSprites(); // Cleanup the game engine delete g_pGame;}void GameActivate(HWND hWindow){ // Capture the joystick g_pGame->CaptureJoystick();}void GameDeactivate(HWND hWindow){ // Release the joystick g_pGame->ReleaseJoystick();}void GamePaint(HDC hDC){ //绘制公路背景 g_pHighwayBitmap->Draw(hDC,0,0); //绘制子画面 g_pGame->DrawSprites(hDC); //绘制剩余小鸡生命数量 for(int i=0;iDraw(hDC,406+(g_pChickenHeadBitmap->GetWidth()*i),382,TRUE);}void GameCycle(){ if(!g_bGameOver) {//更新子画面g_pGame->UpdateSprites();//获得用来绘制游戏的设备环境HWND hWindow=g_pGame->GetWindow();HDC hDC = GetDC(hWindow);//在屏幕外设备环境上绘制游戏GamePaint(g_hOffscreenDC);//将屏幕外位图传送到游戏屏幕BitBlt(hDC,0,0,g_pGame->GetWidth(),g_pGame->GetHeight(), g_hOffscreenDC,0,0,SRCCOPY);//清理ReleaseDC(hWindow,hDC); }}void HandleKeys(){ if (!g_bGameOver && (++g_iInputDelay1 > 1)) { // Move the chicken based upon key presses if (GetAsyncKeyState(VK_LEFT) < 0) MoveChicken(-20, 0); else if (GetAsyncKeyState(VK_RIGHT) < 0) MoveChicken(20, 0); if (GetAsyncKeyState(VK_UP) < 0) MoveChicken(0, -20); else if (GetAsyncKeyState(VK_DOWN) < 0) MoveChicken(0, 20); // Reset the input delay g_iInputDelay1 = 0; }}void MouseButtonDown(int x, int y, BOOL bLeft){ // Start a new game, if necessary if (g_bGameOver) { g_iNumLives = 3; g_iScore = 0; g_bGameOver = FALSE; }}void MouseButtonUp(int x, int y, BOOL bLeft){}void MouseMove(int x, int y){}void HandleJoystick(JOYSTATE jsJoystickState){ if (!g_bGameOver && (++g_iInputDelay2 > 1)) { // Check horizontal movement if (jsJoystickState & JOY_LEFT) MoveChicken(-20, 0); else if (jsJoystickState & JOY_RIGHT) MoveChicken(20, 0); // Check vertical movement if (jsJoystickState & JOY_UP) MoveChicken(0, -20); else if (jsJoystickState & JOY_DOWN) MoveChicken(0, 20); // Reset the input delay g_iInputDelay2 = 0; } // Check the joystick button and start a new game, if necessary if (g_bGameOver && (jsJoystickState & JOY_FIRE1)) { g_iNumLives = 3; g_iScore = 0; g_bGameOver = FALSE; }}BOOL SpriteCollision(Sprite* pSpriteHitter, Sprite* pSpriteHittee){ // See if the chicken was hit if (pSpriteHittee == g_pChickenSprite) { // Move the chicken back to the start g_pChickenSprite->SetPosition(4, 175); // See if the game is over if (--g_iNumLives > 0) MessageBox(g_pGame->GetWindow(), TEXT("Ouch!"), TEXT("Henway"), MB_OK); else { // Display game over message TCHAR szText[64]; wsprintf(szText, "Game Over! You scored %d points.", g_iScore); MessageBox(g_pGame->GetWindow(), szText, TEXT("Henway"), MB_OK); g_bGameOver = TRUE; } return FALSE; } return TRUE;}//-----------------------------------------------------------------// Functions//-----------------------------------------------------------------void MoveChicken(int iXDistance, int iYDistance){ // Move the chicken to its new position g_pChickenSprite->OffsetPosition(iXDistance, iYDistance); // See if the chicken made it across if (g_pChickenSprite->GetPosition().left > 400) { // Move the chicken back to the start and add to the score g_pChickenSprite->SetPosition(4, 175); g_iScore += 150; MessageBox(g_pGame->GetWindow(), TEXT("You made it!"), TEXT("Henway"), MB_OK); }}
//-----------------------------------------------------------------// Henway Resource Identifiers// C++ Header - Resource.h//-----------------------------------------------------------------//-----------------------------------------------------------------// Icons Range : 1000 - 1999//-----------------------------------------------------------------#define IDI_HENWAY 1000#define IDI_HENWAY_SM 1001//-----------------------------------------------------------------// Bitmaps Range : 2000 - 2999//-----------------------------------------------------------------#define IDB_HIGHWAY 2000#define IDB_CHICKEN 2001#define IDB_CAR1 2002#define IDB_CAR2 2003#define IDB_CAR3 2004#define IDB_CAR4 2005#define IDB_CHICKENHEAD 2006
//-----------------------------------------------------------------// Henway Resources// RC Source - Henway.rc//-----------------------------------------------------------------//-----------------------------------------------------------------// Include Files//-----------------------------------------------------------------#include "Resource.h"//-----------------------------------------------------------------// Icons//-----------------------------------------------------------------IDI_HENWAY ICON "Res//Henway.ico"IDI_HENWAY_SM ICON "Res//Henway_sm.ico"//-----------------------------------------------------------------// Bitmaps//-----------------------------------------------------------------IDB_HIGHWAY BITMAP "Res//Highway.bmp"IDB_CHICKEN BITMAP "Res//Chicken.bmp"IDB_CAR1 BITMAP "Res//Car1.bmp"IDB_CAR2 BITMAP "Res//Car2.bmp"IDB_CAR3 BITMAP "Res//Car3.bmp"IDB_CAR4 BITMAP "Res//Car4.bmp"IDB_CHICKENHEAD BITMAP "Res//ChickenHead.bmp"
游戏截图:
- Henway —— 小鸡过路游戏
- 游戏编程入门(9):开发 Henway(小鸡过马路) 游戏
- 日程小鸡——项目经理应该小心的游戏之十三
- 面试题——关于小鸡问题
- 不要像小鸡吃青豆——强努
- 过路吟
- 9.9递归和动态规划(十二)——小鸡吃米
- 拯救小鸡
- 拯救小鸡
- 规则打破,小鸡出来
- 我们村子的小鸡
- 数小鸡个数,呼呼
- 儿歌-老鸡骂小鸡
- 小鸡购买问题
- 公鸡母鸡生小鸡
- 小鸡炖蘑菇的做法
- window7 上装SecureCRT,连接小鸡
- 小鸡煮稀饭的做法
- 我的第一篇
- Cuil搜尋引擎 挑戰Google
- 十八件事-----成就自我人生
- 不要想在任何事上都占上风
- 开始写脚本引擎了
- Henway —— 小鸡过路游戏
- 争辩时避重就轻地改谈其他的事
- ASP中Cookies的运用
- 西班牙语观模课提纲
- 报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥
- 主流数据库之间对SQL:2003标准的不同实现方法比较(第三部分 前n项(Top-n)查询)
- JAVA内部类示例分析
- http://www.verycd.com
- java程序中编写,常见的一类疏忽