ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • YouTube 보고 구현한 게임
    PYTHON(파이썬)/PYGAME(GAME) 2024. 10. 20. 10:12
    728x90
    반응형
    #########################################################
    # eGame
    #   python 공부 후 YouTube 보고 만든 게임(나도코딩 활용#1)
    #########################################################
    from os import environ
    environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1'

    import pygame
    import random
    #####################################################
    # 기본 초기화
    #####################################################
    pygame.init()  # 초기화

    # 화면 사이즈
    screen_width = 400
    screen_height = 400
    screen = pygame.display.set_mode((screen_width, screen_height))
     
    # 화면 타이틀
    pygame.display.set_caption("eGame")

    # FPS
    clock = pygame.time.Clock()

    #####################################################
    # 사용자 게임 초기화 (배경화면, 게임 이미지, 좌표, 폰트)
    #####################################################
    # 배경 이미지
    background = pygame.image.load("ePlus배경.jpg")

    # 캐릭터 불러오기
    character = pygame.image.load("ePlus_C.jpg")
    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

    to_x = 0
    to_y = 0

    # 이동 속도
    c_speed = 0.2

    # 적 enemy
    enemy = pygame.image.load("e.jpg")
    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 # (screen_height  / 2 )- (enemy_height / 2)
    enemy_speed = 18

    # FONT 정의
    game_font = pygame.font.Font("arial.ttf", 12) #폰트 객체 생성
    s_font = pygame.font.Font("arial.ttf", 12) #폰트 객체 생성

    # 총 시간
    total_time = 60

    # Score 표시
    score = 0
    hscore = 0
    stemp =""

    try:
        sfile = open("score.txt","r", encoding="utf8")
        stemp = sfile.readline()
        if stemp != "":
            hscore = int(stemp)
        sfile.close
    except Exception:
        pass


    # 시간 계산 - 시작 시간 정보
    start_ticks = pygame.time.get_ticks() # 시작 tick

    # event loop
    running = True # 게임이 진행 중인가 ?

    while running:
        dt = clock.tick(30)  # 게임 화면 초당 프레임 수 설정
       
        # 10 fps : 1 초 동안 10번 동작
        # 20 fps : 1 초 동안 20번 동작
       
        # 이벤트 처리 ( 키보드, 마우스 )
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # 창이 닫히는 Event
                running = False
               
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    to_x -= c_speed
                elif event.key == pygame.K_RIGHT:
                    to_x += c_speed
                   
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    to_x = 0
                   
        character_x_pos += to_x * dt                
        character_y_pos += to_y * dt
       
        if character_x_pos < 0:
            character_x_pos = 0
        elif character_x_pos >  screen_width - character_width :
            character_x_pos = screen_width - character_width
       
        enemy_y_pos += enemy_speed
       
        if enemy_y_pos > screen_height:
            score += 1
            enemy_y_pos = 0
            enemy_x_pos = random.randint(0, screen_width - enemy_width)
                   
        # 충돌 처리
        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):
            running = False
           
        ##         배경 그리기
        screen.blit(background,(0,0)) # 배경 그리기
        screen.blit(character, (character_x_pos, character_y_pos))
        screen.blit(enemy, (enemy_x_pos, enemy_y_pos))
       
        # Timer 집어 넣기
        # 경과 시간 - 초로 표시 , 점수 표시
        elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000
        timer = game_font.render("TIME : " + str(int(total_time - elapsed_time)), True, (255,0,0))
        e_score = s_font.render("SCORE : " + str(hscore) + " / " + str(score), True, (255,0,0))
        eplus = game_font.render("www.eiot.co.kr" , True, (0,255,0))
        # 출력할 글자, True, 색상
        screen.blit(timer, (10,10))
        screen.blit(e_score, ( screen_width-100, 10))
        screen.blit(eplus, ( screen_width / 2 - 50 ,10))
       
        if total_time - elapsed_time <= 0:
            running = False
       
        pygame.display.update() # 화면 다시 그리기
       
    # Hi-Score 저장
    if score > hscore:
        sfile = open("score.txt","w", encoding="utf8")
        print(score, file = sfile)
        sfile.close
       
    # 게임 종료 전 1초 대기        
    pygame.time.delay(1000)    # 2초 대기
    # <icon-icons, 무료 아이콘 다운로드 사이트>

    # End
    pygame.quit()

    # pyinstall -F -w --icon=./snoopy.ico eGame_01.py

    eGame.py
    0.00MB
    arial.ttf
    0.99MB
    e.jpg
    0.54MB
    ePlus_C.jpg
    0.54MB
    ePlus배경.jpg
    0.06MB
    score.txt
    0.00MB
    snoopy.ico
    0.00MB
    snoopy.png
    0.00MB

    728x90

    'PYTHON(파이썬) > PYGAME(GAME)' 카테고리의 다른 글

    ChatGPT Canvas로 5분만에 만든 게임  (3) 2024.10.13
Designed by Tistory.