基于Python实现的简单生命游戏

基于Python实现的简单生命游戏 一,引言 1,1 开发背景 康威生命游戏,又称康威生命棋,是英国数学家约翰•何顿•康威在1970年发明的细胞自动机

本文包含相关资料包-----> 点击直达获取<-------

基于Python实现的简单生命游戏

一、引言

1.1 开发背景

康威生命游戏,又称康威生命棋,是英国数学家约翰•何顿•康威在1970年发明的细胞自动机。 它最初于1970年10月在《科学美国人》杂志上马丁•葛登能的“数学游戏”专栏出现。在游戏的进行中,杂乱无序的细胞会逐渐演化出各种精致、有形的结构;这些结构往往有很好的对称性,而且每一代都在变化形状。一些形状已经锁定,不会逐代变化。有时,一些已经成形的结构会因为一些无序细胞的“入侵”而被破坏。但是形状和秩序经常能从杂乱中产生出来。对于生成的形状和秩序我们称作 pattern。或者在这里,我们也把它称作 creature。“生命游戏”并不是通常意义上的游戏,它没有游戏玩家之间的竞争,也谈不上输赢,甚至可以说游戏的一开始就注定了结果。

1.2 开发目的和意义

本游戏是小组共同开发的课程设计项目,实现了基础的康威生命游戏规则,能够模拟生命繁殖演化的基本过程,实现了必要的图形界面。

开发生命游戏,让“仿真生物”生存于计算机上,在计算机上生存、死亡,从而模拟生命的演化,通过计算机的模拟,了解生命在一定规则下,开始条件对最终结果的影响,突发事件对最终结果的影响。

二、需求分析

2.1 设计内容和要求

制作用户图形界面,使得游戏在运行时,用户能在图形界面上进行操作和直观的看到演化过程与结果。

按钮,开始、暂停、重置,用来控制繁衍进程。

用户界面的要求:一个N*N的二维格子界面和对应开始、暂停、重置的按钮,每一个格子代表一个生命,亮为生、暗为死,每一次格子的生与死都显示在屏幕上。

一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。用代码实现生命游戏中的规则,通过算法控制,计算格子在每一刻的生死状态。

使用鼠标添加或删去细胞。

添加游戏说明,方便用户使用。

2.2 技术上的可行性分析

2.2.1 游戏功能

在一个二维矩形世界中,每个方格里居住着一个活着的或死了的细胞,每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。

一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量,模拟生命繁衍。

可以通过按钮控制繁衍进程,使用鼠标添加或删去细胞。

2.2.2 游戏规则

  • 人口过少:当周围低于2个(不包含2个)存活细胞时, 本单元活细胞死亡

  • 稳定:当周围有2个或3个存活细胞时, 本单元细胞保持原样

  • 人口过剩:当周围有3个以上的存活细胞时,本单元活细胞死亡

  • 繁殖:当周围有3个存活细胞时,本单元细胞存活/活化

2.2.3 游戏界面

  • 背景世界地图为黑色,画有灰白的网格线,作为各细胞间的分界

  • 单个活细胞为矩形,红色,死亡细胞为黑色,构成背景

  • 地图右侧放置按钮,开始、暂停、重置,用来控制繁衍进程

  • 添加游戏说明,方便用户使用

经查阅资料并进行分析,利用python及其标准化的库,可以实现我们的设计要求

2.3 开发环境与工具使用

  • 操作系统:Windows

  • 开发工具:PyCharm Community Editon 2016.1.3、Java Pydev

  • 开发语言:Python

  • 编码方式:UTF-8

  • 团队管理工具:leangoo

  • 版本控制工具:Git

  • 自动单元测试框架:pyunit

  • 性能分析:profile

  • 代码检查:pylint

三、总体设计

3.1 总体结构

3.2 各功能模块描述

  • Button :定义按钮的图像以及具体的位置

  • Cell:定义细胞类,包括细胞的大小和颜色,获取细胞位置在画布上绘制细胞

  • Data:画布,以及程序相关的具体的数据

  • Draw:将画布擦除后,画上按钮,格子以及具体的网格线,然后遍历网格数组中的细胞状态

  • next_generation:定义细胞更新的规则:当一个细胞周围有两个或三个细胞时细胞状态为存活,当周围细胞过多或者过少时定义为细胞死亡

  • States:将整个游戏世界设定为二维数组,每个网格的状态值分为0,1两种,定义按钮功能,含开始运行、暂停、重置三个方法

  • 开始运行:获取当前鼠标的状态和位置随时更新画布,并且根据细胞规则随时更新细胞
  • 暂停:根据鼠标状态随时更新画布
  • 重置:初始化整个画布,数组用0填充

  • main:程序的开始入口,设置界面的大小,定义状态机的三种状态:运行状态,暂停状态,以及重置,然后进入游戏的主循环

3.3 主要模块设计

状态机三种状态的设置:开始,暂停,以及重置,主要在States模块中实现:

  • States:将整个游戏世界设定为二维数组,每个网格的状态值分为0,1两种,定义按钮功能,含开始运行、暂停、重置三个方法

  • 开始运行:获取当前鼠标的状态和位置随时更新画布,并且根据细胞规则随时更新细胞

  • 暂停:根据鼠标状态随时更新画布

  • 重置:初始化整个画布,数组用0填充

3.4 核心代码设计

next_generation:细胞规则的制定是核心代码的一部分,具体设计。遍历二维数组,更新接下来各个细胞的状态:

python def next_generation(): nbrs_count = sum(np.roll(np.roll(pygame.world, i, 0), j, 1) for i in (-1, 0, 1) for j in (-1, 0, 1) if (i != 0 or j != 0)) pygame.world = (nbrs_count == 3) | ((pygame.world == 1) & (nbrs_count == 2)).astype('int')

四、测试分析

4.1 游戏开始测试

测试点击开始按钮游戏界面立即作出响应,并且可以按照细胞规则进行正确的更新。

4.2 游戏重置测试

点击重置按钮,程序立即作出响应,并且画布被擦除。

4.3 使用工具进行分析测试

  • 自动单元测试框架:pyunit

  • 性能分析:profile

  • 代码检查:pylint

分析测试细节详情请见对应的工具使用文档。

五、具体的使用说明

  • 打开程序,出现游戏界面

  • 在界面上选择点击相应格子,左键添加细胞,右键擦除细胞

  • 点击开始,程序自动运行,最终在界面上显示结果,或为一有各个格子组成的特殊图形,或一直杂乱的进行演化

  • 也可在任意时刻点击暂停按钮,查看到这一时刻生命游戏在一定规则下生成的结果

  • 玩家可以随时在画布上添加或者擦除细胞

  • 点击重置按钮可以清空画布,重新来过

运行截图演示:

参考文献

  • 基于Android平台的手机游戏的设计与开发(云南大学·秦成)
  • 3D云游戏平台的设计与实现(北京交通大学·闫璐)
  • 基于cocos2d-x跨平台引擎的趣味篮球游戏设计与开发(西安电子科技大学·魏博)
  • 基于Actor模型的广域分布式爬虫的设计与实现(北京邮电大学·陈凌鹏)
  • 网络游戏虚拟物品交易系统设计与实现(吉林大学·李云峰)
  • 面向问题解决能力培养的编程类虚拟现实教育游戏设计研究(东北师范大学·王寒)
  • 基于C/S架构的昆虫识别系统(吉林大学·李瑞升)
  • 基于SSH框架的电子宠物系统设计与实现(吉林大学·王丽丽)
  • 面向人物简介的主题爬虫设计与实现(吉林大学·蒋超)
  • 基于电子游戏改造策略的教育游戏设计开发研究——以初中英语为例(南宁师范大学·李镇慧)
  • 某公益管理平台的设计与实现(江西财经大学·刘迅)
  • 基于cocos2d-x跨平台引擎的趣味篮球游戏设计与开发(西安电子科技大学·魏博)
  • 面向高职信息技术教育的严肃游戏设计与实施(大连理工大学·王晓姝)
  • 探究式教学游戏的设计与开发(吉林大学·张培)
  • 基于Flex的网页游戏的研究与设计(北京化工大学·刘璐)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码工厂 ,原文地址:https://m.bishedaima.com/yuanma/35269.html

相关推荐

  • 基于SpringBoot的酒店管理系统

    Java组件课程设计-基于SpringBoot的酒店管理系统 1,项目简介 1,1系统角色 系统角色分为:经理(管理员)和员工(普通用户)两种用户
    2024年05月14日
    2 1 1
  • 基于SpringBoot框架的新闻推荐系统

    这是一项利用🔥🔥SpringBoot框架构建的新闻推荐系统工程,采用Java编程语言,结合SpringBoot和Vue,js技术栈进行开发,开发工具为Idea或Eclipse
    2024年05月23日
    2 1 2
  • SSM项目整合

    SSM 整合系列之 SSM 项目整合 Spring,SpringMVC 和 MyBatis 已经是非常成熟的框架了,使用该框架开发已有些时日了,从今天开始呢就对用此框架开发的过程进行一系列的总结
    2024年05月14日
    4 1 1
  • 基于SpringBoot框架的交友网站

    这是一份采用🔥🔥SpringBoot为核心的社交网站开发源码🔥🔥,主要编程语言为Java,并结合了SpringBoot和Vue技术栈,开发工具包括Idea或Eclipse
    2024年05月23日
    2 1 1
  • Java+JavaWeb在线考试系统

    在当今信息化时代,网络教育日益普及,而在线考试系统作为教育信息化的重要组成部分,受到了广泛关注,Java+JavaWeb在线考试系统以其高效,便捷的特点,成为解决传统考试模式中诸多不便之处的有效途径
    2024年05月07日
    4 1 1
  • python实验作业集

    问题集合 1,使用 for 循环,输入倒数秒数,进行倒数计时! 代码如下: ```python import time 使用input()语句接收用户输入的倒计时数值 countdown = int(input("请输入倒数秒数 :")) print("\n倒数计时开始") for i in range(countdown): print("倒数 {} 秒"
    2024年05月14日
    2 1 1
  • 基于SSM实现的客户管理系统

    1 概述 一个简单的客户关系管理系统,管理客户的基本数据,客户的分配,客户的流失以及客户的状态, 2 技术 SSM + Jdk1,8 + MySql5
    2024年05月14日
    3 1 2
  • 论坛网站

    这是一个🔥🔥基于SpringBoot框架的论坛网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    3 1 1
  • Python爬虫实战之爬取拉勾网职位

    Python爬虫实战之爬取拉勾网职位 1,爬取拉钩招聘动态网页 网址 :https://www,lagou,com/zhaopin/ 通过 分析 网页结构
    2024年05月14日
    2 1 1
  • 仿写 Spring 的一个乞丐版 IOC/AOP 框架

    仿写 Spring 的一个乞丐版 IOC/AOP 框架 讲道理,感觉自己有点菜,Spring 源码看不懂,不想强行解释,等多积累些项目经验之后再看吧,但是 Spring 中的控制反转(IoC)和面向切面编程(AOP)思想很重要
    2024年05月14日
    7 1 3

发表回复

登录后才能评论