음성고등학교 로고이미지

RSS 페이스북 공유하기 트위터 공유하기 카카오톡 공유하기 카카오스토리 공유하기 네이버밴드 공유하기 프린트하기
동아리 작품 20517 임종구
좋아요:0
작성자 임종구 등록일 19.12.25 조회수 79
첨부파일
bandicam 2019-12-25 23-12-09-859.mp4 (1018.79KB) (다운횟수:157)
PyCar (2).zip (15.09MB) (다운횟수:42)

 

import pygame

import random

from time import sleep

 

window_width = 480

window_height = 800

 

black = (0, 0, 0)

white = (255, 255, 255)

gray = (150, 150, 150)

red = (255, 0, 0)

 

 

class Car:

    image_car = ['RacingCar01.png', 'RacingCar02.png', 'RacingCar03.png', 'RacingCar04.png', 'RacingCar05.png',

                 'RacingCar06.png', 'RacingCar07.png', 'RacingCar08.png', 'RacingCar09.png', 'RacingCar10.png',

                 'RacingCar11.png', 'RacingCar12.png', 'RacingCar13.png', 'RacingCar14.png', 'RacingCar15.png',

                 'RacingCar16.png', 'RacingCar17.png', 'RacingCar18.png', 'RacingCar19.png', 'RacingCar20.png']

 

    def __init__(self, x=0, y=0, dx=0, dy=0):

        self.image = ""

        self.x = x

        self.y = y

        self.dx = dx

        self.dy = dy

#값 초기화

    def load_image(self):

        self.image = pygame.image.load(random.choice(self.image_car))

        self.width = self.image.get_rect().size[0]

        self.height = self.image.get_rect().size[1]

#이미지 불러오고 이미지 범위 설정

    def draw_image(self):

        screen.blit(self.image, [self.x, self.y])

#이미지 그리기

    def move_x(self):

        self.x += self.dx

#x축 이동

    def move_y(self):

        self.y += self.dy 

#y축이동

    def check_out_of_screen(self):

        if self.x + self.width > window_width or self.x < 0:

            self.x -= self.dx

#화면 밖으로 나갔는지 체크

    def check_crash(self, car):

        if (self.x + self.width > car.x) and (self.x < car.x + car.width) and (self.y < car.y + car.height) and (

                self.y + self.height > car.y):

            return True

        else:

            return False

#플레이어가 차에 박았는지 측정

 

 

def draw_main_menu():

    draw_x = int((window_width / 2) - 200)

    draw_y = int(window_height / 2)

    image_intro = pygame.image.load('PyCar.png')

    screen.blit(image_intro, [draw_x, draw_y - 280])

    #시작이미지 불러오기

    font_40 = pygame.font.SysFont("FixedSys", 40, True, False)

    font_30 = pygame.font.SysFont("FixedSys", 30, True, False)

    #폰트 설정

    text_title = font_40.render("PyCar: Racing Car Game", True, black)

    screen.blit(text_title, [draw_x, draw_y])

    score_text = font_40.render("Score:" + str(score), True, white)

    screen.blit(score_text, [draw_x, draw_y+70])

    #게임제목과 점수 표시

    

    text_start = font_30.render("Press Space Key to Start!", True, red)

    screen.blit(text_start, [draw_x, draw_y + 140])

    pygame.display.flip()

 

 

def draw_score():

    font_30 = pygame.font.SysFont("FixedSys", 30, True, False)

    text_score = font_30.render("Score:" + str(score), True, black)

    screen.blit(text_score, [15, 15])

       

 

 

if __name__ == '__main__':

    pygame.init()

 

    screen = pygame.display.set_mode((window_width, window_height))

    pygame.display.set_caption("Cross the road in eumseong")

    #제목과 게임의 크기설정

    clock = pygame.time.Clock()

    

    pygame.mixer.music.load('race.wav')

    sound_crash = pygame.mixer.Sound('crash.wav')

    sound_engine = pygame.mixer.Sound('engine.wav')

    #게임소리 불러오기

    player = Car(window_width / 2, window_height - 150, 0, 0)

    player.load_image()

    #플레이어의 위치조절과 이미지 불러오기

    cars = []

    car_count = 5

    for i in range(car_count):

        x = random.randrange(0, window_width - 55)

        car = Car(x, random.randrange(-150,-50), 0, random.randint(5, 10))

        car.load_image()

        cars.append(car)

    #카운트수 만큼 화면에 나타날 차의 위치를 랜덤으로 저장하여 배열에 저장

    lanes = []

    lane_width = 10

    lane_height = 80

    lane_margin = 20

    lane_count = 10

    lane_x = (window_width - lane_width) / 2

    lane_y = -10

    for i in range(lane_count):

        lanes.append([lane_x, lane_y])

        lane_y += lane_height + lane_margin

    #중간에 선그리기

    score = 0

    crash = True

    game_on = True

    while game_on:

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                game_on = False

                #게임창 닫기

            if crash:

                if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:

                    crash = False

                    #충돌하여 멈췄을때(시작할때) 스페이스바를 눌러 게임 재시작

                    for i in range(car_count):

                        cars[i].x = random.randrange(0, window_width - cars[i].width)

                        cars[i].y = random.randrange(-150, -50)

                        cars[i].load_image()

 

                    player.load_image()

                    player.x = window_width / 2

                    player.dx = 0

                    score = 0

                    pygame.mouse.set_visible(False)

                    #마우스 안보이게 설정

                    sound_engine.play()

                    sleep(5)

                    pygame.mixer.music.play(-1)

 

            if not crash:

                if event.type == pygame.KEYDOWN:

                    if event.key == pygame.K_RIGHT:

                        player.dx = 4

                    elif event.key == pygame.K_LEFT:

                        player.dx = -4

                    #키를 눌렀을때 플레이어가 이동할 방향 설정

                if event.type == pygame.KEYUP:

                     if event.key == pygame.K_RIGHT:

                        player.dx = 0

                     elif event.key == pygame.K_LEFT:

                        player.dx = 0

                    #키를 떼면 값을 초기화

        screen.fill(gray)

 

        if not crash: 

            for i in range(lane_count):

                pygame.draw.rect(screen, white, [lanes[i][0], lanes[i][1], lane_width, lane_height])

                lanes[i][1] += 10

                if lanes[i][1] > window_height:

                    lanes[i][1] = -40 - lane_height

 

            player.draw_image()

            player.move_x()

            player.check_out_of_screen()

 

            for i in range(car_count):

                cars[i].draw_image()

                cars[i].y += cars[i].dy

                if cars[i].y > window_height:

                    score += 10

                    cars[i].x = random.randrange(0, window_width - cars[i].width)

                    cars[i].y = random.randrange(-150, -50)

                    cars[i].dy = random.randint(5, 10)

                    cars[i].load_image()

 

            for i in range(car_count):

                if player.check_crash(cars[i]):

                    crash = True

                    pygame.mixer.music.stop()

                    sound_crash.play()

                    sleep(2)

                    pygame.mouse.set_visible(True)

                    break

 

            draw_score()

            pygame.display.flip()

        else:

            draw_main_menu()

 

        clock.tick(60)

 

    pygame.quit()

 

이전글 10602 권윤민 파이썬 결과물(램수면 계산기)
다음글 10213 이재희 동아리 활동 보고서