我参加了一个名为“过程编程”的大学课程,在那里我需要用C语言实现/编写纸牌游戏。
这是我的第一个中型项目(至少比我以前写的(非常简单的程序)要中等),因此我对如何使代码更简单,更易于阅读/理解有疑问。
我应该将所有内容都写在同一个.c文件中吗?但是我认为,如果所有代码都都写在这个唯一的.c文件中,则很难“遍历”所有代码,所以我想到了下一个。
仅使用我的主.c文件来调用其他函数,这些函数将在头文件中声明/存储。例如:
//main .c file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include "display.h"
void main()
{
/*this is just something I'm going to use to make the
main menu a litte more stylistic*/
gotoxy(60, 10);
asteriscos(50);
}
//Header "display.h".
void gotoxy(int x, int y)
{
printf("%c[%d;%df", 0x1B, y, x);
}
void asteriscos(int numero_de_asteriscos)
{
int i;
for (i = 0; i < numero_de_asteriscos; i++)
{
Sleep(40);
printf("*");
}
}
重点只是在主.c文件上创建游戏的主菜单,但是对于每个选项(1.玩游戏; 2。游戏说明; 3。从保存的游戏开始; 4 (退出)),它将调用在头文件中声明的函数。并且在该函数内部将调用所有存储在.h文件中的更多功能,例如:如果用户按下1(玩游戏),它将调用一个函数,该函数将询问在.h中声明和定义的玩家人数。 h文件。然后,在同一功能内,在用户介绍了玩家人数之后,该功能将被称为另一个功能,该功能将创建套牌并为每位玩家提供7张牌,并且该功能也将在同一.h内声明和定义。文件。这意味着,在主菜单之后,所有操作都将在.h文件中完成。
因此,最后我的主要.c文件看起来像这样(此处仅作为示例显示):
//main .c file
void main()
{
int option;
printf("\n1 - Play the Game");
printf("\n2 - Descripiton of the Game");
printf("\n3 - Start from a saved Game");
printf("\n4 - Exit.")
scanf("%d", &option);
switch (option)
{
case 1 :
{
some1_function_stored_header();
break;
}
case 2:
{
some2_function_stored_header();
break;
}
case 3:
{
some3_function_stored_header();
break;
}
case 4:
{
some3_function_stored_header();
break;
}
}
}
不同选项的所有工作都将在.h文件中完成。我将拥有一个更干净,更短的主.c文件,并且对于我而言,查找代码的特定部分会更加容易,因为它们全部都分为几部分(.h文件)。但是后来我读到这不是一个好习惯,因为我们应该只将函数原型存储在.h文件中,而将定义存储在一个源文件中。
那么最佳实践是什么?要将函数原型仅存储在.h文件中,并在我的主.c文件中声明所有函数?但是由于我需要构建此游戏的许多功能,因此我会得到非常大的(。行).c文件。如何使代码易于阅读/理解?
亲切问候
答案 0 :(得分:1)
我应该将所有内容都写在同一个.c文件中吗?但是我认为,如果所有代码都都写在这个唯一的.c文件中,则很难“遍历”所有代码,所以我想到了下一个。
这是一个见解。。有些人在包含数十万个源代码的单个C文件中拥有程序。其他人更喜欢将这样的程序分成几十个较小的文件,每个文件的长度小于一千行。
当然,编译时间取决于源文件的大小。 (FWIW,分布式sqlite有一个巨大的C文件,是其他几个文件的集合)。
但是,一般建议是将每个功能保持合理的大小。有人建议具有几十行的简短功能。在某些情况下(当函数按顺序执行简单的操作时),其他人可以接受几百行的函数。
您正在学习C。我个人的建议是将程序拆分为每个数百行(或一千行)的源文件,并且功能不超过50或60行 (通常较小)。当然,您需要选择并学习如何使用C编译器(如果使用GCC,请务必阅读其Invoking GCC章节)。您需要编写header file 声明所有全局类型,函数和变量。您将需要学习如何使用build automation或make之类的ninja工具。
看看当前的做法。 研究一些用C编写的小型free software的源代码(一个小的程序的行数小于十万行总共源代码)。在github,gitlab或Linux发行版中,您会发现很多它们。
您可能想在游戏中使用一些现有的library(例如ncurses或GTK或libSDL)。而且您会发现,在Linux上比在Windows上编写C程序更容易。