C语言小项目Conway‘s_Game_of_Life

 这是我C语言的一个小项目,如有Bug请指出。

用C语言来实现Conway‘s_Game_of_Life

规则:

细胞有存活或死亡两种状态,与自身周围的八个细胞互动

细胞周围的存活细胞 == 2个时,该细胞保持原状态;

细胞周围的存活细胞 == 3个时,该细胞变成存活状态;

其他情况细胞死亡。

本项目采用动态内存开辟来存储数据,而不是直接在栈区创建二维数组,这样有以下优点:

1、动态内存开辟在堆区开辟空间,堆区空间>栈区空间(次要因素)

2、为了正确计算细胞周围存活细胞的数目,在判断完第一个细胞的死活后,不能立刻修改,而是要存储在另一块空间内,在全部计算完成后才可修改原来位置的数值。

如果在栈区开辟空间,除了一开始就有的cells[]数组,还需要再创建一个temporary[]数组,将计算好的数据存进去,判断完所有细胞的死活后再将数据拷贝回cells[]数组;

 

如果在堆区开辟空间,一开始开辟cells[]数组同时,创建一个cellsCopy[]数组,将计算好的数据存进cellsCopy[]数组,判断完所有细胞的死活后只需交换指向cellsCopy[]数组和cells[]数组的指针即可

边界:

由于最边上的元素没有被环绕,不能采用与中间元素相同的访问方式,否则会越界访问导致程序崩溃。所以需要特殊处理,

方法1.不修改最边上的元素,如创建6*6的数组,实际会发生变化的只有4*4大小

方法2.使用滚动数组

这里采用方法1,因为实现简单,我采用calloc()来开辟空间,所以最边上的所有元素恒定为死亡状态,当然也可以初始化为全部存活,或随机,只需调整 InitailizeCells()函数即可。

注意"不修改最边上的元素"是指Growing()不访问最边上的元素,InitailizeCells()可以访问可以不访问;这里InitailizeCells()使用随机函数,也可改成手动输入坐标。

本工程包含三个文件,一个头文件Conway's_Game_of_Life.h,两个源文件Conway's_Game_of_Life.c和test.c

<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值