기본편
-기본 문법
-실상활 기반 예제(스타크래프트)
-퀴즈
활용편
-라이브러리 기초 사용법
-8개의 실전 프로젝트
(머신러닝, 데이터 분석, 업무 자동화, 아두이노 RC Car, 얼굴 인식)
#1_create_frame.py
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
pygame.display.set_mode((screen_width, screen_height))
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#이벤트 루프
running =True #게임이 진행중인가?
while running :
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
# pygame 종료
pygame.quit()
#2_background.py
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#배경 이미지 불러오기
background=pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/background.png")
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#이벤트 루프
running =True #게임이 진행중인가?
while running :
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
screen.blit(background, (0, 0)) #배경 그리기
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
ㅇ 이미지 불러오기 말고 RGB로 직접 색깔 지정할 수도 있어요
screen.fill((0, 0, 255)) ->파란색
- 배경 생성 후 캐릭터 위치 설정하기

배경 높이에서 캐릭터 위치 만큼 빼주기

character_y_pos = screen_height에서
character_y_pos = screen_height - charcter_height 해주니깐 캐릭터 나타남~

중간에 위치 하기위해서
character_x_pos = (screen_width / 2) - (character_width/2) 빼줌
3.
#3_main_sprite.py
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#배경 이미지 불러오기
background=pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/background.png")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/character.png")
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 #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#이벤트 루프
running =True #게임이 진행중인가?
while running :
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
screen.blit(background, (0, 0)) #배경 그리기
screen.blit(character, (character_x_pos, character_y_pos)) #캐릭터 그리기
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
4.
#4_keyboard_event.py
#3_main_sprite.py
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#배경 이미지 불러오기
background=pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/background.png")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/character.png")
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 #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#이동할 좌표
to_x = 0
to_y = 0
#이벤트 루프
running =True #게임이 진행중인가?
while running :
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
if event.type == pygame.KEYDOWN: #키가 눌러졌는지 확인
if event.key==pygame.K_LEFT : #캐릭터를 왼쪽으로
to_x -= 5 #to_x = to_x=5
elif event.key==pygame.K_RIGHT: #캐릭터를 오른쪽으로
to_x += 5
elif event.key==pygame.K_UP: #캐릭터를 위로
to_y -=5
elif event.key==pygame.K_DOWN:#캐릭터를 아래로
to_y +=5
if event.type == pygame.KEYUP: #뱡향키를 떼면 멈춤
if event.key ==pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x=0
elif event.key ==pygame.K_UP or event.key == pygame.K_DOWN:
to_y = 0
character_x_pos += to_x
character_y_pos +=to_y
#가로 경계값 처리
if character_x_pos <0:
character_x_pos = 0
elif character_x_pos> screen_width - character_width:
character_x_pos = screen_width - character_width
#세로 경계값 처리
if character_y_pos < 0 :
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
screen.blit(background, (0, 0)) #배경 그리기
screen.blit(character, (character_x_pos, character_y_pos)) #캐릭터 그리기
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
5.
프레임 높으면 화면, 캐릭터 이동이 좀 더 부드러움
#5_frame_per_second.py
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#배경 이미지 불러오기
background=pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/background.png")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/character.png")
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 #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#FPS
clock = pygame.time.Clock()
#이동할 좌표
to_x = 0
to_y = 0
#이동 속도
character_speed = 0.6
#이벤트 루프
running =True #게임이 진행중인가?
while running :
dt = clock.tick(10) #r게임 화면의 초당 프레임 수 설정
#캐릭터가 100만큼 이동을 해야함
#10 fps : 1초 동안에 10번 동작 -> 1번에 몇 만큼 이동 ? 10만큼! 10*10 = 100
#20 fps : 1초 동안에 20번 동작 -> 1번에 5만큼 ! 5 * 20 = 100
print("fps :" + str(clock.get_fps()))
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
if event.type == pygame.KEYDOWN: #키가 눌러졌는지 확인
if event.key==pygame.K_LEFT : #캐릭터를 왼쪽으로
to_x -= character_speed
elif event.key==pygame.K_RIGHT: #캐릭터를 오른쪽으로
to_x += character_speed
elif event.key==pygame.K_UP: #캐릭터를 위로
to_y -= character_speed
elif event.key==pygame.K_DOWN:#캐릭터를 아래로
to_y += character_speed
if event.type == pygame.KEYUP: #뱡향키를 떼면 멈춤
if event.key ==pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x=0
elif event.key ==pygame.K_UP or event.key == pygame.K_DOWN:
to_y = 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
#세로 경계값 처리
if character_y_pos < 0 :
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
screen.blit(background, (0, 0)) #배경 그리기
screen.blit(character, (character_x_pos, character_y_pos)) #캐릭터 그리기
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
6. 충돌 처리
#6.collision
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#배경 이미지 불러오기
background=pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/background.png")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/character.png")
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 #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#FPS
clock = pygame.time.Clock()
#이동할 좌표
to_x = 0
to_y = 0
#이동 속도
character_speed = 0.6
# 적 enemy 캐릭터
enemy = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/enemy.png")
enemy_size=enemy.get_rect().size #이미지 크기를 구해옴
enemy_width = enemy_size[0] #캐릭터의 가로 크기
enemy_height=enemy_size[1] #캐릭터의 세로 크기
enemy_x_pos = (screen_width / 2) - (enemy_width/2) #화면 가로의 절반 크기에 해당하는 곳에 위치 (가로)
enemy_y_pos=(screen_height/2) - (enemy_height/2) #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#이벤트 루프
running =True #게임이 진행중인가?
while running :
dt = clock.tick(60) #r게임 화면의 초당 프레임 수 설정
print("fps :" + str(clock.get_fps()))
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
if event.type == pygame.KEYDOWN: #키가 눌러졌는지 확인
if event.key==pygame.K_LEFT : #캐릭터를 왼쪽으로
to_x -= character_speed
elif event.key==pygame.K_RIGHT: #캐릭터를 오른쪽으로
to_x += character_speed
elif event.key==pygame.K_UP: #캐릭터를 위로
to_y -= character_speed
elif event.key==pygame.K_DOWN:#캐릭터를 아래로
to_y += character_speed
if event.type == pygame.KEYUP: #뱡향키를 떼면 멈춤
if event.key ==pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x=0
elif event.key ==pygame.K_UP or event.key == pygame.K_DOWN:
to_y = 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
#세로 경계값 처리
if character_y_pos < 0 :
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
#충돌 처리를 위한 rect정보 업데이트
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)) #적 그리기
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
7. 텍스트
#7.text.py
import pygame
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#배경 이미지 불러오기
background=pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/background.png")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/character.png")
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 #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#FPS
clock = pygame.time.Clock()
#이동할 좌표
to_x = 0
to_y = 0
#이동 속도
character_speed = 0.6
# 적 enemy 캐릭터
enemy = pygame.image.load("C:/Users/alswj/Desktop/python/pygame_basic/enemy.png")
enemy_size=enemy.get_rect().size #이미지 크기를 구해옴
enemy_width = enemy_size[0] #캐릭터의 가로 크기
enemy_height=enemy_size[1] #캐릭터의 세로 크기
enemy_x_pos = (screen_width / 2) - (enemy_width/2) #화면 가로의 절반 크기에 해당하는 곳에 위치 (가로)
enemy_y_pos=(screen_height/2) - (enemy_height/2) #화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로)
#폰트 정의
game_font = pygame.font.Font(None, 40) #(폰트, 크기)
#총 시간
total_time = 10
#시작 시간 정보
start_ticks = pygame.time.get_ticks() #시작(현재) tick 을 받아옴
#이벤트 루프
running =True #게임이 진행중인가?
while running :
dt = clock.tick(60) #r게임 화면의 초당 프레임 수 설정
print("fps :" + str(clock.get_fps()))
for event in pygame.event.get(): #어떤 이벤트가 발생하였는가?
if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생하였는가?
running =False #게임이 진행중이 아님
if event.type == pygame.KEYDOWN: #키가 눌러졌는지 확인
if event.key==pygame.K_LEFT : #캐릭터를 왼쪽으로
to_x -= character_speed
elif event.key==pygame.K_RIGHT: #캐릭터를 오른쪽으로
to_x += character_speed
elif event.key==pygame.K_UP: #캐릭터를 위로
to_y -= character_speed
elif event.key==pygame.K_DOWN:#캐릭터를 아래로
to_y += character_speed
if event.type == pygame.KEYUP: #뱡향키를 떼면 멈춤
if event.key ==pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x=0
elif event.key ==pygame.K_UP or event.key == pygame.K_DOWN:
to_y = 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
#세로 경계값 처리
if character_y_pos < 0 :
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
#충돌 처리를 위한 rect정보 업데이트
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)) #적 그리기
#타이머 집어 넣기
#경과 시간 계산
elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000
#경과 시간(ms) 을 1000으로 나누어서 초(s) 단위로 표시
timer = game_font.render(str(int(total_time - elapsed_time)), True, (255,255,255))
#출력할 글자, True, 글자 색상
screen.blit(timer, (10, 10))
#만약 시간이 0 이하이면 게임 종료
if total_time - elapsed_time <=0:
print("타임 아웃")
running = False
pygame.display.update() #게임 화면을 다시 그리기!
#잠시 대기
pygame.time.delay(2000) #2초 정도 대기(ms)
# pygame 종료
pygame.quit()
10초 시간이 지나면 2초 정도 대기 했다가 타임 아웃 뜨면서 종료됨.
8. 게임 개발 프레임-게임 개발 틀
#8_frame.py
import pygame
#######################################################################
#기본 초기화(반드시 해야 하는 것들)
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#화면 타이틀 설정
pygame.display.set_caption("minjeong Game") #게임 이름
#FPS
clock = pygame.time.Clock()
#######################################################################
# 1. 사용자 게임 초기화(배경화면 , 게임 이미지, 좌표, 속도, 폰트 등)
running =True
while running :
dt = clock.tick(30)
#2. 이벤트 처리(키보드, 마우스 등)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running =False
#3. 게임 캐릭터 위치 정의
#4. 충돌 처리
#5. 화면에 그리기
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
ㅂquiz.py
#quiz.py
import random
import pygame
#######################################################################
#기본 초기화(반드시 해야 하는 것들)
pygame.init() #초기화(반드시 필요)
#화면 크기 설정
screen_width=480 #가로 크기
screen_height=640 #세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
#화면 타이틀 설정
pygame.display.set_caption("코로나 피하기 게임") #게임 이름
#FPS
clock = pygame.time.Clock()
#######################################################################
# 1. 사용자 게임 초기화(배경화면 , 게임 이미지, 좌표, 속도, 폰트 등)
#배경 만들기
background=pygame.image.load("C:\\Users\\alswj\\Desktop\\python\\pygame_basic\\coronaback.png")
#캐릭터 만들기
character = pygame.image.load("C:\\Users\\alswj\\Desktop\\python\\pygame_basic\\person.png")
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
character_speed = 10
#똥 만들기
ddong = pygame.image.load("C:\\Users\\alswj\\Desktop\\python\\pygame_basic\\corona.png")
ddong_size = ddong.get_rect().size
ddong_width = ddong_size[0]
ddong_height = ddong_size[1]
ddong_x_pos = random.randint(0, screen_width - ddong_width)
ddong_y_pos = 0
ddong_speed = 10
running =True
while running :
dt = clock.tick(30)
#2. 이벤트 처리(키보드, 마우스 등)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running =False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
to_x -= character_speed
elif event.key == pygame.K_RIGHT:
to_x += character_speed
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key==pygame.K_RIGHT:
to_x = 0
#3. 게임 캐릭터 위치 정의
character_x_pos += to_x
if character_x_pos < 0:
character_x_pos =0
elif character_x_pos > screen_width - character_width:
character_x_pos = screen_width - character_width
ddong_y_pos += ddong_speed
if ddong_y_pos > screen_height:
ddong_y_pos = 0
ddong_x_pos = random.randint(0, screen_width - ddong_width)
#4. 충돌 처리
character_rect=character.get_rect()
character_rect.left = character_x_pos
character_rect.top = character_y_pos
ddong_rect = ddong.get_rect()
ddong_rect.left = ddong_x_pos
ddong_rect.top = ddong_y_pos
if character_rect.colliderect(ddong_rect):
print("충돌 했어요")
running=False
#5. 화면에 그리기
screen.blit(background, (0, 0))
screen.blit(character, (character_x_pos, character_y_pos))
screen.blit(ddong, (ddong_x_pos, ddong_y_pos))
pygame.display.update() #게임 화면을 다시 그리기!
# pygame 종료
pygame.quit()
'Programming > Python' 카테고리의 다른 글
인프런 파이썬 공부4 (완강) (2) | 2021.03.31 |
---|---|
인프런 파이썬 강의3 (2) | 2021.03.29 |
인프런 파이썬 공부2 (0) | 2021.03.27 |
인프런 파이썬 강의 (1) | 2021.03.27 |
[이코테]2. 그리디 & 구현 (0) | 2021.01.14 |