千机游戏提供最新游戏下载和手游攻略!

项目实战:C/C++游戏开发挑战——六秒挑战,你能赢吗?

发布时间:2025-01-12浏览:56

挑战六秒的说明

其实编写这个“挑战六秒”程序的想法很早就产生了,但是由于各种原因,只能等到放假空闲下来编写。编写过程还算顺利,几乎是一气呵成,用了半天时间就编写成功了。

程序编写过程

首先我需要将程序的框架构建成功,主要过程就是按键后程序能够结束循环并暂停。这个实现后接下来就是设计程序界面。以前设计界面我都是用尺子在纸上进行勾绘。最近我发现 CAD 其实更适用。使用 CAD 可以准确的设计布局,并且可以找准坐标。为了更加真实的模仿“挑战六秒”,我需要按照电子数字字体绘制数字。我将电子数字字体分成 7 个模块。并将每个模块单独的编写成函数,每个模块的绘制是比较耗费时间的,这 7 各模块可以根据不同的组合组成需要的数字。为了防止出现闪屏的情况,我使用覆盖的方法将每次产生的数字进行覆盖。为了更加精确,我使用了精确延时。至于颜色搭配和布局设计这种,这可能就是小时候办手抄小报时培养的吧,每个人的审美因人而异。

效果图

简单了解游戏后我们就来试试吧!(直接上源码,大家可以看注释)

#include#include#includevoid name();// 绘制标题提示等void one(int x, int y);void two(int x, int y);void three(int x, int y);void four(int x, int y);void five(int x, int y);void six(int x, int y);void seven(int x, int y);// one 到 seven 是组成电子数字的 7 个模块void HpSleep(int ms);// 精确延时void OUTNUMBER(int number, int x, int y);// 将 7 个模块组成数字 0 到 9void OUTPUT(int i, int j, int k);// 在屏幕上显示int main(){initgraph(800, 600);setbkcolor(RGB(6, 31, 62));cleardevice();name();while (true){OUTPUT(0, 0, 0);_getch();bool T = false;for (int i = 0; i<= 9; i++){if (T){break;}for (int j = 0; j<= 9; j++){if (T){break;}for (int k = 0; k<= 9; k++){if (_kbhit()){T = true;break;}OUTPUT(i, j, k);HpSleep(10);}}}_getch();_getch();}return 0;}void name(){RECT r = { 240, 80, 560, 160 };settextcolor(RGB(163, 212, 255));settextstyle(80, 0, _T("楷体"));drawtext(_T("挑战六秒"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);settextcolor(RGB(254, 218, 168));settextstyle(20, 0, _T("楷体"));outtextxy(160,450,_T("提示:按“空格键”开始,再按暂停,继续按将置零!"));settextcolor(RGB(252, 191, 116));outtextxy(160, 480, _T("准确暂停到六秒整挑战成功!"));}void one(int x, int y){int pts[] = { 36 + x, 14 + y, 59 + x, 39 + y, 118 + x, 39 + y, 138 + x, 15 + y, 131 + x, 9 + y, 41 + x, 9 + y };setfillcolor(RGB(176, 215, 254));solidpolygon((POINT*)pts, 6);}void two(int x, int y){int pts[] = { 32 + x, 17 + y, 53 + x, 40 + y, 47 + x, 96 + y, 26 + x, 113 + y, 18 + x, 102 + y, 25 + x, 27 + y };setfillcolor(RGB(184, 249, 251));solidpolygon((POINT*)pts, 6);}void three(int x, int y){int pts[] = { 143 + x, 20 + y, 152 + x, 31 + y, 144 + x, 105 + y, 132 + x, 115 + y, 115 + x, 98 + y, 122 + x, 41 + y, };setfillcolor(RGB(187, 250, 255));solidpolygon((POINT*)pts, 6);}void four(int x, int y){int pts[] = { 46 + x, 101 + y, 113 + x, 101 + y, 127 + x, 116 + y, 111 + x, 131 + y, 45 + x, 131 + y, 29 + x, 117 + y };setfillcolor(RGB(187, 254, 219));solidpolygon((POINT*)pts, 6);}void five(int x, int y){int pts[] = { 25 + x, 120 + y, 43 + x, 136 + y, 38 + x, 199 + y, 15 + x, 223 + y, 6 + x, 209 + y, 15 + x, 127 + y };setfillcolor(RGB(245, 255, 192));solidpolygon((POINT*)pts, 6);}void six(int x, int y){int pts[] = { 132 + x, 119 + y, 144 + x, 128 + y, 136 + x, 213 + y, 129 + x, 222 + y, 107 + x, 201 + y, 115 + x, 134 + y };setfillcolor(RGB(245, 255, 190));solidpolygon((POINT*)pts, 6);}void seven(int x, int y){int pts[] = { 40 + x, 203 + y, 104 + x, 203 + y, 126 + x, 226 + y, 120 + x, 231 + y, 24 + x, 231 + y, 18 + x, 226 + y };setfillcolor(RGB(251, 221, 185));solidpolygon((POINT*)pts, 6);}void OUTNUMBER(int number, int x, int y){setfillcolor(RGB(6, 31, 62));solidrectangle(x, y, x + 160, y + 240);switch (number){case 0:one(x, y); three(x, y); six(x, y); seven(x, y); five(x, y); two(x, y); break;case 1:three(x, y); six(x, y); break;case 2:one(x, y); three(x, y); four(x, y); five(x, y); seven(x, y); break;case 3:one(x, y); three(x, y); four(x, y); six(x, y); seven(x, y); break;case 4:two(x, y); three(x, y); four(x, y); six(x, y); break;case 5:one(x, y); two(x, y); four(x, y); six(x, y); seven(x, y); break;case 6:one(x, y); two(x, y); four(x, y); six(x, y); seven(x, y); five(x, y); break;case 7:one(x, y); three(x, y); six(x, y); break;case 8:one(x, y); three(x, y); six(x, y); seven(x, y); five(x, y); two(x, y); four(x, y); break;case 9:one(x, y); three(x, y); six(x, y); seven(x, y); two(x, y); four(x, y); break;}}void OUTPUT(int i, int j, int k){OUTNUMBER(i, 80, 180);setfillcolor(RGB(64, 157, 254));solidcircle(320, 240, 15);setfillcolor(RGB(163, 212, 255));solidcircle(320, 360, 15);OUTNUMBER(j, 400, 180);OUTNUMBER(k, 560, 180);}// 精确延时函数(可以精确到 1ms,精度 ±1ms)// 记得加头文件 time.h// by yangw80, 2011-5-4void HpSleep(int ms){static clock_t oldclock = clock();// 静态变量,记录上一次 tickoldclock += ms * CLOCKS_PER_SEC / 1000;// 更新 tickif (clock() >oldclock)// 如果已经超时,无需延时oldclock = clock();elsewhile (clock()< oldclock)// 延时Sleep(1);// 释放 CPU 控制权,降低 CPU 占用率}

用户评论

秘密

这也太酷了!我一直想学习C++,现在看到这样的项目实战,简直太有动力了!六秒钟完成游戏的设计和实现,听起来就很有挑战性,我要赶紧试试看能不能突破自己!

    有17位网友表示赞同!

栀蓝

作为一名初学者,感觉这个时间限制确实有点紧。不过项目这么棒,学习过程一定是很有趣的!计划花些时间把C++语言基础再巩固一下,然后再参与挑战!期待看到更多朋友分享他们的成果!

    有12位网友表示赞同!

陌離

玩游戏总是一件很放松的事情,没想到C++也可以实现游戏开发!六秒这个时间限制确实很有意思,逼迫自己要更加精简和高效地写代码。有兴趣跟着教程一步步学习体验一下!

    有7位网友表示赞同!

权诈

之前看了一些关于游戏开发的教程,感觉都很复杂,需要很多复杂的技能和工具。这个C++自制游戏的挑战看起来更简单易行,非常适合想入门游戏开发的朋友们尝试。说不定我还能在挑战中找到灵感,开始创作自己的游戏!

    有18位网友表示赞同!

七夏i

挑战六秒钟完成游戏听起来很有意思,但对于不太熟悉C++的人来说可能有点困难吧?不知道教程里会提供什么样支持和帮助?有准备参加挑战的同学请分享一下你们的学习资源和经验吧!

    有8位网友表示赞同!

从此我爱的人都像你

这个项目真的太棒了!我想学习一下如何用C++开发游戏, 能够快速上手也是一个很大的优势!希望这个项目以后能更新更多类型的挑战项目。我也想试试其他的语言来开发游戏!

    有17位网友表示赞同!

逾期不候

我一直对游戏开发感兴趣,但从来没有尝试过用C++实现。 这个挑战看起来很有趣,也许我可以趁着这段时间学习一下C++的基础知识,然后来尝试一下这个项目!

    有7位网友表示赞同!

莫阑珊

六秒钟完成一个游戏听起来难度很小吧,但我估计很多人会遇到一些卡壳的问题,比如想要在有限的时间内设计出一个逻辑清晰、玩法有趣的算法。 这个挑战确实考验了大家的编程技巧和创意! 我期待看到大家制作的游戏作品!

    有12位网友表示赞同!

浅笑√倾城

我想学习C++编程,但最近感觉自己进度慢了很多。这个项目看起来很有趣并能让我快速入门。 而且,能在游戏中应用编程知识真的很有吸引力!或许我应该参与这个挑战,给自己加点动力!

    有19位网友表示赞同!

无所谓

我觉得这更像是一个编码竞赛而非“游戏制作”的实战项目吧?虽然C++学习很有价值,但六秒钟的时间限制可能导致游戏的创意和玩法比较单薄, 缺少更多趣味性。

    有5位网友表示赞同!

珠穆郎马疯@

作为一名C++开发者,我一直对用自己的代码构建游戏很着迷。这个项目真的很棒!希望能看到大家创作出一些创意十足且有趣的短游戏作品。我也期待能与其他开发者交流学习,分享经验和技巧!

    有11位网友表示赞同!

情如薄纱

C++编程确实有一点难上手,特别是对于初学者来说。挑战时间这么短,希望教程讲解能清晰易懂,引导我们快速把握核心点,而不是只是一些抽象的概念讲解。 最重要的是希望最终的游戏作品可以让我们体会到C++的魅力!

    有5位网友表示赞同!

*巴黎铁塔

我个人更倾向于那些自由度更高的项目。 这个 “六秒钟” 的限制让我感觉有点局限,我想发挥更多创意和想象力来设计一个真正有意思的游戏!但还是感谢这个项目的尝试,为开发者提供了一个学习和实践的机会。

    有18位网友表示赞同!

颜洛殇

非常期待看到项目完成后大家展示的遊戲作品! 我相信很多朋友都能在挑战中找到乐趣, 也能收获到宝贵的编程经验。 让我们一起见证C++游戏开发的魅力吧!

    有17位网友表示赞同!

热点资讯