레이싱 게임 만들기 3 - 점수 기록하기 > Pygame - python GUI module

본문 바로가기

사이트 내 전체검색

이전으로Pygame - python GUI module

레이싱 게임 만들기 3 - 점수 기록하기

페이지정보

글쓴이 관리자 조회 31,453 조회 날짜 20-03-11 13:17 / U:20-03-11 13:45
댓글 0댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

내용

레이싱 게임 만들기 3

 

 

- 점수 기록하기

 

점수와 STAGE를 기록하는 방법을 알아본다.

 

점수는 상대방 차량이 화면 밑으로 사라졌을 때, 10점씩 추가하도록 한다.

 

 

 

1. 점수 추가

 

점수를 기록하기 위해 SCORE 변수를 설정한다. 또한 1000점이 추가될때마다 STAGE를 1씩 증가시키기 위해 STAGESTAIR 변수도 설정한다.

increase_score() 함수는 main() 함수 위에 작성한다.

 

......

......

# 색상
BLACK = (0,0,0)
WHITE = (255,255,255)

GRAY = (150, 150, 150)

 

......

......

 

# 기본 변수
STAGE = 1
CAR_COUNT = 5
SCORE = 0
STAGESCORE = 0
STAGESTAIR = 1000

 

# 플레이어 Life 갯수

PNUMBER = 5

 

......

......

 

def increase_score():
    global SCORE, STAGE, STAGESCORE

 

    # 점수 10점 추가

    SCORE += 10

   

    # STAGE별 증가율을 위한 stair 값 설정
    if STAGE == 1:
        stair = STAGESTAIR
    else:
        stair = (STAGE - 1) * STAGESTAIR

 

    # 스테이지 별 증가율에 따른 STAGE 증가
    if SCORE >= STAGESCORE + stair:
        STAGE += 1
        STAGESCORE = STAGESCORE + stair

 

increase_score() 함수는 게임 루프안에 상대방 자동차들이 스크린 밑으로 사라졌을 때, 실행해준다.

 

......

......

 

        # 다른 자동차들 도로위에 움직이기
        for i in range(CAR_COUNT):
            CARS[i].draw_car()
            CARS[i].rect.y += CARS[i].dy

            # 화면 아래로 내려가면 자동차를 다시 로드한다.
            # 로드시 자동차의 이미지가 랜덤으로 바뀌므로 새로운 자동차가 생긴 듯한 효과가 있다.

            if CARS[i].rect.y > WINDOW_HEIGHT:
                increase_score()
                CARS[i].load_car()

 

......

......

 

 

 

2. 점수 기록

 

점수는 텍스트로 작성하여 화면 상단에 쓰기를 한다.

참고 : https://www.jbmpa.com/pygame/9

 

draw_score() 함수는 increase_score() 함수 위에 작성한다.

 

def draw_score():
    # SCORE 기록
    font_01 = pygame.font.SysFont("FixedSsy", 30, True, False)
    text_score = font_01.render("Score : " + str(SCORE), True, BLACK)
    SCREEN.blit(text_score, [15, 15])
    
    # STAGE 기록
    text_stage = font_01.render("STAGE : " + str(STAGE), True, BLACK)
    # 화면 가운데 위치
    text_stage_rect = text_stage.get_rect()
    text_stage_rect.centerx = round(WINDOW_WIDTH / 2)
    SCREEN.blit(text_stage, [text_stage_rect.x, 15])

 

    # 플레이어 Life 기록
    for i in range(PNUMBER):
        # 5개는 그림으로
        if i < 5:
            pimage = pygame.image.load(DIRCARS + 'Player.png')
            pimage = pygame.transform.scale(pimage, (15, 38))
            px = WINDOW_WIDTH - 20 - (i * 30)
            SCREEN.blit(pimage, [px, 15])
        # 5개가 넘으면 숫자로 표현해준다.
        else:
            text_pnumber = font_01.render("+" + str(PNUMBER - 5), True, WHITE)
            text_pnumber_x = WINDOW_WIDTH - 30 - (5 * 30)
            SCREEN.blit(text_pnumber, [text_pnumber_x, 25])

 

def increase_score():

......

......

 

 

draw_score() 함수는 pygame.display.flip() 위에서 호출한다.

 

......

......

    while playing:

......

......

            draw_score()
            pygame.display.flip()

 

......

......

 

 

 

3. 플레이어 Life 없애기

 

플레이어가 다른 자동차랑 부딪치면 플레이어 Life를 하나씩 줄여준다. 즉, PNUMBER 값을 줄여준다.

 

......

......

def main():
    global SCREEN, CAR_COUNT, WINDOW_WIDTH, WINDOW_HEIGHT, PNUMBER

......

......

    while playing:

......

......

        # 플레이어와 다른 차량 충돌 감지
        for i in range(CAR_COUNT):
            if player.check_collision(CARS[i], 5):
                PNUMBER -= 1
                # 부딪쳤을 경우 상대방 차량 튕겨나게 함. 좌우 튕김
                if player.rect.x > CARS[i].rect.x:
                    CARS[i].rect.x -= CARS[i].rect.width + 10
                else:
                    CARS[i].rect.x += CARS[i].rect.width + 10

                # 위 아래 튕김
                if player.rect.y > CARS[i].rect.y:
                    CARS[i].rect.y -= 30
                else:
                    CARS[i].rect.y += 30

 

......

......

 

 

 

4. 결과

 

2921044682_1583955801.3105.gif

댓글목록

댓글이 없습니다

게시물 검색
총 22 건 , 1 페이지
올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구
Copyright © JBMPA.com All rights reserved.
사이트 언어 선택
PC 보기