0
点赞
收藏
分享

微信扫一扫

初学C语言一些知识点的整理

zibianqu 2022-04-27 阅读 64
c语言

今天跟着老师完成了扫雷,是C语言学习以来第三个小游戏了。整个代码也算是把学过的知识进行了综合吧。这里也只是记录一下自己出现的问题。

1. 首先是关于三个分项目的创建

tset.c : 用于游戏逻辑的调试

game.c : 用于游戏函数的实现

game.h:用于头文件的包含,符号的定义,函数的声明

这一步的目的主要是让代码更加清晰有逻辑性,方便,更重要的是让代码具有可移植性。

#define EASY 10 // 简单模式10个雷

个游比如这一步是关于游戏雷的个数的定义,它在整戏代码中多次使用,而需要改变时,只需要在我的game.h文件中更改就可以,其他地方会随之改变。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

这里是代码所用到的几个头文件,而只需要在game.h中包含这几个头文件,在另外两个文件(game.c,test.c)中包含game.h即可

#include"game.h" --- 这里包含自己创建的头文件时用的是双引号

2   // 统计周围有几个雷

static int get_mine(char mine[ROWS][COLS], int x, int y)

这里有一个关于选定一个坐标后,统计以该坐标为中心,周围有几个雷的函数,这里复习一下 static的相关知识点。

static修饰 全局变量,局部变量和函数。

static修饰局部变量,局部变量的生命周期变长,不销毁
static修饰全局变量,改变全局变量的作用域,使其只能在当前源文件使用

static修饰函数时,使其只能在当前文件下使用

 

 这里get_mine函数只是作为Findmain中的一步,所以并没有放在game.h文件中定义

3  关于随机数生成的知识点一个小方法

随机数生成需要用到rand()函数,但他生成的随机数范围是0-32767,

这里我需要生成的0-9的随机数(因为要在9*9的棋盘中布置雷),用生成的随机数对9(row)取模,得到的一定是0-8的数字,再加一

也就是说,当我需要生成一个0-9的随机数时,我可以讲rand对10取模。

随机数需要用到一下两个头文件

#include<stdlib.h>
#include<time.h>

srand((unsigned int)time(NULL))  这个语句的意思是,将time函数作为返回值给到srand,NULL是空指针的意思。 

(unsigned int)表示将值强制转换为int类型,因为time本身是一个longlong类型,这一步可以避免出现警告。

   

4  一个函数初始化两个数组

这里我需要将一个数组全部初始化为0,而另一个全部初始化为 *

 // 初始化数组,棋盘
    Initboard(mine, ROWS, COLS, '0');
    Initboard(show, ROWS, COLS, '*');

void Initboard(char board[ROWS][COLS], int row, int col, char set)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
            board[i][j] = set;
    }
}

可以将我需要初始化的值作为一个参数传给函数,然后再将其一一赋值给元素。

当mine数组进入这个函数时, ‘0’也随着传给了函数形参set, 而后循环时,mine数组的每一项都等于set

同样,当show数组进入函数时, * 传给了函数形参set。

举报

相关推荐

0 条评论