C语言版生命游戏

本文介绍了一种使用C语言模拟康威的生命游戏的方法。通过定义细胞的状态及其与周围细胞的互动规则,实现了游戏的迭代更新过程,并展示了如何通过简单的字符绘图在控制台中展示生命游戏的演化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**********************************************************************************************
** C语言模拟生命游戏(原细胞自动机)
**
** 每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。
** 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
** 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。
** 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
** 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)
**
************************************************************************************************/


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

#define SIZE	16							//地图数组的长度
#define Death	printf("%c%c",0xA1,0xF5)	//死亡方块
#define Live	printf("%c%c",0xA1,0xF6)	//存活方块

boolean map_b[SIZE+2][SIZE+2] = {0};
void display(const int map[SIZE + 2][SIZE + 2]);
void transform(const int map[SIZE + 2][SIZE + 2]);


int main(int argc, char** argv) {

	int map[SIZE + 2][SIZE + 2] = { 0 };
	int *map_p = map;
	int count = 0;
	map[4][4] = map[4][5] = map[4][6] = map[3][6] = map[2][5] = 1;

	while (1)
	{
		printf("            第%d代\n", count++);
		display(map_p);
		Sleep(200);		//休眠 
		transform(map_p);	//为什么这里不能填数组,而是填数组名
		system("cls");		//清屏 
	}
	system("pause");		//暂停
	return 0;
}


/*改变状态*/
void transform(int map[SIZE + 2][SIZE + 2])
{
	int w, h, sum;
	sum = 0;
	int map_t[SIZE + 2][SIZE + 2] = {0};

	for (w = 1; w <= SIZE; w++)
		for (h = 1; h <= SIZE; h++)
			map_t[w][h] = map[w][h];

	for (w = 1; w <= SIZE; w++){

		for (h = 1; h <= SIZE; h++){

			sum = map_t[w - 1][h - 1] + map_t[w - 1][h] + map_t[w - 1][h + 1]
				+ map_t[w][h - 1] + map_t[w][h + 1]
				+ map_t[w + 1][h - 1] + map_t[w + 1][h] + map_t[w + 1][h + 1];

			switch (sum)
			{
			case 2:
				break;
			case 3:
				if (map_t[w][h] == 0)
					map[w][h] = 1;
				break;
			default:
				map[w][h] = 0;
				break;

			}
		}
	}
}


/*显示*/
void display(const int map[SIZE + 2][SIZE + 2]){

	int w, h;
	
	for (w = 1; w <= SIZE; w++){
		for (h = 1; h <= SIZE; h++){
			if (map[w][h] == 1)
				Live;
			else
				Death;
		}
		printf("\n");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值