#########################################################
# 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