zoukankan      html  css  js  c++  java
  • 我用C++复刻了这款上世纪最伟大的游戏

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

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

    image

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

    但吃豆人的玩法现在看来,也许已经有些过时。

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

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

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

    因此,今天,我挑选了一个吃豆人开发教程分享给大家。复刻吃豆人,致敬经典!

    实现效果如下:

    image

    此教程是免费资源,点击“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 库

    执行以下命令安装所需的各种依赖

    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.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
    

    ......

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

  • 相关阅读:
    Activex、OLE、COM、OCX、DLL之间有什么区别?
    如何通过VC的 CHttpFile 抓取网页内容
    RPC远程过程调用实例详解(转)
    C++中extern “C”含义深层探索
    Android NDK Development ---- Android 4.4
    Android NDK Overview ---- Android 4.4
    Android NDK How-To ---- Android 4.4
    使用Jquery+EasyUI框架开发项目+下载+帮助--EasyUI的简介
    zzzzw_在线考试系统③完结篇
    一个月的时间--java从一无所有到能用框架做点东西出来
  • 原文地址:https://www.cnblogs.com/shiyanlou/p/12486282.html
Copyright © 2011-2022 走看看