你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

体验一下C++是如何从代码到游戏的这个过程

[复制链接]
gaosmile 发布时间:2020-8-10 22:39
C++是如何从代码到游戏的

这个简单啊。

你既然问C++了,那我问你,现在,我有一个Student类。C++怎么创建一个学生类的对象?

// 嗯我会!有两种方式:; X+ C1 G1 ~4 H- c7 s
Student s;
) x$ I3 K* z$ K' mStudent *s2 = new Student("张三");
0 Z; H0 Z, T& n* w- \! _- t7 p

那好,现在这学生的行为有:吃饭,睡觉,上网课。现在你执行个上网课的行为,怎么做?

// 简单啊3 U1 z* m  v1 _2 w, K
s2->upNetworkClass();

. V% i5 M8 L) R$ r% @5 o

通过对象调用成员函数不就成了么。

嗯,上面的代码在学校里都写过吧?有这个基础就够了。

那游戏是啥?无非是一堆图形堆叠呗,把上面的Student类换成窗体类,换成控件类,换成游戏中不同的元素类,然后再组合起来不就完了么。

呐现在,我告诉你,有一个窗体类,叫QWidget,它有一个行为叫show,可以显示窗体。你给我生成一个窗体并显示出来。那就照葫芦画瓢呗:

QWidget *w = new QWidget();* O0 i6 \* u8 \* H/ C
w->show();
% I# b( h) f; ^

来我们看看效果:
) P( O9 U" t" O3 i2 w6 t3 F2 b: V

微信图片_20200810223605.png

呀,有点意思哈?但是这距离游戏还差远呢啊。你这窗体也太丑了不是。

没事,窗体丑不要紧,我们给她美化一下!

TDWidget * w = new TDWidget(":/img/welcome.png");2 u2 k& b8 ~; V# ^
w->show();

9 Y! b/ U7 p4 W5 S& k

QWidget换成了TDWidget,构造函数里传了一张图片,没超纲吧。再看看效果:

微信图片_20200810223608.png

诶?事情好像开始变得有趣了起来?

但还是不够,我这是游戏,要交互的!你这一张死图能干啥。

交互嘛!加个按钮不完了?我给你一个按钮类,这个类有一个move()行为,可以把自己移动到画面的任何地方。你知道你想要的按钮怎么来了吗?

QPushButton * btn = new QPushButton("按钮",w); //第二个参数代表它属于哪个窗体,如果不写,它就会生成在屏幕上而不是窗体里
2 ?8 K* P7 Y) a/ J6 Sbtn->move(330,450);

3 K2 Z, u' @1 l9 [' W4 i- v& a

瞅瞅:

微信图片_20200810223612.jpg

em.......你这按钮,有是有,画风有点突兀了吧。

没事,再美化一下嘛:

TDPushButton *btn = new TDPushButton(# `  S' `( L! _7 F5 ]
   ":/img/begin_normal.png", // 常规图片& `7 U; Z. U( e; q- ]) r7 `9 [* i; g
   ":/img/begin_hover.png", // 鼠标悬停的图片
# w( e: c+ T- R   ":/img/begin_press.png", // 鼠标按下的图片+ F5 J' r) E0 H. w4 G
   w);    // 父控件, b" V$ q# g: ]% C  W8 M, A& v/ \
btn->move(330,450);

9 a2 M7 e3 c. u" g+ v* j1 F

效果:

微信图片_20200810223616.png

呀 可以啊。快快快,然后呢,点开始游戏,进入游戏界面!这个咋做?

嗯.....其实界面切换你自己已经会了。

你这个界面不就是一个窗体,想切换界面的话.....你把这个窗体关了,再换张图片开一个新的不就完了。

新的窗体用一张传新的图片做背景,我再顺手给加上四个按钮,代码不贴了,就是上面的代码复制粘贴改改坐标,改改图片:

接下来就是游戏的主体部分了,也巨简单,有图就行:

TDMenuButton *btn1 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
4 ^$ w) |/ v# sbtn1->move(100,100);
( b( ~4 y' a' V. }) M$ NTDMenuButton *btn2 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
8 a2 D2 _7 H* l$ Y5 W+ Z# }. Tbtn2->move(165,100);
0 E+ S% h) Y, }- S3 x: CTDMenuButton *btn3 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);- B7 O5 K3 f$ n" s0 J3 t
btn3->move(100,165);

! ~6 s  V+ t7 P2 S3 O1 k

三个按钮,和上面的TDPushButton没区别,就是换成了TDMenuButton对不对,没超纲吧。

只要你的图片够美,就能生成这样:

微信图片_20200810223619.png

一个按钮会写,三个按钮也会写,既然学了点C++都想做游戏了,循环总会写吧:

for(int i = 0; i < 11 ; i++)
5 p  }  k6 _9 ^1 s5 Z  ] {
2 y( V4 R6 ]5 Q6 U  for(int j = 0; j < 6; j++)
+ c; U+ ^4 W8 ]0 h# [# l2 G  {
9 S: O# \* |! L   TDMenuButton * btn = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
! q/ T  Y- o5 o: y# o5 s8 s   btn->move(100+i*65,100+j*65);
6 M# ~, Z. s! D: m  }
7 W' ^7 Z$ R* g" `7 u }

! f! Y% z) f0 d# k: O4 F) y

效果:(密恐福利)

微信图片_20200810223624.png

这.....怎么还有点一言难尽呢......

循环会写,随机数会写吗?随机个头像行吗?

微信图片_20200810223627.png

嗯......这下终于像点样了。

最后再加亿点点核心逻辑:点击两个相同的图片,判断它能不能连通,如果能连通,就把这两个按钮直接delete掉,效果就是酱紫:

微信图片_20200810223630.gif

就是这样咯,从你学过的C++基础语法,结合现有的框架控件,就可以撸这样一个简单的连连看。

当然了,为了点燃你题目里想要的学习热情,我故意避开一些以你现有知识可能听不懂的部分,还有一些逻辑比较绕的部分。比如:

避开了注册按钮的回调,

避开了随机生成图片的时候要保证成对出现的算法,

避开了把这些按钮和数据做关联,

避开了如何通过数据计算两点能否连通,

等等

但这都不重要,不妨碍你简单体验一下C++是如何从代码到游戏的这个过程。


1 w1 P9 H! ~6 E0 B
收藏 评论0 发布时间:2020-8-10 22:39

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版