记录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游戏第一章习题相关推荐

  1. python游戏编程入门书籍推荐-游戏编程入门书籍推荐:想要游戏编程尽快入门这些书不要错过...

    游戏编程一直都是编程之中的一大热点,这也是由于游戏本身的火热造成的结果,所以每年都有很多人在关注着游戏编程.介于此小编今天就来将一些好的游戏编程入门书籍推荐给大家,希望对想要了解和学习游戏编程的朋友能 ...

  2. 3D游戏编程与设计——游戏的本质章节作业与练习

    3D游戏编程与设计--游戏的本质章节作业与练习 18342138 郑卓民 3D游戏编程与设计--游戏的本质章节作业与练习 作业与练习: 游戏名称及简介: 游戏的随机性 游戏的玩法与目标 游戏的冲突 游 ...

  3. 编程自救指南--0x01 第一章 你真的了解你的专业吗 ?

    编程自救指南–0x01 第一章 你真的了解你的专业吗 ? 0x0 前情提要 看这篇文章之前 先卸载某乎(平台人均年薪百万,top100高校) 心中默念 "我是咸鱼,我是咸鱼,我渴望翻身&qu ...

  4. python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课

    python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...

  5. python游戏编程入门免费_python游戏编程入门 python游戏编程入门课

    python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...

  6. 小学生python游戏编程4----拼图游戏

    小学生python游戏编程4----拼图游戏 主要设计 应用知识点 1.python知识点 1.1 函数定义与使用 1.2 random 2.pygamezero知识点 2.1 基本框架,取上节中讲到 ...

  7. 严肃游戏(中山大学3D游戏作业1)

    严肃游戏(中山大学3D游戏作业1) "严肃游戏"的定义 游戏示例:<模拟城市> "严肃游戏"的定义 严肃游戏是现代游戏的一种,它最早诞生于上个世纪6 ...

  8. Unity引擎泊车游戏 真实停车3D游戏试玩

    Unity引擎泊车游戏 真实停车3D游戏试玩  玩起来十分过瘾,游戏的关卡数目浩繁.游戏难度有手機監聽器简易和平凡之分,游戏关卡并没有变革,革新的车辆的巨细,笔者间接上手中等难度,因为车辆增大,经过性 ...

  9. SAS初级编程系列视频:第一章基本概念

    SAS初级编程系列视频:第一章基本概念 SAS初级编程系列视频: Chapter 1 Basic Concepts 本章内容 SAS程序的结构和组成部分 SAS程序处理步骤 SAS库和SAS文件类型 ...

  10. 怎样写C代码——《狂人C》习题解答1(第一章习题7)

    自打小学开始,人们就被告知,做题之前应该先审题.这道理虽然很浅显,但却无比重要.     然而正是由于这道理过于浅显,所以总免不了被轻视--甚至被遗忘.人类历史上发生过无数次因为轻视简单浅显的道理而招 ...

最新文章

  1. 图像非极大值抑制 Sobel 边缘实现
  2. 一文读懂Serverless,配置化思想复用到平台系统中
  3. tomcat架构之-----基本概念
  4. python time模块详解
  5. 基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)
  6. python定时任务_Python定时任务(上)
  7. 求单链表结点的阶乘和
  8. 【NLP Subword】三大算法原理:BPE、WordPiece、ULM
  9. Slave_SQL_Running: No mysql同步故障解决方法
  10. Android性能全面分析与优化方案研究—几乎是史上最全最实用的
  11. 万能硬盘数据恢复软件注册码真的可以用吗?
  12. Chapter 6 (Orthogonality and Least Squares): Least-Squares problems (最小二乘问题)
  13. linux下系统中的文件传输
  14. MATLAB(1)---将mat文件转换为csv文件
  15. oracle用升序索引去降序查询,Oracle工作札记
  16. 小米红米手机通用解锁教程|红米Note8 Pro解锁教程,获取解锁码一键解锁BL的方法
  17. Android热修复实现一
  18. 练习:数字时钟(Python 自定义类)
  19. TortoiseGit设置中没有远端设置问题
  20. 【报错】win键被锁怎么解锁

热门文章

  1. HyperDeck Extreme 8K HDR硬盘录机
  2. java设计图形界面的基本思路_java图形界面之布局设计
  3. 西门子PLC1200模拟量到底是4-20ma还是0-20ma?
  4. Polyworks脚本开发学习笔记(一)-脚本开发环境
  5. PointNet.pytorch程序注释(二)点云分割
  6. 用Java编写的模仿电子钟系统
  7. 采购申请创建采购订单的时候报错“对于总帐帐户*在公司码*中无直接记帐能被做”处理方法
  8. 美联致美线雕提升术除皱效果怎么样呢
  9. SQL Server 视图创建点滴
  10. H∞输出反馈控制器推导(最后含例子及程序)