python 을 이용 하여 간단 한 뱀 탐식 게임 실현(python 소 백 대상)
python 소 백 으로서 항상 200%의 준 비 를 해 야 프로그램 을 쓸 수 있다 고 생각 합 니 다.그래서 하루 종일 그곳 에서 각종 문법 강 좌 를 보고 몇 달 동안 배 웠 지만 print(hello World)만 할 줄 알 았 다.
이렇게 하 는 것 은 효율 이 너무 낮 고 정확 한 방법 은 주변 에 가서 문 제 를 찾 은 후에 프로 그래 밍 을 해서 실현 하 는 것 이다.예 를 들 어 저 는 고등 수학 을 배 웠 습 니 다.저 는 프로 그래 밍 으로 어떻게 가이드 나 포인트 조작 을 실현 하 는 지 고려 해 야 합 니까?만약 에 어떻게 해 야 할 지 생각 나 지 않 으 면 baidu 를 해 야 합 니까?다른 사람 이 수치 적분 이나 기호 적분 을 어떻게 실현 하 는 지 고려 해 야 합 니까?우 리 는 매일 물건 을 살 때 가감,심지어 곱 하기 까지 사용 해 야 한다.그러면 나 는 간단 한 계산 기 를 만 들 수 있 을 까?만약 명령 행 이 너무 못 생 겼 다 면,나 는 pyqt 5 나 다른 gui 를 빨리 배 워 서 정교 한 응용 프로그램 을 실현 할 수 있 을 까?모든 일 을 프로 그래 밍 사고 로 고려 해 보면 프로 그래 밍 소 백 에서 프로 그래 밍 입문 으로 진급 하 는 데 큰 도움 이 된다.
어 렸 을 때,우 리 는 많 든 적 든 오랫동안 쇠퇴 하지 않 는 게임 인 뱀 을 탐식 하 는 데 푹 빠 질 것 이다.아마도 우 리 는 각양각색의 뱀 탐식 놀 이 를 해 보 았 지만,스스로 자신 만 의 뱀 탐식 놀 이 를 만 들 지 는 않 았 을 것 이다.오늘 은 뱀 을 탐식 하 는 세계 로 들 어가 python 으로 간단 한 뱀 탐식 게임 을 실현 합 니 다.
게임 소개
우선 게임 효과 도:
사용 자 는 뱀 을 게 걸 스 럽 게 먹 는 것 을 조종 함으로써 가능 한 한 많은 음식 을 먹는다.그 중에서 뱀 을 탐식 하 는 것 은 벽 에 닿 을 수도 없고 자신 을 물 수도 없다.
이 튜 토리 얼 은 pygame 을 통 해 게임 인터페이스 를 실현 하기 때문에 pygame 의 설 치 를 조금 소개 하고 용법 은 아래 에서 함수 와 함께 설명 합 니 다.
설치:
pip install -U pygame
다음은 뱀 을 탐식 하 는 관건 적 인 논 리 를 소개 한다.뱀 을 탐식 하 는 몸 은 list 로 구성 되 어 있 습 니 다.list 에서 모든 원 조 는 뱀 이 바둑판 에 있 는 좌 표를 탐식 합 니 다.우 리 는 이런 위치 에 그림 을 그리 면 동 그 란 탐식 뱀 을 만 들 수 있 습 니 다.하지만 탐식 사 를 깡충깡충 뛰 게 하려 면 move 함 수 를 써 야 한다.
그럼 뱀 은 어떻게 움 직 여요?
뱀 이 음식 을 먹 지 못 하면 list 의 마지막 좌 표를 삭제 하고 뱀 머리 부분 에 새로운 위 치 를 삽입 합 니 다.어떻게 새로운 위 치 를 확정 합 니까?우 리 는 탐식 뱀 이 이동 하 는 방향(x,y)을 설정 하고 원래 의 뱀 머리 위치의 좌 표를 이동 방향 에서 가감 작업 을 해 야 합 니 다.이렇게 뱀 을 탐식 하면 앞으로 이동 하 는 목 표를 실현 할 수 있다.뱀 이 마침 음식 을 먹 었 을 때 유일한 차이 점 은 뱀 꼬리 를 먹 는 요 소 를 삭제 하지 않 아 도 된다 는 것 이다.이 가운데 주의해 야 할 것 은 탐식 뱀 이 현재 이동 하 는 방향의 반대 방향 으로 이동 해 서 는 안 된다 는 점 이다.코드 에 나타 나 는 것 은 현재 방향 과 방향 을 바 꾸 는 곱 하기 가 마이너스 가 될 수 없다 는 것 이다.
그렇다면 뱀 이 음식 을 먹 는 것 을 어떻게 알 았 을 까?
뱀 머리 를 탐식 하 는 좌표 가 음식의 좌표 와 겹 치면 뱀 을 탐식 하면 음식 을 먹는다.뱀 이 먹 는 것 을 탐 내 면 바둑판 에 무 작위 로 음식 을 업데이트 한다.무 작위 로 생 성 된 음식의 좌표 가 뱀 을 탐식 하 는 위치 와 겹 치면 뱀 을 탐식 하 는 좌표 와 다 를 때 까지 무 작위 로 좌 표를 만들어 낸다.
그럼 게임 실패 한 걸 어떻게 알 아 요?
뱀 머리 를 탐 내 는 좌표 가 테두리 의 좌표 와 겹 치면 뱀 졸.탐식 뱀 각 부분의 좌표 가 겹 치면 탐식 뱀 이 자신 을 물 어 게임 이 끝났다 는 뜻 이다.
다음은 각 부분의 구체 적 인 코드 실현 이다.
다음 그림 은 주로 필요 한 몇 가지 함수 입 니 다.
우선 탐식 뱀 모듈 을 살 펴 보 자.
우선init__뱀 을 탐 내 는 위 치 를 초기 화하 고 초기 방향 으로 수직 으로 올 라 갑 니 다.toward 함 수 는 뱀 을 게 걸 스 럽 게 먹 는 방향 을 바 꾸 는 데 사용 되 며,(x,y)는 각각 뱀 머리 가 수평 과 수직 방향의 방향 을 나타 낸다.왼쪽으로 x=-1,오른쪽으로 x=1,위로 y=-1,아래로 y=1.move 함수,표지 enlarge 를 사용 하여 뱀 이 음식 을 먹 었 는 지 판단 하고 해당 하 는 조작 을 합 니 다.eat_food 함 수 는 뱀 이 음식 을 먹 었 는 지 여 부 를 판단 하고 먹 었 을 때 점 수 를 100 더 해서 True 로 되 돌려 줍 니 다.toward 함 수 는 뱀의 머리 방향 을 바 꾸 는 데 사용 되 지만 방향 을 바 꾸 는 것 이 현재 방향 과 반대 되면 아무것도 실행 하지 않 습 니 다.draw 함 수 는 뱀 을 게 걸 스 럽 게 먹 는 모습 을 그 리 는 데 쓰 인 다.뱀 머리 는 약간 큰 붉 은 마음 이 고 뱀 몸 은 작은 노 란 마음 이다.
우 리 는 어떻게 이 뱀 을 그 릴 수 있 습 니까?이것 은 함수 pygame.draw.circle 을 빌려 야 합 니 다.이 함수 의 주요 매개 변 수 는 screen 입 니 다.바로 뱀 을 탐식 하 는 게임 화면 을 그 려 야 합 니 다.color:도안 의 색깔(RGB),position:도안 이 화면 에 있 는 위치,radius:의 반지름,width:내부 채 움 의 크기,0 이면 도안 은 중 공 원 입 니 다.반경 크기 와 같다 면,도안 은 옹 골 진 원 이다.
다음은 뱀 을 탐식 하 는 코드 부분 입 니 다.주석 을 결합 하여 읽 을 수 있 습 니 다.
#
class Snack(object):
def __init__(self):
# self.item = [(3, 25), (2, 25), (1, 25), (1,24), (1,23),
# (1,22), (1,21), (1,20), (1,19), (1,18), (1,17), (1,16)]
# x y
#
self.item = [(3, 25), (2, 25), (1, 25), (1, 24), ]
self.x = 0
self.y = -1
def move(self, enlarge):
# enlarge
if not enlarge:
#
self.item.pop()
#
head = (self.item[0][0] + self.x, self.item[0][1] + self.y)
# list
self.item.insert(0, head)
def eat_food(self, food):
global score
# snack_x,snack_y
# food_x, food_y
snack_x, snack_y = self.item[0]
food_x, food_y = food.item
#
if (food_x == snack_x) and (food_y == snack_y):
score += 100
return 1
else:
return 0
def toward(self, x, y):
#
if self.x * x >= 0 and self.y * y >= 0:
self.x = x
self.y = y
def get_head(self):
#
return self.item[0]
def draw(self, screen):
#
# 15
radius = 15
width = 15
# i:1---34 j:1---25
color = 255, 0, 0
# position
position = 10 + 20 * self.item[0][0], 10 + 20 * self.item[0][1]
pygame.draw.circle(screen, color, position, radius, width)
# 10
radius = 10
width = 10
color = 255, 255, 0
for i, j in self.item[1:]:
position = 10 + 20 * i, 10 + 20 * j
pygame.draw.circle(screen, color, position, radius, width)
그 다음은 음식 모듈:np.random.randint 는 경계 안의 좌 표를 만 드 는 데 사 용 됩 니 다.뱀 을 탐식 하 는 좌표 와 겹 치면 새로운 랜 덤 좌 표를 계속 생 성 합 니 다.
#
class Food(object):
def __init__(self):
self.item = (4, 5)
#
def _draw(self, screen, i, j):
color = 255, 0, 255
radius = 10
width = 10
# i:1---34 j:1---25
position = 10 + 20 * i, 10 + 20 * j
# 10
pygame.draw.circle(screen, color, position, radius, width)
#
def update(self, screen, enlarge, snack):
if enlarge:
self.item = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
while self.item in snack.item:
self.item = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
self._draw(screen, self.item[0], self.item[1])
그리고 initboard 함수:board_width、board_height 는 게임 인터페이스의 너비 와 높이 로 계산 에 따라 테두리 가 차지 하 는 위 치 를 계산 한 다음 에 정사각형 을 출력 합 니 다.pygame.draw.rect 는 pygame.draw.circle 의 용법 과 유사 합 니 다.차이 점 은 rect 네 개의 매개 변 수 는 각각 screen:화면,color:색상,pos:가로 좌표 x,세로 좌표 y,사각형 의 길이,사각형 의 너비 입 니 다.여기 사각형 의 길 이 를 20 으로 설정 하 겠 습 니 다.width 는 circle 의 width 용법 과 같 으 며 크기 를 채 우 는 것 을 의미 합 니 다.
#
def init_board(screen):
board_width = BOARDWIDTH
board_height = BOARDHEIGHT
color = 10, 255, 255
width = 0
# width:x, height:y
# X: 0 35*20
for i in range(board_width):
pos = i * 20, 0, 20, 20
pygame.draw.rect(screen, color, pos, width)
pos = i * 20, (board_height - 1) * 20, 20, 20
pygame.draw.rect(screen, color, pos, width)
# Y: 0 26*20
for i in range(board_height - 1):
pos = 0, 20 + i * 20, 20, 20
pygame.draw.rect(screen, color, pos, width)
pos = (board_width - 1) * 20, 20 + i * 20, 20, 20
pygame.draw.rect(screen, color, pos, width)
다음은 게임over 모듈:누가 자신 을 물 었 는 지 어떻게 판단 합 니까?python 내 장 된 데이터 구조 set:set 를 이용 할 수 있 습 니 다.이 데이터 구조 에는 중복 요소 가 있 을 수 없습니다.list 를 set 로 바 꾼 후에 길이 가 짧 아 지면 list 에 중복 요소 가 있다 는 것 을 의미한다.즉,뱀 이 자신 을 물 었 다 는 것 이다.
#
def game_over(snack):
broad_x, broad_y = snack.get_head()
flag = 0
old = len(snack.item)
new = len(set(snack.item))
#
#
if new < old:
flag = 1
#
if broad_x == 0 or broad_x == BOARDWIDTH - 1:
flag = 1
if broad_y == 0 or broad_y == BOARDHEIGHT - 1:
flag = 1
if flag:
return True
else:
return False
다음은 게임 초기 화 모듈:pygame 모듈 을 사용 하려 면 pygame.init 를 사용 하여 초기 화 해 야 합 니 다.pygame.display.set_mode 는 게임 인터페이스의 크기 를 설정 하 는 데 사 용 됩 니 다.pygame.display.set_caption 은 게임 제목 을 표시 하 는 데 사 용 됩 니 다.
#
def game_init():
# pygame
pygame.init()
#
screen = pygame.display.set_mode((BOARDWIDTH * 20, BOARDHEIGHT * 20))
#
pygame.display.set_caption(' ')
# sound = pygame.mixer.Sound(AUDIONAME)
# channel = pygame.mixer.find_channel(True)
# channel.play(sound)
return screen
마지막 으로 게임 주 함수:우선 뱀 과 음식 을 탐식 하 는 것 을 예화 하 다.그 다음 에 글꼴 을 SimHei 로 설정 합 니 다.기본 글꼴 을 사용 하면 중국어 지원 이 좋 지 않 습 니 다.그 다음 에 게임 화면 을 표시 하여 게임 의 실패 여 부 를 판단 합 니 다.실패 하면 GAME OVER 를 출력 합 니 다.그렇지 않 으 면 주 함 수 를 계속 실행 합 니 다.그 중에서 pygame.event.get 은 대기 열 에서 이 벤트 를 가 져 옵 니 다.즉,이 벤트 를 먼저 가 져 와 야 사용자 의 키보드 입력 과 다른 조작 을 얻 을 수 있 습 니 다.screen.fill 은 화면 을 채 우 는 데 사 용 됩 니 다.pygame.key.getpressed 는 사용자 의 키보드 입력 을 가 져 오 는 데 사 용 됩 니 다.pygame.display.update 는 이전 그림 을 새로 고침 하 는 데 사 용 됩 니 다.time.sleep 는 새로 고침 빈 도 를 제어 하 는 데 사 용 됩 니 다.
#
def game(screen):
snack = Snack()
food = Food()
#
font = pygame.font.SysFont('SimHei', 20)
is_fail = 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
#
screen.fill((0, 0, 100))
init_board(screen=screen)
#
keys = pygame.key.get_pressed()
press(keys, snack)
#
if is_fail:
font2 = pygame.font.Font(None, 40)
print_text(screen, font, 0, 0, text)
print_text(screen, font2, 400, 200, "GAME OVER")
#
if not is_fail:
enlarge = snack.eat_food(food)
text = u"score: {} :python ".format(score)
print_text(screen, font, 0, 0, text)
food.update(screen, enlarge, snack)
snack.move(enlarge)
is_fail = game_over(snack=snack)
snack.draw(screen)
#
pygame.display.update()
time.sleep(0.1)
자,우리 의 탐식 뱀 튜 토리 얼 은 이렇게 끝 났 습 니 다.다른 자질구레한 지식 은 모두 소스 에 있 습 니 다.여러분 은 자신의 첫 번 째 탐식 뱀 게임 을 직접 만들어 볼 수 있 고 자신의 탐식 뱀 에 게 다양한 기능 을 확장 할 수 있 습 니 다.예 를 들 어 음악 을 틀 면서 게임 을 시작 하거나 뱀 을 더 맛 있 게 먹 는 화면 을 만 드 는 것 이다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.