linux 吃豆人游戏,C++ 使用 openGL 实现吃豆人游戏

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 库感兴趣的同学。

1.5 代码获取

//解压源代码

unzip -q Pacman.zip

66fcf5675dd96cc060f8c9d79e74b5c2.png

二、环境准备

2.1 安装 openGL 库

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

sudo apt-get update

34a89d16aa6d7d65bcd251b7ffaaed34.png

sudo apt-get install build-essential

335f615238705b0b6430f74e163b4f4f.png

sudo apt-get install libgl1-mesa-dev

39ebf42173d0ef6db1dbcfb9f63f8dcf.png

sudo apt-get install libglu1-mesa-dev

5118b894ffa28bdb03b164a2e375fcd6.png

sudo apt-get install freeglut3-dev

aa692fc7bbf283eab241dab2887d2c06.png

2.2 编译程序

需要进入 Pacman/src/ 目录

22570fcd69749fc697220a78ab83f372.png

make

4fd4a82986624a7e22838651d58d6086.png

2.3 运行程序

需要进入 Pacman/bin/ 目录

aa587efb35ed7dbe462a570426271396.png

./Pacman

2.4 运行效果

ad860a27c326e111c32799911513e3c3.png

562648059ec34c05997fafc02654e44f.png

三、项目分析

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

include

include

include

define _USE_MATH_DEFINES

include

include

include

include

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 food;

extern vector bitmap; // 2d图像,可移动区域

extern bool* keyStates; // 按键状态

extern int points; // 得分

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值