<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Python 練習(xí)一個經(jīng)典的小游戲,附60行完整代碼下載

          共 2063字,需瀏覽 5分鐘

           ·

          2020-12-13 08:10

          Python與算法社區(qū)
          已原創(chuàng)?447?篇原創(chuàng),干貨滿滿
          三步加星標(biāo)


          01

          02

          03

          三步加星標(biāo)







          ??你好,我是 zhenguo

          ? ?今晚使用 Python 練習(xí)一個經(jīng)典的游戲:the game of life

          英國數(shù)學(xué)家約翰·何頓·康威在1970年發(fā)明了 the game of life,在生命游戲中,對于任意細(xì)胞,規(guī)則如下:

          每個細(xì)胞有兩種狀態(tài) - 存活或死亡

          每個細(xì)胞與以自身為中心的周圍八格細(xì)胞產(chǎn)生互動

          當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍的存活細(xì)胞低于2個時(不包含2個),該細(xì)胞變成死亡狀態(tài)。(模擬生命數(shù)量稀少)

          當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍有2個或3個存活細(xì)胞時,該細(xì)胞保持原樣。

          當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍有超過3個存活細(xì)胞時,該細(xì)胞變成死亡狀態(tài)。(模擬生命數(shù)量過多)

          當(dāng)前細(xì)胞為死亡狀態(tài)時,當(dāng)周圍有3個存活細(xì)胞時,該細(xì)胞變成存活狀態(tài)。(模擬繁殖)

          拿個例子闡述上述狀態(tài),如下種子時代:

          [0,?0,?1,?0,?0]
          [0,?1,?1,?0,?0]
          [0,?0,?1,?1,?0]
          [0,?1,?1,?1,?0]
          [0,?0,?0,?0,?0]

          坐標(biāo)[0,2]為一個存活的細(xì)胞,因?yàn)橹車?xì)胞個數(shù)為2,所以繁衍后依然存活;

          坐標(biāo)[1,2]的存活細(xì)胞,因?yàn)橹車?個存活細(xì)胞,所以繁衍后死亡;

          坐標(biāo)[0,1]死亡細(xì)胞,因?yàn)橹車『糜?個存活細(xì)胞,所以[0,1]處出現(xiàn)生命,

          繁衍一代后的,完整圖如下:

          [0,?1,?1,?0,?0]
          [0,?1,?0,?0,?0]
          [0,?0,?0,?0,?0]
          [0,?1,?0,?1,?0]
          [0,?0,?1,?0,?0]

          第二代:

          [0,?1,?1,?0,?0]
          [0,?1,?1,?0,?0]
          [0,?0,?1,?0,?0]
          [0,?0,?1,?0,?0]
          [0,?0,?1,?0,?0]

          ...

          能到第幾代結(jié)束呢?借用 Python 模擬了生命游戲,整個代碼一共 60 行。

          首先生成生命網(wǎng)格:

          def?get_board(size,?alive_cons):
          ????return?[[1?if?(i,?j)?in?alive_cons?else?0
          ?????????????for?j?in?range(size)]
          ????????????for?i?in?range(size)]

          獲得細(xì)胞的鄰域:

          def?get_neighbors(con):
          ????x,?y?=?con
          ????neighbors?=?[(x?+?i,?y?+?j)
          ?????????????????for?i?in?range(-1,?2)
          ?????????????????for?j?in?range(-1,?2)
          ?????????????????if?not?i?==?j?==?0]
          ????return?neighbors

          判斷下一代是否存活:

          def?is_alive_con(con,?alive_cons):
          ????alive_neighbors?=?calculate_alive_neighbors(con,?alive_cons)
          ????if?(alive_neighbors?==?3?or
          ????????????(alive_neighbors?==?2?and?con?in?alive_cons)):
          ????????return?True
          ????return?False

          生成下一代完整的生命網(wǎng)格:

          def?new_step(alive_cons):
          ????board?=?itertools.chain(*map(get_neighbors,?alive_cons))
          ????new_board?=?set([con
          ?????????????????????for?con?in?board
          ?????????????????????if?is_alive_con(con,?alive_cons)])
          ????return?list(new_board)

          以上就是幾個核心的函數(shù),下面主函數(shù):

          def?main():
          ????size?=?5
          ????board?=?[(0,?2),?(1,?1),?(1,?2),?(2,?2),?(2,?3),?(3,?1),?(3,?2),?(3,?3)]
          ????print_board(get_board(size,?board))
          ????for?_?in?range(10):
          ????????board?=?correct_cons(size,?new_step(board))
          ????????print_board(get_board(size,?board))

          終止?fàn)顟B(tài):所有網(wǎng)格細(xì)胞狀態(tài)都為0

          生命游戲的完整代碼,下載請微信我,備注:生命游戲

          不必打賞
          給我點(diǎn)個贊
          就心滿意足了
          瀏覽 18
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色综合天 | 人人看人人摸人人搞 | 操逼播放 | 亚欧视频在线 | 一级片免费网站 |