본문 바로가기
PYTHON(파이썬)/PYGAME(GAME)

YouTube 보고 구현한 게임

by eplus 2024. 10. 20.
#########################################################
# 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