首页 > 编程语言 >C#实验 综合实例:生命游戏 game of life

C#实验 综合实例:生命游戏 game of life

时间:2024-06-11 11:02:39浏览次数:29  
标签:状态 life 下一代 C# 细胞 存活 game 数组

C#实验 综合实例:生命游戏 game of life

《面向对象实验》

嗨,我是射手座的程序媛,期待与大家更多的学习与交流,欢迎添加3512724768

一、实验目的
1.熟练掌握C#开发,编写WinForm应用程序。
2.全面加深面向对象编程的概念,如类、对象、实例化等。
3.学会使用C#图形图像编程。

二、实验要求
1.加深C#图形图像编程理解。
2.深度掌握C#面向对象的编程思想。
3. 编写完整程序完成下面的实验内容并上机运行。
4. 整理并上交实验报告。

三、实验环境
Visual Studio 2015版本及以上

四、实验内容:
5.完成生命游戏(面向对象的终极挑战)。(30分)
游戏开始时,每个细胞随机地设定为“生”或“死”之一的某个状态。
用黑色方格表示该细胞为“生”,空格(白色)表示该细胞为“死”。或者说方格网中黑色部分表示某个时候某种“生命”的分布图,见下图。然后,根据某种规则,计算出下一代每个细胞的状态,画出下一代细胞的生死分布图。
在这里插入图片描述

在生命游戏中,规定了如下生存定律。
(1)当前细胞为死亡状态时,当周围有3个存活细胞时,则迭代后该细胞变成存活状态;若原先为生,则保持不变。
(2)当前细胞为存活状态时,当周围的邻居细胞低于两个(不包含两个)存活时,该细胞变成死亡状态。
(3)当前细胞为存活状态时,当周围有两个或3个存活细胞时,该细胞保持原样。
(4)当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。
可以把最初的细胞结构定义为种子,当所有种子细胞按以上规则处理后,可以得到第1代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。

功能展示

首先,开启编辑模式,清空后,设置初始细胞“1 2 3”共27个细胞,根据规则,进行多次迭代,分别选取了第1、5、10、30、60代的演化细胞图。
在这里插入图片描述
初始细胞
在这里插入图片描述
第1代
在这里插入图片描述
第5代
在这里插入图片描述
第10代
在这里插入图片描述
第30代
在这里插入图片描述
第60代

实验分析

首先,我们可以创建一个Cell类来表示每个细胞。这个类可以包含一个属性来表示细胞的生死状态(使用bool类型,true表示存活,false表示死亡),以及一些方法来更新细胞状态。接下来,我们设计一个GameOfLife类来管理整个生命游戏。这个类包括一个二维数组来表示细胞状态,并实现以下功能:
随机初始化细胞状态:通过随机数生成0和1来表示细胞的生死状态,用这些随机数填充二维数组,即可实现随机初始化细胞状态。
计算下一代细胞状态:遍历二维数组中的每个细胞,根据规则来判断其下一代的状态,并更新到一个临时数组中。完成遍历后,再将临时数组中的状态复制回原数组,即可实现计算下一代细胞状态。
最后,我们可以通过WinForm应用程序来可视化展示细胞的生死分布图。可以使用PictureBox控件来表示每个细胞,并根据其状态来设置背景颜色(黑色表示存活,白色表示死亡)。可以添加开始、停止、重置等按钮来控制游戏的运行,以及调整细胞的初始种子状态。
在实现过程中,需要合理地组织类和方法,使代码结构清晰易于理解和修改。同时,在计算下一代细胞状态时,需要注意边界情况和数组越界的处理,以确保程序的稳健性和准确性。

主要内容

完整代码
在这里插入图片描述

标签:状态,life,下一代,C#,细胞,存活,game,数组
From: https://blog.csdn.net/qq_43761715/article/details/139576241

相关文章

  • 在Linux中,如何进行调度任务?什么是 crontab 并解释 crontab 中的字段?
    在Linux中,调度任务通常指的是在预定的时间自动执行脚本或命令。cron(cronjob)是一种常用的任务调度工具,它按照设定的时间表周期性地执行任务。1.什么是crontab?crontab是一个配置文件,它包含了一个或多个cron任务的列表。每个任务都有一个特定的时间表,定义了任务何时执行。cro......
  • C++进阶教程
    一、引言C++是一种高效、强大且灵活的编程语言,广泛应用于系统软件开发、游戏开发、科学计算等领域。对于已经掌握C++基础知识的开发者来说,进阶学习C++将帮助他们更深入地理解这门语言,并提升编程能力。本教程将介绍C++中的一些高级特性和技术,包括面向对象编程、模板编程、ST......
  • Spring IoC容器
    通过前面装配电脑的例子中,我们知道了在Spring中,实现控制反转的是IoC容器,其实现方法是依赖注入。Spring会提供IoC容器来管理对应的资源(容纳我们所开发的各种Bean,并且我们可以从中获取各种发布在SpringIoC容器里的Bean)。这样的好处在于降低了对象之间的耦合,在一个系统中有些类,......
  • Macbook M芯片Homebrew与git的安装与配置
    MacbookM芯片Homebrew与git的安装与配置Homebrew的安装与配置搜索Homebrew;找到如下网址https://brew.sh/把以上命令复制到终端执行后,发现并不能下载;如果你像我一样也是不通的,可以使用国内源,将如下命令复制到终端:/bin/zsh-c"$(curl-fsSLhttps://gitee.com/cunkai/H......
  • CSS中背景断裂和精灵图的关系,以及4种解决方式
    背景断裂是指在使用背景图片时,由于背景图片的尺寸不足以覆盖整个元素区域,导致背景在某个方向上出现中断、不连续的现象。这种情况通常在自适应布局或宽屏、高分辨率设备上更容易出现,因为元素的尺寸可能会随着视口大小变化而变化。当使用精灵图作为背景时,背景断裂问题可能会......
  • 【Spring Cloud】配置中心详细介绍及使用
    目录1.SpringCloudConfig简介功能特点:2.配置中心的架构3.配置中心的实现步骤3.1搭建ConfigServer3.2搭建ConfigClient4.测试和运行5.实现配置刷新6.结论 SpringCloud配置中心(SpringCloudConfig)是用于管理分布式系统中的外部配置的解决方案。......
  • 【esp32 项目】使用I2C
    原理图:图I2C接口的RTC芯片图单片机I2C部分引脚图 软件启动I2C启动Wire库并作为主机或者从机加入总线,这个函数调用一次即可,参数为7位从机地址,不带参数就以主机的形式加入总线。Wire.begin();Wire.begin(address);主设备从从设备请求字节由主设备向从设备请求字节,之......
  • linux内存管理(二)- vmalloc
    个人笔记,谨慎观看.先看看vmalloc是怎么实现的。它能在非连续物理内存之上建立连续的虚拟内存映射。这里有一篇博客Linux内存管理(6)vmalloc-ArnoldLu-博客园(cnblogs.com)调用链vmalloc->_vmalloc_node->_vmalloc_node_rangevoid*__vmalloc_node(unsignedlongsize,......
  • OpenWrt安装配置Tailscale
    什么是tailscale?Tailscale就是基于Wireguard的一个联网工具,无需公网地址,通过去中心化,实现各个节点之间点对点的连接.配置简单友好,支持的各类平台和客户端.相比较其他组网工具的优势是什么?对比zerotier和wireguard,wireguard更容易连上官方的中转服务器,webui界面更简单,适合......
  • css3一直旋转 暂停后还保持角度
    要使CSS3动画一直旋转,并在暂停时保持最后的角度,您可以使用animation-play-state:paused;属性来暂停动画,并使用animation-fill-mode:forwards;来保留最后的状态。@keyframesrotate{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}......