gpt4 book ai didi

python实现生命游戏的示例代码(Game of Life)

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现生命游戏的示例代码(Game of Life)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

生命游戏的算法就不多解释了,百度一下介绍随处可见.

因为网上大多数版本都是基于pygame,matlab等外部库实现的,二维数组大多是用numpy,使用起来学习成本比较高,所以闲暇之余写一个不用外部依赖库,console输出的版本.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# -*- coding: utf-8 -*-
from time import sleep
from copy import deepcopy
 
WORLD_HIGH = 20 #世界长度
WORLD_WIDE = 40 #世界宽度
ALIVE_CON = 3 #复活条件
KEEP_CON = 2 #保有条件
 
class Cell( object ):
   '''''细胞对象'''
   def __init__( self , pos):
     '''''自身坐标x,y, 已经是否还存活'''
     self .point, self .is_alive = pos, False
     self .x, self .y = self .point
   
   def setAlive( self ):
     self .is_alive = True
     
   def setDied( self ):
     self .is_alive = False
     
   def display( self ):
     if self .is_alive:
       return '*'
     return ' '
     
   def displayLinux( self ):
     '''''在linux环境下可以打印黑白块'''
     if self .is_alive:
       return '\033[0;37;47m \033[0m'
     return '\033[0;30;40m \033[0m'
     
class GameManager( object ):
   def __init__( self ):
     self .world = self .initWorld()
     self .initAliveCell()
    
   def initWorld( self ):
     world = []
     for pos_x in xrange (WORLD_WIDE):
       column = []
       for pos_y in xrange (WORLD_HIGH):
         column.append(Cell((pos_x, pos_y)))
       world.append(column)
     return world
   
   def initAliveCell( self ):
     from random import choice
     for high in self .world:
       for cell in high:
         if choice(( 0 , 1 )) = = 0 :
           continue
         cell.setAlive()
   
   def getNeighbours( self , cell_obj):
     alive_count = 0
     for x_of in xrange ( - 1 , 2 ):
       for y_of in xrange ( - 1 , 2 ):
         c_x, c_y = cell_obj.x + x_of, cell_obj.y + y_of
         if ((c_x, c_y) = = cell_obj.point) or \
           (c_x < 0 or c_x > = WORLD_WIDE) or \
           (c_y < 0 or c_y > = WORLD_HIGH):
           '''''排除自身和越界的点'''
           continue
         if self .world[c_x][c_y].is_alive:
           alive_count + = 1
     return alive_count
        
   def display( self ):
     print '=' * WORLD_WIDE #等号分割线
     for index in xrange (WORLD_HIGH):
       print ''.join([high[index].displayLinux() for high in self .world])
     print '=' * WORLD_WIDE
 
   def gameStart( self ):
     while True :
       self .display()
       new_world = deepcopy( self .world)
       for p_x, wide_list in enumerate ( self .world):
         for p_y, _ in enumerate (wide_list):
           current_cell = new_world[p_x][p_y]
           nei_num = self .getNeighbours(current_cell)
           if nei_num = = ALIVE_CON:
             current_cell.setAlive()
           elif nei_num ! = KEEP_CON:
             current_cell.setDied()       
       self .world = new_world
       sleep( 0.2 )
 
if __name__ = = '__main__' :
   world = GameManager()
   try :
     world.gameStart()
   except KeyboardInterrupt:
     '''''防止ctrl+c退出报错'''
     pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://blog.csdn.net/valiensun/article/details/77533596 。

最后此篇关于python实现生命游戏的示例代码(Game of Life)的文章就讲到这里了,如果你想了解更多关于python实现生命游戏的示例代码(Game of Life)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com