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

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Pygame - python GUI module

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

페이지정보

글쓴이 관리자 조회 26,924 조회 날짜 20-03-11 13:17 / Update: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

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 52969 02-21
2 관리자 29373 02-21
3 관리자 36637 02-21
4 관리자 39873 02-22
5 관리자 43883 02-22
6 관리자 38738 02-22
7 관리자 33237 02-22
8 관리자 33943 02-22
9 관리자 35080 02-23
10 관리자 40761 02-24
11 관리자 29740 02-25
12 관리자 33045 02-27
13 관리자 27592 03-05
14 관리자 33842 03-10
15 관리자 21798 03-10
열람중 관리자 26925 03-11
17 관리자 20857 03-11
18 관리자 23747 03-11
19 관리자 26084 03-11
20 관리자 28043 03-11
21 관리자 29415 04-05
22 관리자 23212 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.