我用C++复刻了这款上世纪最伟大的游戏
吃豆人(Pac-man),想必熟悉電子游戲發(fā)展史的玩家都不會陌生。
吃豆人是電子游戲歷史上的經(jīng)典街機游戲,由Namco公司的巖谷徹設(shè)計并由Midway Games在1980年發(fā)行。
Pac-Man被認為是80年代最經(jīng)典的街機游戲之一,游戲的主角小精靈的形象甚至被作為一種大眾文化符號,或是此產(chǎn)業(yè)的代表形象。
但吃豆人的玩法現(xiàn)在看來,也許已經(jīng)有些過時。
玩家要控制吃豆人吃掉迷宮里面的所有豆子,同時盡可能躲避小鬼怪。一旦吃豆人吃掉能量藥丸,它就可以在一定時間內(nèi)反過來欺負小鬼怪了。
不過,在漫漫游戲長河中,吃豆人,永遠都會是最閃耀的那一顆。
它是電子游戲的文化符號,同時首創(chuàng)了迷宮追逐類型,簡單的畫面和玩法卻在電子游戲史上留下了濃墨重彩的一筆。
因此,今天,我挑選了一個吃豆人開發(fā)教程分享給大家。復(fù)刻吃豆人,致敬經(jīng)典!
實現(xiàn)效果如下:
在“C++ 使用 openGL 實現(xiàn)吃豆人游戲”中可學(xué)習(xí)全部內(nèi)容,并有游戲源碼下載。
以下是教程節(jié)選:
一、實驗介紹
1.1 實驗內(nèi)容
本節(jié)實驗主要通過 C++ 和 openGL 庫來實現(xiàn)了一個吃豆人的小游戲。主要的課程內(nèi)容涉及到 C++ 相關(guān)的序列容器 vector 、deque 和迭代器,以及 openGL 相關(guān)的窗口初始化與繪圖功能。
1.2 知識點
- C++ 編程基礎(chǔ)
- C++ 模板庫使用
- openGl 庫使用
1.3 實驗環(huán)境
- xfce 終端
- ubuntu16.04
- openGl 庫
1.4 適合人群
有一定 C++ 編程基礎(chǔ),了解 STL 模板庫,對游戲設(shè)計、邏輯分析和 openGL 庫感興趣的同學(xué)。
二、環(huán)境準(zhǔn)備
2.1 安裝 openGL 庫
執(zhí)行以下命令安裝所需的各種依賴
sudo apt-get update sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install libglu1-mesa-dev sudo apt-get install freeglut3-dev2.2 編譯程序
需要進入 Pacman/src/ 目錄
make2.3 運行程序
需要進入 Pacman/bin/ 目錄
./Pacman2.4 運行效果
三、項目分析
3.1 模塊拆分
在開始編寫程序之前我們需要利用 C++ 的思想把實際問題轉(zhuǎn)換成一個個對象。說到游戲應(yīng)該就能想到角色、地圖和怪物以及操作命令等。我們把這些元素細化就可以得到游戲設(shè)計模塊:
- 角色設(shè)計
- 地圖設(shè)計
- 怪物設(shè)計
- 食物設(shè)計
- 操作設(shè)計
- 界面設(shè)計
3.2 開發(fā)說明
- C++ :編程語言
- Linux ubuntu 16.04 :開發(fā)環(huán)境
- openGL :第三方庫
備注:openGL 是一種圖形界面處理庫,提供了許多 API 給其他語言調(diào)用。我們的地圖、角色和界面等等都需要調(diào)用它。
四、詳細設(shè)計
4.1 提前準(zhǔn)備
在這里首先需要為我們的項目創(chuàng)建一個文件夾,進入 /home/shiyanlou/Code/ 目錄下,將我們這次的項目命名為 Pacman。進入這個文件夾創(chuàng)建三個子文件夾 inlcude(存放頭文件)、src(存放源代碼)和 bin(存放可執(zhí)行文件)。并創(chuàng)建相應(yīng)的代碼文件,具體內(nèi)容與結(jié)構(gòu)如下:
▲include 目錄下
- control.h
- createpacman.h
- food.h
- gameover.h
- gameresult.h
- gamestart.h
- init.h
- laberynth.h
- main.h
- monster.h
▲src 目錄下(相對應(yīng))
- control.cpp
- createpacman.cpp
- food.cpp
- gameover.cpp
- gameresult.cpp
- gamestart.cpp
- init.cpp
- labernth.cpp
- Pacman.cpp
- monster.cpp
4.2 預(yù)定義與全局變量
首先在 include 創(chuàng)建 main.h,用來存放頭文件和一些全局變量,全局變量的定義是方便所有的模塊訪問并反映游戲的狀態(tài)。全局變量定義后,在主函數(shù)中進行賦值,所有模塊就都能訪問了。
//main.h #ifndef _MAIN_H_ #define _MAIN_H_ #include <vector> #include <GL/glut.h> #include <iostream> #include <cstring> #define _USE_MATH_DEFINES #include <math.h> #include <vector> #include <deque> #include <stdlib.h> using namespace std;extern bool replay; //檢查是否啟動游戲 extern bool over; //檢查游戲是否結(jié)束 extern float squareSize; //一個單元大小 extern float xIncrement; // x坐標(biāo) extern float yIncrement; // y坐標(biāo) extern int rotation; // 方向 extern float* monster1; //第一個怪物的坐標(biāo)和方向 extern float* monster2; //第二個怪物的坐標(biāo)和方向 extern float* monster3; //第三個怪物的坐標(biāo)和方向 extern float* monster4; //第四個怪物的坐標(biāo)和方向 extern vector<int> border; //墻坐標(biāo)//障礙物坐標(biāo) (為了清晰分為三部分) extern vector<int> obstaclesTop; extern vector<int> obstaclesMiddle; extern vector<int> obstaclesBottom; extern deque<float> food; extern vector<vector<bool>> bitmap; // 2d圖像,可移動區(qū)域 extern bool* keyStates; // 按鍵狀態(tài) extern int points; // 得分 #endif…
接下來,還有“初始化游戲地圖”“怪物設(shè)計”“食物設(shè)計”等內(nèi)容,在“C++ 使用 openGL 實現(xiàn)吃豆人游戲”中可學(xué)習(xí)全部內(nèi)容,并有游戲源碼下載。
總結(jié)
以上是生活随笔為你收集整理的我用C++复刻了这款上世纪最伟大的游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你闺女都能看懂的 Kubernetes
- 下一篇: 突破C++瓶颈,在此一举!