파이썬/파이썬 활용

파이썬 활용 03 - PYGAME 사용해보기 (간단 게임 퀴즈)

H-V 2021. 11. 2. 10:24

유투버 '나도코딩'님 강의 참조

 

  • 추억의 '똥 피하기 게임'을 만들기. 
    조건 1) 캐릭터는 화면 가장 아래에 위치, 좌우로만 이동 가능
    조건 2) 똥은 화면 가장 위에서 떨어짐. x 좌표는 매번 랜덤
    조건 3) 캐릭터가 똥을 피하면 다음 똥이 떨어 짐
    조건 4) 캐릭터가 똥과 충돌하면 게임 종료
    조건 5) FPS는 60으로 고정

 

01 기본 뼈대

  • 어제 리뷰를 했던 마지막 부분을 그대로 가져와서 필요부분만 쏙 넣으면 해결!
    import pygame
    pygame.init() # 초기화 반드시 필요 -> 'pygame' 사용 시 반드시 선언
    
    #화면 크기 설정
    screen_width = 480 #가로 
    screen_height = 640 #세로
    screen = pygame.display.set_mode((screen_width, screen_height))
    
    #화면 타이틀 설정
    pygame.display.set_caption("Game Project") #게임 이름
    
    #FPS
    clock = pygame.time.Clock()
    
    ####################################################################################
    
    #1.사용자 게임 초기화 (배경화면, 게임 이미지, 좌표, 폰트, 시간 등)
    
    
    #2. 이벤트 루프
    running = True #게임 진행 여부
    while running:
        dt = clock.tick(60) # 게임 화면의 초당 프레임 수를 설정
    
        #3. 이벤트 처리 
        #print("FPS: "+str(clock.get_fps())) # 프레임 속도 확인
        #이 부분도 'pygame' 사용 시 반드시 필요하다 몰라도 된다. 적기만 하자
        for event in pygame.event.get(): #event.get()을 통해 사용자의 움직임을 받음
            if event.type == pygame.QUIT: #창의 x버튼
                running = False
    
    
        #4. 게임 캐릭터 위치 (가로/세로 경계값)
    
    
        #5. 충돌 처리
    
    
      
            running = False
    
        #6. 화면에 그리기 (.blit)
    
        #타이머 집어 넣기 ( 경과 시간 )
    
        # 글자 실제 반영 (시간, True, 글자 색상 (*고정))
    
        # 시간 처리
    
        pygame.display.update() #화면을 계속해서 그려주는 함수
    
    #시간 오버 게임 종료시 약간의 텀을 주고 종료
    pygame.time.delay(2000)
    
    # 게임 종료시 pygame 종료
    pygame.quit()​
  • 화면 설정 및 FPS 설정
import pygame
pygame.init() # 초기화 반드시 필요 -> 'pygame' 사용 시 반드시 선언

#화면 크기 설정
screen_width = 480 #가로 
screen_height = 640 #세로
screen = pygame.display.set_mode((screen_width, screen_height))

#화면 타이틀 설정
pygame.display.set_caption("Quiz") #게임 이름

#FPS
clock = pygame.time.Clock()

 

 

02 사용자 게임 초기화 

  1. 배경 만들기
    background = pygame.image.load("C:\\devtools\\pythonworkspace\\first_python_project\\background.png")
    
    #6. 화면에 그리기 (.blit)
    screen.blit(background, (0, 0))​
  2. 캐릭터 만들기
    #2. 캐릭터 만들기
    character = pygame.image.load("C:\\devtools\\pythonworkspace\\first_python_project\\character.png")
    character_size = character.get_rect().size # 이미지의 크기를 구해줌
    character_width = character_size[0] #캐릭터 가로 크기
    character_height = character_size[1] #캐릭터 세로 크기
    character_x_pos = (screen_width / 2) - (character_width / 2) #화면 가로의 절반 크기에 해당하는곳에 위치
    character_y_pos = screen_height - character_height #화면 세로 크기 가장 아래에 해당하는곳에 위치
    
    screen.blit(character, (character_x_pos, character_y_pos)) #캐릭터 그리기​
  3. 키보드 이벤트
    #3. 키보드 이벤트
    to_x = 0
    to_y = 0
    character_speed = 10
    
    #4. 이벤트 루프
    running = True #게임 진행 여부
    while running:
        dt = clock.tick(60) # 게임 화면의 초당 프레임 수를 설정
    
        #5. 키보드 이벤트 처리 
        for event in pygame.event.get(): #event.get()을 통해 사용자의 움직임을 받음
            if event.type == pygame.QUIT: #창의 x버튼
                running = False
    
            if event.type == pygame.KEYDOWN: #키보드 누르는 이벤트
                if event.key == pygame.K_LEFT:#키보드 방향
                    to_x -= character_speed
                elif event.key == pygame.K_RIGHT:
                    to_x += character_speed
            
            if event.type == pygame.KEYUP: #키보드를 멈추는 이벤트
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    to_x = 0​
  4. 게임 캐릭터 위치 설정
    #6. 게임 캐릭터 위치 (가로/세로 경계값)
    #캐릭터 이동 후 좌표
    character_x_pos += to_x 
    character_y_pos += to_y 
    
    #가로 경계값 처리
    if character_x_pos < 0:
    character_x_pos = 0
    elif character_x_pos > screen_width - character_width:
    character_x_pos = screen_width - character_width​


  5. 적 설정
    #7 적 만들기
    enemy = pygame.image.load("C:\\devtools\\pythonworkspace\\first_python_project\\enemy.png")
    enemy_size = enemy.get_rect().size # 이미지의 크기를 구해줌
    enemy_width = enemy_size[0] #캐릭터 가로 크기
    enemy_height = enemy_size[1] #캐릭터 세로 크기
    enemy_x_pos = 0
    enemy_y_pos = 0
    enemy_speed = 10​
    
    screen.blit(enemy, (enemy_x_pos, enemy_y_pos))
  6. 적 위치 설정
     #6. 게임 캐릭터 위치 (가로/세로 경계값)
     ...
     enemy_y_pos += enemy_speed​
     이렇게 하면 일단 왼쪽 맨 위에서 한번 밑으로 쫙 내려 온다. 랜덤값을 줘서 위에서 랜덤 위치에서 떨어지고 계속해서 나오도록 세팅해야 한다. 
    import random
    
    #7 적 만들기
    enemy = pygame.image.load("C:\\devtools\\pythonworkspace\\first_python_project\\enemy.png")
    enemy_size = enemy.get_rect().size # 이미지의 크기를 구해줌
    enemy_width = enemy_size[0] #캐릭터 가로 크기
    enemy_height = enemy_size[1] #캐릭터 세로 크기
    ****enemy_x_pos = random.randint(0, screen_width - enemy_width)****
    enemy_y_pos = 0
    enemy_speed = 10​
    
    #6. 게임 캐릭터 위치 (가로/세로 경계값)
    enemy_y_pos += enemy_speed 
    
    if enemy_y_pos > screen_height:
    enemy_y_pos = 0
    enemy_x_pos = random.randint(0, screen_width-enemy_width)
    1) 적의 위치를 랜덤값을 부여해서 시작 위치가 0에서 스크린 가로 - 적 크기만큼만 빼서 왔다갔다 하도록 설정
    2) y = 0 이니 맨 위쪽에서 떨어지고 떨어지는 위치는 랜덤하게 잡힘
    3) y축을 기반으로 떨어지면서 스크린을 벗어나면 다시 y = 0, 적은 맨위로 올가가고 위치는 랜덤하게 잡히면서 다시 떨어짐
  7. 충돌 처리
        #8. 충돌 처리
        character_rect = character.get_rect() #케릭터의 좌표,넓이,높이를 가지고 있음
        character_rect.left = character_x_pos
        character_rect.top = character_y_pos
    
        enemy_rect = enemy.get_rect()
        enemy_rect.left = enemy_x_pos
        enemy_rect.top = enemy_y_pos
    
        #충돌 체크
        if character_rect.colliderect(enemy_rect):
            print("Crushed!")
            running = False​

굿!