C++到底是如何从代码到游戏的?
这个简单啊。
你既然问C++了,那我问你,现在,我有一个Student类。C++怎么创建一个学生类的对象?
// 嗯我会!有两种方式:
Student s;
Student *s2 = new Student("张三");
那好,现在这学生的行为有:吃饭,睡觉,上网课。现在你执行个上网课的行为,怎么做?
// 简单啊
s2->upNetworkClass();
通过对象调用成员函数不就成了么。
嗯,上面的代码在学校里都写过吧?有这个基础就够了。
那游戏是啥?无非是一堆图形堆叠呗,把上面的Student类换成窗体类,换成控件类,换成游戏中不同的元素类,然后再组合起来不就完了么。
呐现在,我告诉你,有一个窗体类,叫QWidget,它有一个行为叫show,可以显示窗体。你给我生成一个窗体并显示出来。那就照葫芦画瓢呗:
QWidget *w = new QWidget();
w->show();
来我们看看效果:
呀,有点意思哈?但是这距离游戏还差远呢啊。 你这窗体也太丑了不是。
没事,窗体丑不要紧,我们给她美化一下!
TDWidget * w = new TDWidget(":/img/welcome.png");
w->show();
QWidget
换成了TDWidget
,构造函数里传了一张图片,没超纲吧。再看看效果:
诶?事情好像开始变的有趣了起来?
但还是不够,我这是游戏,要交互的!你这一张死图能干啥。
交互嘛!加个按钮不完了?我给你一个按钮类,这个类有一个move()行为,可以把自己移动到画面的任何地方。你知道你想要的按钮怎么来了吗?
QPushButton * btn = new QPushButton("按钮",w); //第二个参数代表它属于哪个窗体,如果不写,它就会生成在屏幕上而不是窗体里
btn->move(330,450);
瞅瞅:
em…你这按钮,有是有,画风有点突兀了吧。
没事,再美化一下嘛:
TDPushButton *btn = new TDPushButton(":/img/begin_normal.png", // 常规图片":/img/begin_hover.png", // 鼠标悬停的图片":/img/begin_press.png", // 鼠标按下的图片w); // 父控件
btn->move(330,450);
效果:
呀 可以啊。 快快快,然后呢,点开始游戏,进入游戏界面!这个咋做?
嗯…其实界面切换你自己已经会了。
你这个界面不就是一个窗体,想切换界面的话…你把这个窗体关了,再换张图片开一个新的不就完了。
新的窗体用一张传新的图片做背景,我再顺手给加上四个按钮,代码不贴了,就是上面的代码复制粘贴改改坐标,改改图片:
接下来就是游戏的主体部分了,也巨简单,有图就行:
TDMenuButton *btn1 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn1->move(100,100);
TDMenuButton *btn2 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn2->move(165,100);
TDMenuButton *btn3 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn3->move(100,165);
三个按钮,和上面的TDPushButton
没区别,就是换成了TDMenuButton
对不对,没超纲吧。
只要你的图片够美,就能生成这样:
一个按钮会写,三个按钮自然也会写,既然学了点C++都想做游戏了,循环总会写吧:
for(int i = 0; i < 11 ; i++)
{for(int j = 0; j < 6; j++){TDMenuButton * btn = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);btn->move(100+i*65,100+j*65);}
}
效果:(密恐福利)
这…怎么还有点一言难尽呢…
循环会写,随机数会写吗? 随机个头像行吗?
嗯…这下终于像点样了。
最后再加亿点点核心逻辑:点击两个相同的图片,判断它能不能连通,如果能连通,就把这两个按钮直接delete掉,效果就是酱紫:
就是这样咯,从你学过的C++基础语法,结合现有的框架控件,就可以撸这样一个简单的连连看。
当然了,为了点燃你题目里想要的学习热情,我故意避开一些以你现有知识可能听不懂的部分,还有一些逻辑比较绕的部分。比如:
- 避开了注册按钮的回调,
- 避开了随机生成图片的时候要保证成对出现的算法,
- 避开了把这些按钮和数据做关联,
- 避开了如何通过数据计算两点能否连通,
- 等等
但这都不重要,不妨碍你简单体验一下C++是如何从代码到游戏的这个过程。
从图片素材上你们也看出来了,这代码是两三年前的,那个时候还在做培训机构的辅导老师,学生们爱打游戏,不好好上课,就做的这个上课带她们写:
github:王者荣耀风格的连连看
因为本身我不打荣耀,所以里面的头像确实一个也不认识,都是那时候为了勾引学生好好上课,现在游戏里的头像应该有不少都更新好几茬儿了。
这个玩意儿是用Qt C++写的。因为本身对帧率没什么要求,所以基于Qt就可以搞。如果要玩一些真正的游戏(画面需要帧率级别的刷新的),一定要上游戏引擎写的。cocos2d
unity3d
什么的。
当然,我上面说 “游戏无非是一堆图形堆叠呗” 只是为了讲解故意压低一下难度,真正的游戏开发是非常复杂庞大的。
这个小项目确实像上面写的一样,用了大量的TD开头的控件。这个源自于我的一个开源框架叫做TD-Framework
:
TD框架使用手册
因为我叫三级狗(ThreeDog)所以控件普遍用TD开头。Qt本身没有提供这种直接用图片构造控件的方法,所以就自己造了一些。
写下它的时候还是大四刚毕业,那时候我还把这玩意儿叫框架,现在… 我觉得还是叫玩具更合适些:跨平台编译不过,函数指针强转有问题,代码也写的乱七八糟…
以上回答是来源本人知乎,为了遏制抄袭洗稿啥的,搬运过来占住原创。感兴趣的小伙伴可以移步:
C++到底是如何从代码到游戏的? - 三级狗的回答 - 知乎
https://www.zhihu.com/question/385197253/answer/1170395776
C++到底是如何从代码到游戏的?相关推荐
- UE4蓝图无代码编程游戏开发技能学习教程
在虚幻引擎4中创建.设计和开发自己的游戏,无需编码 你会学到什么 虚幻引擎4中使用蓝图的游戏开发(无代码编程) 使用行业标准方法的游戏设计 使用Maya进行三维设计 在本课程中创建您的第一个游戏 Ga ...
- Unity创造没有代码的游戏学习教程
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小:17.4 GB |时长:17h 18m 你会学 ...
- css游戏代码_介绍CSSBattle-第一个CSS代码搜寻游戏
css游戏代码 by kushagra gour 由kushagra gour 介绍CSSBattle-第一个CSS代码搜寻游戏 (Introducing CSSBattle - the first ...
- jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏
原标题:<三国志英杰传>到底是怎样的一款游戏 介绍 作为PC平台上经典的战棋策略类游戏,英杰传系列可谓把这一类型游戏在战略性和资源获取上的精髓发挥的淋漓尽致.系列初代的<三国志英杰传 ...
- 改善到底多大? FXAA画质游戏实测
[文章摘要]随着301.42版本GeForce显卡驱动的发布,NVIDIA正式在控制面板中加入了"FXAA(快速近显卡驱动似抗锯齿)"技术的控制选项.喜欢DIY的玩家朋友对&quo ...
- C++是如何从代码到游戏的?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 C++是如何从代码到游戏的? 嗯. 这个简单啊. 你既然问C++了 ...
- 【百行代码说游戏】ActionScript3.0 小游戏 【劲舞团】源码+演示
最近学ActionScript3.0 以下为自己写的一个小游戏.尽量以最少的代码,实现功能 游戏原理:看代码注释 游戏规则:类似于[劲舞团]游戏,玩家可以按UP,DOWN,LEFT,RIGHT键来操 ...
- 让画面更逼真!这个强化超分辨率GAN让老游戏迎来第二春 | 代码+论文+游戏MOD...
乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 能推动AI落地的,不只有利益,也有兴趣和情怀. 近期就有一群资深游戏玩家,用增强型超分辨率生成对抗网络(ESRGAN)做出了经典游戏的高清化 ...
- flash制作打地鼠游戏代码,打地鼠游戏编程代码
怎么做一个在手机上能玩的打地鼠小游戏? 谷歌人工智能写作项目:小发猫 C语言编程打地鼠 刚写好的,打地鼠小游戏typescript数据类型转换.功能:每三秒,会在游戏区域随机位置刷出地鼠,鼠标点击地鼠 ...
最新文章
- postergresql mysql_PosttgreSQL快速入门:PostgreSQL的安装和配置
- 多元函数的二阶导数对应的矩阵
- 架构设计中服务层的简单理解
- SpringBoot_配置-外部配置加载顺序
- 微信小程序中template模板使用
- 创业公司引导页html5模板
- innosetup 同名文件替换_运维工程师必备命令之文件管理
- spark学习-40-Spark的UnifiedMemoryManager
- C++学习笔记————WINAPI宏定义
- Ubuntu安装cacti步骤
- java 垃圾回收入门
- Android项目文件的目录结构(1)
- QTP连接数据库,并将数据保存至Excel中
- python 图片对比文件夹_Python挑选文件夹里宽大于300图片的方法
- myeclipse黑色主题怎么还原
- python 转doc为txt
- BLP模型(Bell-La Padula模型)
- java全栈工程师要求_Java全栈工程师
- 突破固化思维,如何快速做好陌生领域数据分析?
- 一份Java面试宝典「Java核心知识点」囊括JVM,Spring等29个技术
热门文章
- 标日初级下 第26课 笔记
- 倍加福NJ50-FP-N-P1电感式传感器
- java 实现规则引擎_Java规则引擎 Easy Rules
- 燕山大学里仁学院计算机科学与技术,燕山大学里仁学院2019年各省录取分数线详情...
- 2022-7-25 第八组 wly Java面向对象(6)---多态
- 贝壳找房IPO,房产电商依旧难走
- QT的MVC和MVD架构简述
- LVGL使用记 - GUI-Guider设计使用
- android+皮肤机制,Android-skin-loader 换肤总结
- 树莓派小车教程(三)之——初步实现网页控制小车速度可调(顺序执行)