关于制作C++游戏这件事

前言

刚开始学C++的你,是不是看别的大佬制作的游戏,十分羡慕,希望自己设计一个游戏而无从下手呢?
如果正是如此,那这篇文章或许会给你启发。

正文

1:编译配置

如果你已经下载了一款C++编译器,请跳过

个人比较推荐DEVC++,虽然版本较低,但简单易上手,下载后就能用。
安装教程
当然,VS,VSCode也可以,但是需要配置什么的,很麻烦

2:知识储备

需要储备如下知识:

  • 数据结构
  • 顺序结构
  • 分支结构
  • 循环结构
  • 数组
  • 字符串
  • 结构体
  • 函数与递归

什么类啊,多线程啊,各种容器啊,其实对于一个小程序并没那么重要。那些算法也用不上,就别管那么多,先把框架搭建起来再说。

3:代码创作过程

必备框架

头文件

在DevC++中,头文件只需要添加一个:

#include<bits/stdc++.h>

它包括了绝大多数的头文件,如

#include<string>
#include<fstream>
#include<cstring>
#include<iostream>
#include<vector>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<stdexcept>
#include<exception> 
...

这样你就没必要因找不到头文件而干着急了。
不过也有一个缺点:因为包含了无数头文件,所以有很多词语都变成了敏感词,在创建变量的时候要小心!
如果程序比较大,可能会因为变量名冲突导致程序崩溃。
例:

#include<bits/stdc++.h>
using namespace std;
int x1,y1//危险!!!!这种变量名称有可能导致程序崩溃
...

但是,如果你用的不是DevC++,那还是好好地一个一个列出来吧~

全局变量

设定全局变量,和数据结构体是必须的.
全局变量可以让任何函数调用,这样就不需要每次调用函数都要传导很多变量了。
结构体可以封装各种类型的变量,还是很有帮助的。
例如,写一个打怪游戏,每个敌人都有自己的血量,攻击力等,虽然数值不同,但总体也就那几个变量,可以都用一个结构体概括。

struct guai{
int blood;
int miss;
bool isboss;
string name;
}teacher,
homework,
...;

在创建全局变量时尽量别偷懒,因为当程序更大时,变量也越来越多,可能有重名的情况

函数

一个游戏,实际上只需要两个函数(主函数不算):

void GAME(); // 游戏页面
void MAIN(); // 主页面 

也许你认为函数没什么用,但等到代码多了,如果没有函数来分装代码,就会很难维护,找一个Bug要花无数的精力。
一个简易的迷宫游戏,就需要不少函数了!

void paint();           // 地图渲染引擎
void winnerprint();     // 胜利动画
void randrestart();     // 随机地图生成器
void KO(Die way);       // 死亡处理及动画
void GAME();            // 游戏主逻辑
int Suiji(int many);    // 封装随机数生成
void Changelog();       // 更新日志 
void Settings();        // 设置 
void Notice();          // 公告 
void Howplay();         // 玩法详解 
void MAIN();            // 主界面

还有一点:建议在主函数和其他所有函数之前,把除主函数外的函数都声明一遍。
因为在编译的时候是从上到下编译的,如果一个函数调用了另一个在他之后声明的函数,会报错!
例:

#include<bits/stdc++.h>
using namespace std;
int a(int x){
	int y=1;
	y=b(x); //会报错
	return y;
}
int b(int m){
	return m*2;
}
int main(){
	int c;
	cin>>c;
	cout<<a(c);
	return 0;
}

报错

正确方法:

#include<bits/stdc++.h>
using namespace std;
//先把函数声明一遍 
int a(int x);
int b(int m);
//接着再编辑函数 
int a(int x){
	int y=1;
	y=b(x); 
	return y;
}
int b(int m){
	return m*2;
}
int main(){
	int c;
	cin>>c;
	cout<<a(c);
	return 0;
}

功能进阶

代码框架搭建好后,如果你觉得不满意,还可以加更多的功能。
当然,头文件也需要升级。
这俩就很GOOD

#include <windows.h>    // 控制台大大大升级!!!(黑客必备 )
#include <conio.h>      // 非阻塞式键盘输入(有getch函数,输入的消息自动接收,不需要按回车)

其他的库你也可以自行下载

字体颜色

绚丽的颜色可以为你的代码添砖加瓦。
设置字体颜色

设置标题

在各种界面设定不同的标题,能让界面更美观。
奉上自创代码

// 获取终端列数(Windows 实现)
int GetTerminalColumns() {
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    return csbi.srWindow.Right - csbi.srWindow.Left + 1;
}
// 打印自适应标题
void printtitle(string title) {
    system("cls");
    int cols = GetTerminalColumns();

    // 生成自适应分隔线(全屏横线)
    cout << setfill('-')              // 设置填充字符为 -
        << setw(cols) << ""          // 输出宽度为终屏列数的空字符串(自动填充-)
        << "\n\n";                   // 换两行

    // 计算标题居中位置(带冒号)
    title += ":";                     // 添加标题后的冒号
    int title_len = title.length();
    int left_pad = max(0, (cols - title_len) / 2); // 防止负数

    // 输出居中标题
    cout << setfill(' ')              // 重置填充为空格
        << setw(left_pad) << ""      // 左侧填充空格
        << title                    // 输出标题(已包含冒号)
        << "\n\n";                  // 换两行

    // 再次输出分隔线
    cout << setfill('-')
        << setw(cols) << ""
        << "\n\n";
}

文件保存

进度保存到本地,不需要每次都重新练级。
(这个代码因人而异,不过因为文件保存较为复杂,有很多保存方式,你可以把你代码发给AI,让他帮你写一个)
不能用freopen,因为fclose之后就啥事儿也干不了了,建议用C++风格

兼容性问题

这个问题很重要。因为如果你想让你的代码在VS,VSCode什么的上面也能跑起来,需要更改代码!
所以,需要在所有代码前面写东西:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#define NOMINMAX
#endif

如果你用了getch(),应改为GETCH(),并再写一个函数:

int  GETCH(void) {
#ifdef _MSC_VER
    return _getch();
#elif defined(__MINGW32__) || defined(__MINGW64__)
    return getch();
#endif
}

具体原因不用管,加上就是了

其他

因为每一次打开终端,都会自动将输入法改成中文,但getch需要接受的是英文字母,所以还得再按一次shift,很麻烦,所以可以加上一个这函数:

// 切换输入法
void toggleIME() {
    // 模拟按下Shift键切换中英文(适用于微软拼音)
    keybd_event(VK_SHIFT, 0, 0, 0); // 按下Shift
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); // 释放Shift
}
//在主函数开头调用这个函数
int main(){
	toggleIME();
    //其它代码
    ...
}

后记

之所以写这篇文章,一是因为流量券快过期了,二是因为发现,在 CSDN中的游戏开发教程,要么是太专业(好吧我承认是我太蒟蒻看不懂),要么是比较笼统,都没有细致的介绍游戏代码的创作过程,而我的这篇文章刚好填补了新手独立创作C++游戏区域的空白。
希望这篇文章能给你一些帮助!
(求点赞,关注)

参考

Dev-C++5.11安装教程
C++ 设置字体颜色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值