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

    댓글