python 을 이용 하여 간단 한 뱀 탐식 게임 실현(python 소 백 대상)

11454 단어 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)
자,우리 의 탐식 뱀 튜 토리 얼 은 이렇게 끝 났 습 니 다.다른 자질구레한 지식 은 모두 소스 에 있 습 니 다.여러분 은 자신의 첫 번 째 탐식 뱀 게임 을 직접 만들어 볼 수 있 고 자신의 탐식 뱀 에 게 다양한 기능 을 확장 할 수 있 습 니 다.예 를 들 어 음악 을 틀 면서 게임 을 시작 하거나 뱀 을 더 맛 있 게 먹 는 화면 을 만 드 는 것 이다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기