2022 Hackathon: 康威生命游戏 示例程序与使用说明

<<<< 返回赛题

使用说明

获取程序

在本地新建python文件gameofLife.py,在IDE(VScode或pyCharm等)中打开此文件。前往“代码本体”一节获取程序源代码,并复制到该文件中。

安装依赖

在命令提示符中输入下列指令(不包括$):

1
$ pip install numpy

回车运行即可。

程序的使用方法

在命令行中使用cd指令切换到gameofLife.py所在目录,然后输入python gameofLife.pypython3 gameofLife.py即可运行程序。(命令行界面要求是等宽字体才能正常显示程序界面)

添加命令行参数-h可以看到程序的使用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ python3 gameofLife.py -h
usage: gameoflife [-h] [-s W H] [-t T] [-e] [-f F] [-p P] [-w] [FILE]

Simple implementation of Conway's Game of Life in python, CLI version. Written by Furffico for SUMSC Hackathon 2022.

positional arguments:
FILE Input initial state [default: random]

options:
-h, --help show this help message and exit
-s W H, --shape W H Shape of the world. [default: fill the terminal]
-t T, --iteration T Maximum count of iterations (set to 0 for infinity). [default: 0]
-e, --autoexit Terminate the simulation when certain conditions are met (e.g. no live cells, repeated states). [default: False]
-f F, --fps F Set the framerate (frames per second). [default: 10]
-p P, --position P Select where to put the loaded world. The first letter indicates horizontal position (l, c, r); the second letter indicates vertical position (t, c, b). [default: cc, choices: lt, ct, rt, lc, cc, rc, lb, cb, rb]
-w, --waitinit Pause the program after the initial state is drawn. [default: False]

This program is distributed under GNU GENERAL PUBLIC LICENSE version 3, for full text please refer to https://www.gnu.org/licenses/gpl-3.0.html

下面将对各个参数进行详细讲解:

  • FILE 位置参数为输入的文件,用来指定程序的初始状态,当没有输入文件时程序将随机初始化。关于输入文件的格式请见“文件格式说明”
  • -h 参数用于打印上述帮助。
  • -s 参数接受两个整数参数,分别为宽与高,用来设定地图的大小,默认为填满整个命令行界面。
  • -t 参数用于指定程序模拟的运行轮数,设为0时程序将永久运行(默认为0)。在程序运行时可以通过Ctrl-C组合键终止程序的运行。
  • -e 用于设定当程序检测到循环的状态或者地图内没有活细胞时结束运行。
  • -f 用于设定程序运行的帧率,默认为每秒10帧。(当帧率过高时可能会导致程序界面出现闪烁现象。)
  • -p 参数用于设定加载输入的初始状态在地图中的位置,当没有输入文件时该选项无效果。这个参数由两个字符构成,第一个字符指定水平位置,可选的有lcr,分别对应左、中、右;第二个字符指定垂直位置,包括tcb,分别对应上、中、下。参数一共有九种组合(ltcbrc等),默认值为cc,即将输入的状态加载到地图中间。
  • 加入 -w 可以让程序在展示初始状态后等待你按下回车键再继续运行。

上述参数结合使用的一些示例如下:(示例在linux系统中运行)

  1. 加载p32-glider-gun.txt到地图左上角(lt),每秒10帧,等待Enter后开始运行。默认为永久运行,示例中使用Ctrl-C在第15秒终止了程序。
1
$ python3 ./gameofLife.py ./p32-glider-gun.txt -f 10 -p lt -w

  1. 最多运行200轮,自动退出,设定地图大小为30x20,以每秒10帧的帧率运行(随机初始化):
1
$ python3 ./gameofLife.py -t 200 -e -s 30 20 -f 10

文件格式说明

输入文件为纯文本文件,格式为用于存储康威生命游戏状态的plaintext格式(详见 https://conwaylife.com/wiki/Plaintext )。在文件中使用英文句号/小数点.表示死细胞,使用大写的英文字母O表示活细胞,每行的长度不定。此外以半角感叹号!开头的行会被忽略,可以在里面写注释。

下面是一个示例文件(也就是上面一节中示例1的输入文件,来源):

1
2
3
4
5
6
7
8
9
10
11
12
13
!Name: Gosper glider gun
!Author: Bill Gosper
!The first known gun and the first known finite pattern with unbounded growth.
!www.conwaylife.com/wiki/index.php?title=Gosper_glider_gun
........................O...........
......................O.O
............OO......OO............OO
...........O...O....OO............OO
OO........O.....O...OO
OO........O...O.OO....O.O
..........O.....O.......O
...........O...O
............OO

代码本体

你可以从下面展示的源代码中直接复制,如果没加载出来请前往Github Gist复制,或是从这里直接获取文件:下载地址可能不是最新的