c# C中的封装概念和结构管理

k2fxgqgv  于 2023-08-01  发布在  C#
关注(0)|答案(1)|浏览(224)

简介:

我是一个计算机工程师的学生,我们必须在一组2个学生,用我们自己的光线投射代码,在C语言和我们想要的主题,像Wolfeinstein 3D游戏,当然,我们选择了所有时间的最好的游戏AKA我的世界的主题,我们必须这样做与垃圾层图形库(这是一个像openGL的东西,但100倍更糟)。因为我们年轻又愚蠢,我们想从这个主题中获得比预期更多的结果。项目,图形用户界面,块,操作栏,制作...我们正在工作的项目,因为2个月,但我们已经完成了“正常的”,并希望在2个星期的主题部分,我们很享受很多。

**上下文:**我们项目是这样构建的:一个拥有所有东西的核心结构

typedef struct s_core
{
    mlx_t           *mlx; //its like core of the graph libs
    t_player        player; //all the player infos (move speed, position, health..)
    t_imgs          imgs; //all our images
    t_sounds        sounds; //all our sounds
    t_item          items[7]; //all our items
    t_animation     animations[7]; //all our anims
    t_block         blocks[2]; //all our blocks
    t_map           *maps; //all informations about maps (the char **maps, height, weidth..)
    int             screen_size[2];
}   t_core;

字符串
并且我们尽可能尊重封装的原则。

问题:

什么是块?一个块是一个有名字的想法,与一个形象画在一个世界,但也是一个项目,因为你可以有它在你的手,建立与他的想法,工艺..一个街区有一首特别的歌,也许还有一个动画,因为这个街区可以被动画化(例如一个幽冥之门...)
因此,为了创建一个块,我必须设置一个项目,所以我必须访问core->items[the_wanted](知道项目是在块之前创建的),但我必须获得声音,所以我必须访问core->sounds[the_wanted],但我也需要一个图像和越来越多。
这是同样的问题,很多思考,声音,项目,块,Map,球员,动画,图像。它们都是相互依存的,我不知道如何不这样做。
因此,我们发现自己要么将整个内核作为参数发送,要么将内核的4个以上元素发送给一个函数,以执行必要的操作。

辩论:

我认为我们必须删除核心结构,并通过使它们全局化来允许访问其中的所有思想,我的队友认为我们必须在每个思想中创建一个指向核心的指针,例如

typedef struct s_item
{
    {...variables}
    t_core *core;
}   t_item;

问题:

  • 什么是C语言中的封装,封装的概念是否存在,它在C语言中是否相关,因为没有POO?
  • 从理论上讲,如何管理这样一个项目?
  • 在我们的情况下,我们应该怎么做呢?
  • 我们是否已经达到了C可能性的某个极限?
  • 任何其他人给我们的建议,我们都想成为优雅的程序员。

我们试图变得优雅和擅长编码,但我们做不到

yptwkmov

yptwkmov1#

Encapsulation与其说是一种编程语言特性,不如说是一种软件工程技术。它存在于非面向对象的编程语言中(例如CLIPSrules,Caml,Lisp,Scheme,C,RefPerSys
在大多数当今(2023年)的冯·诺依曼计算机和操作系统(Linux或Windows,x86-64或RISC-V或ARM)中,每个指针(实际上)都具有相同的大小(32位或64位的“字”)。
那么C语言对指针的强制转换就只是告诉计算机如何处理这样一个词的问题。

相关问题