激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python實現生命游戲的示例代碼(Game of Life)

python實現生命游戲的示例代碼(Game of Life)

2021-01-08 00:22其實我是一頭豬 Python

這篇文章主要介紹了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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 偿还电影免费看 | 国产精品99久久久久久久 | 亚洲精品av在线 | 精品999久久久 | 欧美日本91精品久久久久 | 91一区二区三区久久久久国产乱 | 一级片999 | 国产一级毛片高清视频完整版 | 日本欧美一区二区三区在线观看 | 日本一区二区在线 | 国产99久久久久久免费看 | 黄在线免费看 | 久久草草亚洲蜜桃臀 | 免费a级作爱片免费观看欧洲 | 亚洲综合一区二区三区 | 亚洲性生活免费视频 | 奇米影视8888狠狠狠狠 | 亚洲日本乱码在线观看 | 国产精品视频2021 | 中文字幕欧美视频 | 久久成人午夜视频 | 欧美乱码精品一区 | 成人免费毛片一 | 久久久久久久亚洲视频 | 黄污污网站 | 日韩精品中文字幕在线观看 | 国产乱淫av片免费观看 | 毛片免费视频观看 | 国产精品久久久久久久四虎电影 | 亚洲成人在线视频网站 | 免费国产人成网站 | 久久精品99久久久久久2456 | 毛片免 | 久久亚洲成人 | 久久久国产精品成人免费 | 国产一区二区三区四区五区在线 | 国产高潮国产高潮久久久91 | 一区二区久久电影 | 北原夏美av | 免费国产不卡午夜福在线 | 国产羞羞网站 |