定为“明星”,与12万程序员共同成长!
C++ 如何从代码到游戏
这很简单。
既然你问了C++,我就问你,现在,我有课。 如何在C++中创建学生类对象?
// 嗯我会!有两种方式:
Student s;
Student *s2 = new Student("张三");
好的,现在这个学生的行为包括:吃饭、睡觉、上网课。 现在你正在上网课,你应该做什么?
// 简单啊
s2->upNetworkClass();
通过对象调用成员函数还不够吗?
嗯,上面的代码是在学校写的吧? 有这个基础就够了。
那是什么游戏? 无非就是一堆图形堆叠起来。 把上面的类改成表单类,改成控制类,改成游戏中不同的元素类,然后再组合起来就可以了。
现在,我告诉你,有一个名为show的表单类,它有一个名为show的行为,可以显示表单。 您为我生成一个表单并显示它。 那么就按照葫芦的例子来吧:
QWidget *w = new QWidget();
w->show();
我们来看看效果:
是的,这很有趣,是吧? 但这距离游戏还很遥远。 你的造型也太丑了吧?
没关系,形式丑一点没关系,美化一下吧!
TDWidget * w = new TDWidget(":/img/welcome.png");
w->show();
相反,图片是在构造函数中传递的,因此它不会超出范围。 我们看一下效果:
呃? 事情似乎变得有趣了?
但这还不够。 这是一个游戏,需要互动! 你能用这张死照片做什么?
相互作用! 无法完成添加按钮? 我会给你一个按钮类。 该类具有 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);
这三个按钮与上面的没有什么不同,只是它们已更改为正确的按钮,而不是位于顶部。
只要你的图片足够漂亮,你就可以生成这样的东西:
我可以写一个按钮,也可以写三个按钮。 由于我学了一些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);
}
}
效果:(秘密恐怖福利)
这……为什么还是有点难以解释……
你会写循环和随机数吗? 可以使用随机头像吗?
嗯...现在终于看起来像什么了。
最后添加一点核心逻辑:点击两张相同的图片来判断是否可以连接。 如果可以连接的话,直接去掉两个按钮就可以了,效果是紫色的:
就是这样。 从你所学的基本C++语法,结合已有的框架控件,你就可以创建这样一个简单的连连看。
当然,为了在题中激发你们的学习热情,我特意避开了一些你们现有知识可能看不懂的部分,以及一些逻辑比较复杂的部分。 例如:
避免注册按钮的回调,
它避免了在随机生成图像时确保出现对的算法。
避免将这些按钮与数据相关联,
它避免了如何通过数据来计算两个点是否相连。
ETC。
但这并不重要。 并不妨碍你简单体验一下C++从代码到游戏的过程。
分向線
从图片素材中可以看出,游戏中的很多头像应该已经更新过好几次了。
这个东西是用Qt C++写的。 由于没有帧率要求,因此可以基于Qt来完成。 如果你想玩一些真实的游戏(屏幕需要在帧率级别刷新),你必须使用游戏引擎来编写它。 什么。
当然,我上面说游戏无非就是一堆图形,只是为了说明故意降低难度。 真正的游戏开发是非常复杂和庞大的。
这个小项目确实如上面所写,使用了很多以TD开头的控件。 这来自我的一个名为 TD- 的开源框架
Qt本身并没有提供这种直接从图片构造控件的方法,所以我自己创建了一些。 当然跨平台版本是无法编译的。 强制传递函数指针存在问题,代码写得乱七八糟。 这只是为了让您对这些有一个初步的了解。 在实际项目中,这只是冰山一角。 。 。 。
顺便说一句,鸟哥是一个喜欢胡闹的程序员。 他喜欢在业余时间开发自己的网站、小程序、APP等。 这些东西都离不开服务器! 最近,围绕服务器主题创建了一个微信群。 喜欢玩服务器或者想自己开发一款产品的读者可以进来互相学习交流! 我还会时不时的给大家带来一些服务器相关的优惠券! 如果你不感兴趣也不喜欢大惊小怪,那就没有必要去凑热闹!
识别二维码并添加微信
发送【服务器】获取邀请链接