python(0821-0908)/활용1 게임(0830-0902-)

게임 2 quiz 똥피하기

나도초딩 2022. 8. 31.

기본 뼈대를 펼쳐놓고, 만들기

1. frame 뼈대 만들기
	screen = pygame.display.set_mode((screen_width, screen_height))
	# 화면타이틀 : pygame.display.set_caption("나도게임")
	# 이벤트루프
	running = True
	while running:
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				running = False

	#종료 pygame.quit()

2. 백그라운드 이미지 -> blit
	1. background = pygame.image.load("경로")
	#이벤트루프 안에서, 배경 그리기. blit, 튜플로 좌표, display.update()
	2. screen.blit(background, (0,0))
	3. pygame.display.update() 

3. 캐릭터 추가
	1. 캐릭터 추가 pygame.image.load ( 캐릭터 위치X-> 안보이는 상태)
    2. 캐릭터크기와 캐릭터의 화면상 위치 구하기
	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

4. 키보드 이벤트
	1. 키보드 이벤트(KEYDOWN 과 KEYUP 시 이벤트->위치 조정)
		if event.type == pygame.KEYDOWN:
			if event.key ==pygame.K_LEFT:
				to_x += 5
			elif
		if event.type == pygame.KEYUP:
			if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
				to_x = 0
			elif
        character_x_pos += to_x
        character_y_pos += to_y
    2. 가로/세로 경계값 처리
        # 가로 경계값 처리
    	if character_x_pos < 0:
        	character_x_pos = 0
   		elif character_x_pos > screen_width - character_width:
        character_x_pos = screen_width - character_width

	    # 세로 경계값 처리
 
5. fps : to_x = to_x -5 (-5를 character_speed = 0.6 으로)
	1. clock = pygame.time.Clock()
	2. dt = clock.tick(10) #화면 속 초당 프레임수
	3. charactr_x_pos += to_x * dt

6. collision : enemy 출현. 충돌처리를 위한 rect 정보 업데이트
	1. character_rect = character.get_rect()
		character_rect.left = character_x_pos
	2. if character_rect.colliderect(enemy_rect):
		print("충돌")
		running = False

7. 텍스트 표시
	1. game_font = pygame.font.Font(None, 40)
	2. 카운트 다운 설정(total_time 과 pygame.time.get_ticks())
	3. elpased time = (현재시간-시작시간)/1000
	4. screen.blit(timer, (10,10))
	5. 카운트다운 종료 : (total_time - elapsed_time) <= 0
8 프레임

 

낙하 속도 높이기 추가

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
background = pygame.image.load("C:/projects/나도코딩/1_game/background.png")
#ddong
character = pygame.image.load("C:/projects/나도코딩/1_game/character.png")
character_size = character.get_rect().size
# print(character.get_rect().size) --> (70, 70)
character_size_width = character_size[0]
character_size_height = character_size[1]
character_x_pos = screen_width/2 - character_size_width/2
character_y_pos = screen_height - character_size_height
# 이벤트 루프에 blit
# 이동 위치
to_x = 0
character_speed = 10

#ddong
ddong = pygame.image.load("C:/projects/나도코딩/1_game/enemy.png")
ddong_size = ddong.get_rect().size
ddong_size_width = ddong_size[0]
ddong_size_height = ddong_size[1]
# ddong_x_pos = random.range(0,screen_width)
ddong_x_pos = random.randint(0,screen_width-ddong_size_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
            if 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 #키입력 한번 실행 때마다 x축 반영
    # character_y_pos += to_y # 좌우만 이동 가능
    if character_x_pos < 0:
        character_x_pos = 0
    elif character_x_pos > (screen_width - character_size_width):
        character_x_pos = (screen_width - character_size_width)
    
    # 똥 떨어트리기
    ddong_y_pos += ddong_speed

    if ddong_y_pos > screen_height: # 스크린높이보다 크면(0-->스크린높이)
        ddong_y_pos = 0 # 스크린 높이(길이)보다 커지면=떨어지면, 다시 0 위치로
        if ddong_speed < 18:
            ddong_speed += 2 # 낙하 속도 높이기
        ddong_x_pos = random.randint(0, screen_width - ddong_size_width)
    
    # 4. 충돌 처리
    # rect 값
    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.quit()

'python(0821-0908) > 활용1 게임(0830-0902-)' 카테고리의 다른 글

게임 3 활용 : 팡팡  (0) 2022.09.01
게임 1 기초  (0) 2022.08.31

댓글