我用C++復刻了這款上世紀最偉大的遊戲

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

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


我用C++復刻了這款上世紀最偉大的遊戲


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

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

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

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

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

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

實現效果如下:


我用C++復刻了這款上世紀最偉大的遊戲


此教程是免費資源,在“實驗樓”官網搜索課程“C++ 使用 openGL 實現吃豆人遊戲”,即可免費學習全部內容,並有遊戲源碼下載。




以下是教程節選:

一、實驗介紹

1.1 實驗內容

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

1.2 知識點

  • C++ 編程基礎
  • C++ 模板庫使用
  • openGl 庫使用

1.3 實驗環境

  • xfce 終端
  • ubuntu16.04
  • openGl 庫

1.4 適合人群

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

二、環境準備

2.1 安裝 openGL 庫

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

<code>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-dev/<code>

2.2 編譯程序

需要進入 Pacman/src/ 目錄

<code>make/<code>

2.3 運行程序

需要進入 Pacman/bin/ 目錄

<code>./Pacman/<code>

2.4 運行效果

我用C++復刻了這款上世紀最偉大的遊戲

我用C++復刻了這款上世紀最偉大的遊戲

我用C++復刻了這款上世紀最偉大的遊戲

三、項目分析

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,用來存放頭文件和一些全局變量,全局變量的定義是方便所有的模塊訪問並反映遊戲的狀態。全局變量定義後,在主函數中進行賦值,所有模塊就都能訪問了。

<code>//main.h
#ifndef _MAIN_H_
#define _MAIN_H_
#include <vector>
#include
#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 border; //牆座標

//障礙物座標 (為了清晰分為三部分)
extern vector obstaclesTop;
extern vector obstaclesMiddle;
extern vector obstaclesBottom;
extern deque<float> food;
extern vector<vector>> bitmap; // 2d圖像,可移動區域
extern bool* keyStates; // 按鍵狀態
extern int points; // 得分
#endif/<vector>/<float>
/<stdlib.h>/<deque>/<vector>/<math.h>/<cstring>/<iostream>
/<vector>/<code>

......

接下來,還有“初始化遊戲地圖”“怪物設計”“食物設計”等內容,在“實驗樓”官網搜索課程“C++ 使用 openGL 實現吃豆人遊戲”,即可免費學習全部內容,並有遊戲源碼下載。


分享到:


相關文章: