C++游戏编程:创建3D游戏第一章习题
记录C++游戏开发学习过程
练习题1:增加玩家2
- 删除右面的墙壁
//draw the right wall//wall.x = width - thickness; //wall.y = 0;//wall.w = thickness;//wall.h = height;//SDL_RenderFillRect(mRenderer, &wall);
- 新增2号玩家
Vector2 mRightPaddlePos;int mRightPaddleDir;
- 确保二号玩家不会移出屏幕
else if (mPaddlePos.y > long int (height - thickness) - paddleH / 2.0 ||mRightPaddlePos.y > long int(height - thickness) - paddleH / 2.0) {mRightPaddlePos.y = height - thickness - paddleH / 2.0;}
- 球是否与二号玩家碰撞
//Did ball intersect with the right paddle?else if (dist_right <= paddleH / 2.0 && ball->BallPos.x > width - thickness * 1.5&& ball->BallPos.x < width - thickness && ball->BallVec.x > 0) {ball->BallVec.x *= -1;}
- 球是否出界
else if (ball->BallPos.x < 0 || ball->BallPos.x > width) {mIsRunning = false;}
练习题2. 多球
- 修改结构体Vector2
struct Vector2 {float x;float y;Vector2(float _x, float _y) {x = _x;y = _y;}Vector2() {}
};
- 新增结构体Ball
struct Ball {Vector2 BallPos;Vector2 BallVec;Ball(Vector2 pos, Vector2 vec) {BallPos = pos;BallVec = vec;}
};
- 新增成员变量容器mBALLS
std::vector<Ball> mBalls;
- 初始化双球
Ball ball1(Vector2(width / 2.0f, height / 2.0f), Vector2(-200.0f, 235.0f));Ball ball2(Vector2(width / 2.0f, height / 2.0f), Vector2(200.0f, -235.0f));mBalls.push_back(ball1);mBalls.push_back(ball2);
- 绘制双球
for (auto ball = mBalls.begin(); ball != mBalls.end(); ball++) {SDL_Rect b{static_cast<int>(ball->BallPos.x - thickness / 2), //static_cast<type>: forced type conversionstatic_cast<int>(ball->BallPos.y - thickness / 2),thickness,thickness};SDL_RenderFillRect(mRenderer, &b);}
- 双球移动以及碰撞检测
for (auto ball = mBalls.begin(); ball != mBalls.end(); ball++) {ball->BallPos.x += ball->BallVec.x * deltaTime;ball->BallPos.y += ball->BallVec.y * deltaTime;float dist_left = fabs(double(ball->BallPos.y) - mPaddlePos.y);float dist_right = fabs(double(ball->BallPos.y) - mRightPaddlePos.y);//Did ball intersect with the paddle?if (dist_left <= paddleH / 2.0 && ball->BallPos.x >= thickness &&ball->BallPos.x <= thickness * 1.5 && ball->BallVec.x < 0) {ball->BallVec.x *= -1;}//Did ball intersect with the right paddle?else if (dist_right <= paddleH / 2.0 && ball->BallPos.x > width - thickness * 1.5&& ball->BallPos.x < width - thickness && ball->BallVec.x > 0) {ball->BallVec.x *= -1;}//Did the ball go off the screen?else if (ball->BallPos.x < 0 || ball->BallPos.x > width) {mIsRunning = false;}//reach the top wallif (ball->BallPos.y <= thickness * 1.5 && ball->BallPos.y < 0) { ball->BallVec.y *= -1;}/*//reach the right wallelse if (mBallPos.x >= width - thickness*1.5 && mBallVec.x > 0) {mBallVec.x *= -1;}*///reach the bottom wallelse if (ball->BallPos.y >= height - thickness * 1.5 && ball->BallPos.y > 0) { ball->BallVec.y *= -1;}
3. 游戏运行截图
C++游戏编程:创建3D游戏第一章习题相关推荐
- python游戏编程入门书籍推荐-游戏编程入门书籍推荐:想要游戏编程尽快入门这些书不要错过...
游戏编程一直都是编程之中的一大热点,这也是由于游戏本身的火热造成的结果,所以每年都有很多人在关注着游戏编程.介于此小编今天就来将一些好的游戏编程入门书籍推荐给大家,希望对想要了解和学习游戏编程的朋友能 ...
- 3D游戏编程与设计——游戏的本质章节作业与练习
3D游戏编程与设计--游戏的本质章节作业与练习 18342138 郑卓民 3D游戏编程与设计--游戏的本质章节作业与练习 作业与练习: 游戏名称及简介: 游戏的随机性 游戏的玩法与目标 游戏的冲突 游 ...
- 编程自救指南--0x01 第一章 你真的了解你的专业吗 ?
编程自救指南–0x01 第一章 你真的了解你的专业吗 ? 0x0 前情提要 看这篇文章之前 先卸载某乎(平台人均年薪百万,top100高校) 心中默念 "我是咸鱼,我是咸鱼,我渴望翻身&qu ...
- python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课
python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...
- python游戏编程入门免费_python游戏编程入门 python游戏编程入门课
python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...
- 小学生python游戏编程4----拼图游戏
小学生python游戏编程4----拼图游戏 主要设计 应用知识点 1.python知识点 1.1 函数定义与使用 1.2 random 2.pygamezero知识点 2.1 基本框架,取上节中讲到 ...
- 严肃游戏(中山大学3D游戏作业1)
严肃游戏(中山大学3D游戏作业1) "严肃游戏"的定义 游戏示例:<模拟城市> "严肃游戏"的定义 严肃游戏是现代游戏的一种,它最早诞生于上个世纪6 ...
- Unity引擎泊车游戏 真实停车3D游戏试玩
Unity引擎泊车游戏 真实停车3D游戏试玩 玩起来十分过瘾,游戏的关卡数目浩繁.游戏难度有手機監聽器简易和平凡之分,游戏关卡并没有变革,革新的车辆的巨细,笔者间接上手中等难度,因为车辆增大,经过性 ...
- SAS初级编程系列视频:第一章基本概念
SAS初级编程系列视频:第一章基本概念 SAS初级编程系列视频: Chapter 1 Basic Concepts 本章内容 SAS程序的结构和组成部分 SAS程序处理步骤 SAS库和SAS文件类型 ...
- 怎样写C代码——《狂人C》习题解答1(第一章习题7)
自打小学开始,人们就被告知,做题之前应该先审题.这道理虽然很浅显,但却无比重要. 然而正是由于这道理过于浅显,所以总免不了被轻视--甚至被遗忘.人类历史上发生过无数次因为轻视简单浅显的道理而招 ...
最新文章
- 图像非极大值抑制 Sobel 边缘实现
- 一文读懂Serverless,配置化思想复用到平台系统中
- tomcat架构之-----基本概念
- python time模块详解
- 基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)
- python定时任务_Python定时任务(上)
- 求单链表结点的阶乘和
- 【NLP Subword】三大算法原理:BPE、WordPiece、ULM
- Slave_SQL_Running: No mysql同步故障解决方法
- Android性能全面分析与优化方案研究—几乎是史上最全最实用的
- 万能硬盘数据恢复软件注册码真的可以用吗?
- Chapter 6 (Orthogonality and Least Squares): Least-Squares problems (最小二乘问题)
- linux下系统中的文件传输
- MATLAB(1)---将mat文件转换为csv文件
- oracle用升序索引去降序查询,Oracle工作札记
- 小米红米手机通用解锁教程|红米Note8 Pro解锁教程,获取解锁码一键解锁BL的方法
- Android热修复实现一
- 练习:数字时钟(Python 自定义类)
- TortoiseGit设置中没有远端设置问题
- 【报错】win键被锁怎么解锁
热门文章
- HyperDeck Extreme 8K HDR硬盘录机
- java设计图形界面的基本思路_java图形界面之布局设计
- 西门子PLC1200模拟量到底是4-20ma还是0-20ma?
- Polyworks脚本开发学习笔记(一)-脚本开发环境
- PointNet.pytorch程序注释(二)点云分割
- 用Java编写的模仿电子钟系统
- 采购申请创建采购订单的时候报错“对于总帐帐户*在公司码*中无直接记帐能被做”处理方法
- 美联致美线雕提升术除皱效果怎么样呢
- SQL Server 视图创建点滴
- H∞输出反馈控制器推导(最后含例子及程序)