我用C++复刻了这款上世纪最伟大的游戏

吃豆人(Pac-man),想必熟悉电子游戏发展史的玩家都不会陌生。ios

吃豆人是电子游戏历史上的经典街机游戏,由Namco公司的岩谷彻设计并由Midway Games在1980年发行。编程

image

Pac-Man被认为是80年代最经典的街机游戏之一,游戏的主角小精灵的形象甚至被做为一种大众文化符号,或是此产业的表明形象。ubuntu

但吃豆人的玩法如今看来,也许已经有些过期。编程语言

玩家要控制吃豆人吃掉迷宫里面的全部豆子,同时尽量躲避小鬼怪。一旦吃豆人吃掉能量药丸,它就能够在必定时间内反过来欺负小鬼怪了。函数

不过,在漫漫游戏长河中,吃豆人,永远都会是最闪耀的那一颗。学习

它是电子游戏的文化符号,同时独创了迷宫追逐类型,简单的画面和玩法却在电子游戏史上留下了浓墨重彩的一笔。ui

所以,今天,我挑选了一个吃豆人开发教程分享给你们。复刻吃豆人,致敬经典!spa

实现效果以下:设计

image

此教程是免费资源,点击“C++ 使用 openGL 实现吃豆人游戏”,便可免费学习所有内容,并有游戏源码下载。3d


如下是教程节选:

1、实验介绍

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、环境准备

2.1 安装 openGL 库

执行如下命令安装所需的各类依赖

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

2.2 编译程序

须要进入 Pacman/src/ 目录

make

2.3 运行程序

须要进入 Pacman/bin/ 目录

./Pacman

2.4 运行效果

image

image

image

3、项目分析

3.1 模块拆分

在开始编写程序以前咱们须要利用 C++ 的思想把实际问题转换成一个个对象。说到游戏应该就能想到角色、地图和怪物以及操做命令等。咱们把这些元素细化就能够获得游戏设计模块:

  • 角色设计
  • 地图设计
  • 怪物设计
  • 食物设计
  • 操做设计
  • 界面设计

3.2 开发说明

  • C++ :编程语言
  • Linux ubuntu 16.04 :开发环境
  • openGL :第三方库

备注:openGL 是一种图形界面处理库,提供了许多 API 给其余语言调用。咱们的地图、角色和界面等等都须要调用它。

4、详细设计

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

......

接下来,还有“初始化游戏地图”“怪物设计”“食物设计”等内容,点击“C++ 使用 openGL 实现吃豆人游戏”,便可免费学习所有内容,并有游戏源码下载。

相关文章
相关标签/搜索