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
총결산이 게임 의 실제 디자인 은 그리 어렵 지 않다.우 리 는 구체 적 인 사 고 를 정리 해 야 한다.어느 단계 가 먼저 진행 되 고 우리 가 어떤 저장 행렬 을 준비 해 야 하 는 지 등 이 필요 하 다.유일한 커 브 길 은 주변 생명 개 수 를 측정 하 는 것 입 니 다.제 방법 은 궁 거 법 입 니 다.모든 위치 색인 을 수 동 으로 계산 하여 저장 하 는 것 입 니 다.작은 계 산 량 에서 이 순환 계산 은 많은 시간 을 낭비 하지 않 을 것 입 니 다.만약 당신 이 이에 대해 좋 은 건의 가 있다 면 교 류 를 환영 합 니 다.또한 뒤의 게임 이 끝 난 것 에 대해 교 류 를 하 는 것 을 환영 합 니 다.나중에 저 는 게임 을 끝 내 는 방법 을 보충 할 수 있 습 니 다.
파 이 썬 실전 의 콘 웨 이 생명 게임 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이 콘 웨 이 생명 게임 을 실현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.