Python 실전 의 실현 콘 웨 이 생명 게임

머리말
콘 웨 이 생명 게임 디자인 은 어렵 지 않 습 니 다.제 생각 은 바로 pygame 을 통 해 외관 을 보 여 주 는 것 입 니 다.최근 에 한 동안 게임 프로젝트 는 모두 pygame 으로 진행 되 었 고 잘 되 었 습 니 다.내부 코드 의 실현 도 비교적 간단 하 다.그의 규칙 에 따라 우 리 는 여러 번 의 계산 과 판단 을 통 해 배열 을 새로 고 치 는 것 이 필요 하 다.
1.콘 웨 이 생명 게임 규칙
주위 에 1 개 만 있 거나 생존 세포 가 없 을 때 원래 의 생존 세 포 는 사망 상태 로 들어간다.아 날로 그 생명 수가 적다)주변 에 2 개 또는 3 개의 생존 세포 가 있 을 때 그리드 가 그대로 유지 된다.주변 에 4 개 이상 의 생존 세포 가 있 을 때 원래 의 생존 세포 도 사망 상태 에 들어간다.(아 날로 그 생명 수가 너무 많다)주변 에 3 개의 생존 세포 가 있 을 때 공백 격자 가 생존 세포 로 변 한다.(아 날로 그 번식
2.설계 절차
1.라 이브 러 리 도입
코드 는 다음 과 같 습 니 다(예시).

import sys
import random
import numpy as np
import pygame
2.디자인 사고
이 블 로그 에서 우 리 는 아래 의 첫 번 째 그림 의 내용 을 실현 했다.
在这里插入图片描述
관심 이 있 는 친구 도 다음 과 같은 생각 을 할 수 있다.
在这里插入图片描述
3.디자인 창
우선,우 리 는 이전의 pygame 창의 코드 를 빌려 서 창의 호출 을 실현 했다.이전 과 다른 변 화 는 창 을 열기 전에 크기 를 먼저 정 하 는 것 이다.
우 리 는 게임 크기 의 사용자 정의,창 크기 의 사용자 정 의 를 실현 하여 뒤의 게임 디자인 과 통일 성 을 높이 고 미관 성 을 높 일 수 있 습 니 다.
중간 부분 코드 는 색상 조정 과 창 채 우기 입 니 다.
在这里插入图片描述

import sys
import random
import numpy as np
import pygame
pygame.init()#   init()   
n=int(input("     :"))
size=width,height=50*n+2,50*n+2
screen=pygame.display.set_mode(size)#    
pygame.display.set_caption("      ")#    
icon=pygame.image.load("Icon.jpg")
pygame.display.set_icon(icon)
BLACK=pygame.Color("black")
GAINSBORO=pygame.Color("gainsboro")
MOCCASIN=pygame.Color("moccasin")
WHITE=pygame.Color("white")
screen.fill(MOCCASIN)
fps=5
fclock=pygame.time.Clock()#    Clock        

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  #      
            sys.exit()  #   

    pygame.display.update()  #          ,        
    fclock.tick(fps)  #       ,  3 
3.초기 생명 행렬
우 리 는 순환 을 통 해 랜 덤 수 를 만들어 랜 덤 으로 초기 생명 을 만든다.
a-b 사이 에 있 는 무 작위 정 수 를 만 듭 니 다.a,b 를 포함 합 니 다.

##       
a=[]
for i in range(0,n):
    a.append([])
    for j in range(0,n):
        a[i].append(random.randint(0,1))
4.주변 생명의 검 측
우 리 는 생명 주위 8 개 위치의 색인 차 이 를 하나의 목록 에 저장 하고,유효한 위치 에 있 는 생명의 개 수 를 순환 적 으로 검사 하여 목록 에 저장 합 니 다.
두 가지 판단 이 포함 되 어 있다.
1.우선 위치의 유효성 을 판단 해 야 한다
2.또 하 나 는 생명 이 있 는 지 없 는 지 를 판단 하 는 것 이다.

direction = [[-1, -1], [0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0]]
    c = []
    #         
    for i in range(0, n):
        c.append([])
        for j in range(0, n):
            count = 0   #      
            for o in direction:
                ide = np.array([i, j]) + np.array(o)
                #            ,      
                if 0 <= ide[0] < n and 0 <= ide[1] < n:
                    if a[ide[0]][ide[1]] == 1:
                        count += 1
            c[i].append(count)
5.생명의 변화
각 위치의 생명 을 계수 목록 에 따라 업데이트 하고 생명 행렬 을 업데이트 합 니 다.

##                    
    for i in range(0, n):
        for j in range(0, n):
            if c[i][j] <= 1 or c[i][j] >= 4:#              
                a[i][j] = 0
            elif c[i][j] == 3:#            ,     
                a[i][j] = 1
6.생명의 전시
생명의 격자 를 그 리 는 것 은 매우 간단 합 니 다.우 리 는 pygame 의 그래 픽 코드 를 사용 합 니 다.
pygame.draw.rect(screen,BLACK,(i*50,j*50,50,50):이렇게 보 여 주 는 것 은 채 워 진 사각형 입 니 다.screen 에 보 여 줍 니 다.초기 위 치 는:(i*50,j*50)이 고 크기 는:(50,50)입 니 다.색상 은:black,기본 테두리 0,즉 모두 채 워 진 사각형 입 니 다.뒤에 숫자 를 추가 할 때 채 워 지지 않 은 것 을 의미 합 니 다.상자 선 은 숫자 크기 의 사각형 입 니 다.예 를 들 어 pygame.draw.rect(screen,GAINSBoro,(i*50,j*50,50,50),2)는 채 우지 않 고 상자 선 은 2 입 니 다.
그림 중첩 을 통 해 우 리 는 모든 생명 간 의 간격 스타일 을 실현 하고 렌 더 링 효 과 를 강화 합 니 다.

for i in range(0, n):
        for j in range(0, n):
            if a[i][j]==1:
                #          ,     
                pygame.draw.rect(screen, BLACK, (i*50, j*50, 50, 50))
                #       ,   2   ,         
                pygame.draw.rect(screen, GAINSBORO, (i*50, j*50, 50, 50),2)

            else:#     
                pygame.draw.rect(screen, WHITE, (i*50, j*50, 50, 50))
                pygame.draw.rect(screen, GAINSBORO, (i*50, j*50, 50, 50),2)
7.전체 코드

"""
# -*- coding: utf-8 -*-
# @Time    : 2021/4/23 0023 17:14
# @Author  :     
# @FileName:       2.py
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/qq_44793283
"""
import sys
import random
import numpy as np
import pygame
pygame.init()#   init()   
n=int(input("     :"))
size=width,height=50*n+2,50*n+2
screen=pygame.display.set_mode(size)#    
pygame.display.set_caption("      ")#    
icon=pygame.image.load("Icon.jpg")
pygame.display.set_icon(icon)
BLACK=pygame.Color("black")
GAINSBORO=pygame.Color("gainsboro")
MOCCASIN=pygame.Color("moccasin")
WHITE=pygame.Color("white")
screen.fill(MOCCASIN)
fps=1
fclock=pygame.time.Clock()#    Clock        


##       
a=[]
for i in range(0,n):
    a.append([])
    for j in range(0,n):
        a[i].append(random.randint(0,1))

##          
direction = [[-1, -1], [0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0]]
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  #      
            sys.exit()  #   
    c = []
    #         
    for i in range(0, n):
        c.append([])
        for j in range(0, n):
            count = 0   #      
            for o in direction:
                ide = np.array([i, j]) + np.array(o)
                #            ,      
                if 0 <= ide[0] < n and 0 <= ide[1] < n:
                    if a[ide[0]][ide[1]] == 1:
                        count += 1
            c[i].append(count)
    ##                    
    for i in range(0, n):
        for j in range(0, n):
            if c[i][j] <= 1 or c[i][j] >= 4:#              
                a[i][j] = 0
            elif c[i][j] == 3:#            ,     
                a[i][j] = 1
    for i in range(0, n):
        for j in range(0, n):
            if a[i][j]==1:
                #          ,     
                pygame.draw.rect(screen, BLACK, (i*50, j*50, 50, 50))
                #       ,   2   ,         
                pygame.draw.rect(screen, GAINSBORO, (i*50, j*50, 50, 50),2)

            else:#     
                pygame.draw.rect(screen, WHITE, (i*50, j*50, 50, 50))
                pygame.draw.rect(screen, GAINSBORO, (i*50, j*50, 50, 50),2)
    print(np.array(a))
    pygame.display.update()  #          ,        
    fclock.tick(fps)  #       ,  3 
총결산
이 게임 의 실제 디자인 은 그리 어렵 지 않다.우 리 는 구체 적 인 사 고 를 정리 해 야 한다.어느 단계 가 먼저 진행 되 고 우리 가 어떤 저장 행렬 을 준비 해 야 하 는 지 등 이 필요 하 다.유일한 커 브 길 은 주변 생명 개 수 를 측정 하 는 것 입 니 다.제 방법 은 궁 거 법 입 니 다.모든 위치 색인 을 수 동 으로 계산 하여 저장 하 는 것 입 니 다.작은 계 산 량 에서 이 순환 계산 은 많은 시간 을 낭비 하지 않 을 것 입 니 다.만약 당신 이 이에 대해 좋 은 건의 가 있다 면 교 류 를 환영 합 니 다.또한 뒤의 게임 이 끝 난 것 에 대해 교 류 를 하 는 것 을 환영 합 니 다.나중에 저 는 게임 을 끝 내 는 방법 을 보충 할 수 있 습 니 다.
파 이 썬 실전 의 콘 웨 이 생명 게임 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이 콘 웨 이 생명 게임 을 실현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기