c - 我将如何 'spawn' 或按程序实例化多个生物?

标签 c oop instantiation procedural-programming

当我决定自学编程时,我从 Java 开始。尽管我熟悉编写简单的过程软件(主要是 PHP),但我最近意识到,对于更复杂的操作,我依赖对象。

我的第一个 Java 游戏通过实例化对象在随机位置以随机速度生成对手。我对用 C 程序实现这个概念感到困惑(我对此知之甚少),但我只能想到为每个对手中的变量创建不同的数组,并使用数组索引作为伪对象引用“变量” '.

int size[50]; // opponent size
for (i = 0; i < 100; i++) {
    size[i] = random_number();
}

有没有一个我的面向对象思维忽略的简单解决方案?或者某些问题是否真的适合面向对象的概念,以至于您必须构造假对象(或至少使用类似的模型)?我一直在 C 代码中看到结构体,并且我知道它们在概念上与类类似,但这就是我所知道的全部。所以我想知道这样的事情是否可以用完全非面向对象的思维方式实现。实例化没有真正的替代品,不是吗?这只是内存的分配,所以在我看来,某些 C 程序别无选择,只能使用某种我认为是对象的形式来编写。

请告诉我我忽略了一些东西,否则我无法尊重那些斥责面向对象范例的 C 纯粹主义者。 (我绝不是面向对象的狂热者;不过,我的思想已经非常习惯这个想法,并且很难通过不提供您习惯的不同视角来看待事物。)

谢谢!

最佳答案

作为一个最初也是面向对象程序员的人,我也花了一些时间才习惯过程式编程。对我来说最重要的是习惯使用指针,并记住函数不是由对象管理的,而是作用于您给它们的“对象”。不管怎样,我认为这样的东西可能就是您正在寻找的东西,以帮助您获得您想要做的事情的程序图像。

struct creature {
    int speed;
    int size;
};

void init_creature(struct creature *c) {
    c->speed = random_number();
    c->size = random_number();
}

int main() {
    struct creature creatures[10];

    for (int i = 0; i < (sizeof(creatures)/sizeof(struct creature)); i++) {
        struct creature c = creatures[i];
        init_creature(&c);
    }
}

关于c - 我将如何 'spawn' 或按程序实例化多个生物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246693/

相关文章:

c - 在以太网帧中设置 CoS(PCP、802.1P)

c - 从 square.c 检测三角形

集合和迭代器的 C# 性能

PHP MySQL 对象优化

javascript - 在 JavaScript 中,如何将未实例化的对象传递给不同类的构造函数调用,该类稍后在时间轴中实例化?

c# - 如何重新初始化或重置类的属性?

autohotkey - 为什么我的实例变量在 AHK 中表现得像一个类变量?

c - for循环,将起始值留空?

c++ - 从项目 VS2013 外部打开并读取文件

Node.js:如何从抽象类中获取 'inherit'?