首頁>遊戲>

吃豆人(Pac-man),想必熟悉電子遊戲發展史的玩家都不會陌生。

吃豆人是電子遊戲歷史上的經典街機遊戲,由Namco公司的巖谷徹設計並由Midway Games在1980年發行。

Pac-Man被認為是80年代最經典的街機遊戲之一,遊戲的主角小精靈的形象甚至被作為一種福斯文化符號,或是此產業的代表形象。

但吃豆人的玩法現在看來,也許已經有些過時。

玩家要控制吃豆人吃掉迷宮裡面的所有豆子,同時儘可能躲避小鬼怪。一旦吃豆人吃掉能量藥丸,它就可以在一定時間內反過來欺負小鬼怪了。

不過,在漫漫遊戲長河中,吃豆人,永遠都會是最閃耀的那一顆。

它是電子遊戲的文化符號,同時首創了迷宮追逐型別,簡單的畫面和玩法卻在電子遊戲史上留下了濃墨重彩的一筆。

因此,今天,我挑選了一個吃豆人開發教程分享給大家。復刻吃豆人,致敬經典!

實現效果如下:

以下是教程節選:

一、實驗介紹

1.1 實驗內容

本節實驗主要通過 C++ 和 openGL 庫來實現了一個吃豆人的小遊戲。主要的課程內容涉及到 C++ 相關的序列容器 vector 、deque 和迭代器,以及 openGL 相關的視窗初始化與繪圖功能。

1.2 知識點

C++ 程式設計基礎C++ 模板庫使用openGl 庫使用

1.3 實驗環境

xfce 終端ubuntu16.04openGl 庫

1.4 適合人群

有一定 C++ 程式設計基礎,了解 STL 模板庫,對遊戲設計、邏輯分析和 openGL 庫感興趣的同學。

二、環境準備

2.1 安裝 openGL 庫

執行以下命令安裝所需的各種依賴

sudo apt-get updatesudo apt-get install build-essential sudo apt-get install libgl1-mesa-devsudo apt-get install libglu1-mesa-dev sudo apt-get install freeglut3-dev

2.2 編譯程式

需要進入 Pacman/src/ 目錄

make

2.3 執行程式

需要進入 Pacman/bin/ 目錄

./Pacman

2.4 執行效果

三、專案分析

3.1 模組拆分

在開始編寫程式之前我們需要利用 C++ 的思想把實際問題轉換成一個個物件。說到遊戲應該就能想到角色、地圖和怪物以及操作命令等。我們把這些元素細化就可以得到遊戲設計模組:

角色設計地圖設計怪物設計食物設計操作設計介面設計

3.2 開發說明

C++ :程式語言Linux ubuntu 16.04 :開發環境openGL :第三方庫

備註:openGL 是一種圖形介面處理庫,提供了許多 API 給其他語言呼叫。我們的地圖、角色和介面等等都需要呼叫它。

四、詳細設計

4.1 提前準備

在這裡首先需要為我們的專案建立一個資料夾,進入 /home/shiyanlou/Code/ 目錄下,將我們這次的專案命名為 Pacman。進入這個資料夾建立三個子資料夾 inlcude(存放標頭檔案)、src(存放原始碼)和 bin(存放可執行檔案)。並建立相應的程式碼檔案,具體內容與結構如下:

▲include 目錄下

control.h createpacman.h food.h gameover.h gameresult.h gamestart.h init.h laberynth.h main.h monster.h

▲src 目錄下(相對應)

control.cpp createpacman.cpp food.cpp gameover.cpp gameresult.cpp gamestart.cpp init.cpp labernth.cpp Pacman.cpp monster.cpp

4.2 預定義與全域性變數

首先在 include 建立 main.h,用來存放標頭檔案和一些全域性變數,全域性變數的定義是方便所有的模組訪問並反映遊戲的狀態。全域性變數定義後,在主函式中進行賦值,所有模組就都能訪問了。

//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;             //檢查遊戲是否結束extern float squareSize;     //一個單元大小extern float xIncrement;     // x座標extern float yIncrement;     // y座標extern int rotation;         // 方向extern float* monster1;     //第一個怪物的座標和方向extern float* monster2;     //第二個怪物的座標和方向extern float* monster3;     //第三個怪物的座標和方向extern float* monster4;     //第四個怪物的座標和方向extern vector<int> border;     //牆座標//障礙物座標 (為了清晰分為三部分)extern vector<int> obstaclesTop;extern vector<int> obstaclesMiddle;extern vector<int> obstaclesBottom;extern deque<float> food;extern vector<vector<bool>> bitmap;     // 2d影象,可移動區域extern bool* keyStates;                 // 按鍵狀態extern int points;                         // 得分#endif

......

最新評論
  • 年營收30億,智明星通投資的這家SLG廠商贏麻了
  • 經典的吃豆人遊戲,回味童年樂趣~《歡樂吃豆人》