小游戏|用pygame做一个简单的python小游戏---生命游戏
用pygame做一个简单的python小游戏—生命游戏 生命游戏(Game of Life)
生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授设计的一个计算机程序。这个计算机程序是因为它模拟和显示的图像看起来颇似生命的出生和繁衍过程而得名为“生命游戏”。同时生命游戏也是一个二维的元胞自动机。
生命游戏是一个二维网格游戏,这个网格中每个方格居住着一个活着或死了的细胞。一个细胞在下一个时刻的生死取决于相邻8个方格中活着或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因为孤单而死去。在游戏初始阶段,系统会随机产生一部分细胞。由这些初始细胞进行繁衍。
【小游戏|用pygame做一个简单的python小游戏---生命游戏】规则:
- 若细胞为死亡状态,其周围若存在3个存活细胞,则繁衍后该细胞变成存活状态
- 若细胞为存活状态,其周围若低于2个存活细胞,则繁衍后该细胞变成死亡状态
- 若细胞为存活状态,其周围若存在2个或3个存活细胞,则繁衍后该细胞状态保持不变
- 若细胞为存活状态,其周围若高于3个存活细胞,则繁衍后该细胞变成死亡状态
文章图片
附上代码:
import pygame, sys, time, random
width=102#面板的宽度(外围有一层墙)
high=102#面板的高度(外围有一层墙)
size=6#设置绘制的单方格大小def initialization(arr):#初始化
for i in range(high):
for j in range(width):
ran=random.random()
if ran>0.9:
arr[i][j]=1
else:
pass
return arrdef nextmultiply(arr):#下一代繁衍
newarr = [([0] * width) for n in range(high)]
for i in range(high):
for j in range(width):
num=0
if (i==0 or i==high-1) or (j==0 or j==width-1):
newarr[i][j]=0
else:
num=arr[i-1][j-1]+arr[i-1][j]+arr[i-1][j+1]+arr[i][j-1]+arr[i][j+1]+arr[i+1][j-1]+arr[i+1][j]+arr[i+1][j+1]
if arr[i][j]==0:#若原细胞为死亡状态
if num==3:
newarr[i][j]=1
else:#若原细胞为存活状态
if num==2 or num==3:
newarr[i][j]=1
else:
newarr[i][j]=0
return newarrif __name__ == '__main__':
color_white = pygame.Color(255, 255, 255)
color_LightSkyBlue = pygame.Color(135,206,250)
color_black = pygame.Color(0, 0, 0)
pygame.init()
screen = pygame.display.set_mode((width*size, high*size))
screen.fill(color_white)
pygame.display.set_caption("生命游戏Game of Life")
arr = [([0] * width) for i in range(high)]# 创建一个二维数组
arr=initialization(arr)
while(True):
screen.fill(color_white)
time.sleep(0.5)
for i in range(high):
for j in range(width):
if arr[i][j]==1:
pygame.draw.rect(screen, color_black, (i * size, j * size, size, size))
elif (i==0 or i==high-1) or (j==0 or j==width-1):
pygame.draw.rect(screen, color_LightSkyBlue, (i * size, j * size, size, size))
else:
pass
for event in pygame.event.get():# 监听器
if event.type == pygame.QUIT:
sys.exit()
arr = nextmultiply(arr)
pygame.display.update()
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- JS中的各种宽高度定义及其应用
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 涉毒患者(新诗)
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。