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

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

회원로그인

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

Pygame - python GUI module

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

페이지정보

글쓴이 관리자 조회 26,929 조회 날짜 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 관리자 53000 02-21
2 관리자 29391 02-21
3 관리자 36656 02-21
4 관리자 39897 02-22
5 관리자 43897 02-22
6 관리자 38752 02-22
7 관리자 33249 02-22
8 관리자 33957 02-22
9 관리자 35088 02-23
10 관리자 40779 02-24
11 관리자 29744 02-25
12 관리자 33052 02-27
13 관리자 27598 03-05
14 관리자 33848 03-10
15 관리자 21798 03-10
열람중 관리자 26930 03-11
17 관리자 20863 03-11
18 관리자 23748 03-11
19 관리자 26093 03-11
20 관리자 28048 03-11
21 관리자 29420 04-05
22 관리자 23214 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.