在C++中实现游戏的骨骼

一,一个简单游戏的运行思维

1. 一个游戏是如何运行的?为什么《飞机大战》中的飞机可以在屏幕中来回穿梭?

2.游戏运行中间的每一种行为,玩家的输入,游戏中反馈给玩家的输出,对应的操作为什么能实现?为什么不会自动结束游戏?

首先,我们把游戏“缩放”一下,我们可以认为游戏的运行即是一个大的循环;while(true) {};

有这样一个思路,我们就能完成一个简单的游戏,比如我要完成一个一直打印“*”的游戏(这里我们就叫这个游戏为《打印*》);(这里慢点吐槽,因为要带入一种游戏骨架的思维)

#include <iostream>
using namespace std;
int main() {
    while(true) {//这样的一个循环,就可以完成我们的一个超级简单(无聊)的游戏啦!
        cout << "*";
    }
    return 0;
}

 

OK,1.0版本的《打印*》已经完成,我们现在进入下一步,相信我们心中有很大的疑惑,我们要的效果是一个有玩家的输入,并且游戏可以反馈玩家的输出,那又怎样实现?

我们需要添加一下功能,比如我想要让玩家控制打印“*”,玩家点击“w”循环可以停止或者运行,这样达到玩家与游戏的简单互动

#include <iostream>
#include <conio.h>
using namespace std;
int main() {
    bool pand = true;//判断当前游戏状态,true为打印“*”,false为暂停
    while(true) {
        cout << "*";
        if(kbhit()) {//这个函数是用来接收键盘的输入,我们可以这样理解,当游戏运行的时候,没有键盘输入的话,就代表玩家想要以当前的游戏状态运行
            char c = getch();//程序如果运行到这里,就表示玩家输入了内容,我们需要接受一下输入的内容
            if(c == 'w') {//我们要让程序对接收的内容进行判断,如果是'w'的话,才可以暂停
                if(pand) {
                    system("pause");//我们先用一个简单的暂停,因为在游戏暂停的同时,我们要思考游戏的状态和游戏时间和世界的变化,所以,我们在简单的游戏中先用能理解的方法带入
                    pand = false;//改变游戏的状态
                }else {
                    pand = true;//改变游戏的状态
                }
            }
        }
    }
    return 0;
}

 

完成以上代码,我们就更新了游戏的内容,2.0版本的《打印“*”》就完成了。

OK,现在说一下我们完成的这个小游戏为什么会觉得很捞?因为这个游戏毫无乐趣性可言,没有人机交互,人人交互(呸,这个以后慢慢更),好啦,接下来完成我们的《打印“*”》3.0,现在我们的“顶头”要求我们打印出一个“*”,并且可以让玩家按wasd去控制这个“*”,为什么非要移动“*”呢?你无奈的想,OK,“顶头”的想法是这样的,他想让忘记可以控制自己的角色“*”去自由的探索游戏世界,OK,这也正是做游戏的乐趣所在

#include <iostream>
#include <conio.h>
using namespace std;
int main() {
    int x, y;//xy代表我们角色“*”的位置
    x = 0, y = 0;//初始化位置
    while(true) {
        for(int i = 0; i < x; i++) {
            for(int j = 0; j < y; j++) {
                cout << " ";
            }
            if(i != x - 1)
            cout << endl;
        }
        cout << "*";
        if(kbhit()) {
            char c = getch();
            switch(c) {
                case 'w':
                    x--;
                    if(x < 0) x = 0;
                    break;
                case 'a':
                    y--;
                    if(y < 0) y = 0;
                    break;
                case 's':
                    x++;
                    if(x > 15) x = 15;
                    break;
                case 'd':
                    y++;
                    if(y > 15) y = 15;
                    break;
            }
        }
        system("cls");
    }
    return 0;
}

这期先更到这里,下一期继续

原文链接: https://www.cnblogs.com/yylgoodjob/p/12468783.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    在C++中实现游戏的骨骼

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/334939

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:53
下一篇 2023年3月1日 下午9:54

相关推荐