티스토리 뷰

반응형

youtu.be/TlnQeRsBGrs

 

모든 강의 자료 : www.codingnow.co.kr/

이전강의 링크입니다.

이전 강의에서는 스타워즈 게임의 기본 틀을 만드는 강의 입니다.

기본 틀에 대한 설명이 있습니다.

cflab2017.tistory.com/81

 

파이썬 기초 활용 #키보드 입력으로 별이동하기 게임 #1탄 pynput

youtu.be/ZfHsb9bNMcY 파이썬의 pynput 메소드를 사용하여 키보드 입력을 통한 별(★) 이동하는 간단한 게임을 만들어 보았습니다. 실행결과입니다. 파이썬 키보드 입력으로 별 이동하기 게임 pynput을 사

cflab2017.tistory.com

 

이번 시간에는 적군의 비행기와 미사일을 발사하는 것을 만들어 게임을 좀더 수준을 올려 봤습니다.

키보드의 입력은 pynput를 사용하였습니다.

다음과 같이 cmd 창에서 pip를 사용하여 설치 하여야 합니다.

pip install pynput

 

자세한 코드 설명은 첨부된 동영상을 참고 해주세요.

이것은 cmd 차에서 화면을 갱신하면서 문자의 위치를 변경하면서 출력하는 것입니다.

미사일을 발사하고 점수를 카운트 하며 적군의 비행기와 충돌하면 게임이 끝납니다.

 

from pynput import keyboard
import os
import time, random

guide = '     #                    #'
isActive = True
position = {'x': 6+7, 'y': 0+6}

air = [-1 for i in range(len(guide))]
missile = [-1 for i in range(len(guide))]
air_make_time = 0
air_update_time = 0
missile_update_time = 0
score = 0

def key_press(key):
    global position
    global missile
    if key == key.space:
        missile[position['x']] = position['y']

    if key == key.up:        position['y'] -= 1
    if key == key.down:        position['y'] += 1
    if key == key.left:        position['x'] -= 1
    if key == key.right:        position['x'] += 1
    if position['x'] < 6:        position['x'] = 6
    if position['x'] > 24:        position['x'] = 24
    if position['y'] < 0:        position['y'] = 0
    if position['y'] > 9:        position['y'] = 9

def key_release(key):
    if key == keyboard.Key.esc:
        global isActive
        isActive = False
        return False

listener = keyboard.Listener(on_press=key_press, on_release=key_release)
listener.start()

#▼↑◌◎♠
while isActive:
    os.system('cls')

    if air_make_time > 5:
        air_make_time = 0
        idex = random.randint(6,24)
        if air[idex] == -1:
            air[idex] = 0

    print('     ######################')
    for i in range(10):  # y
        for k in range(len(guide)):  # x
            if position['x'] == k and position['y'] == i:
                #적기와 충돌 검사
                if air[k] == position['y']:
                    print('☆',end='')
                    isActive = False
                else:
                    print('♠', end='')
            elif air[k] > -1 or missile[k] > -1:
                if air[k] == i:
                    if air[k] == missile[k]:
                        print('◎', end='')
                        score += 10
                        air[k] = -1
                        missile[k] = -1
                    else:
                        print('▼',end='')
                elif missile[k] == i:
                    print('↑',end='')
                else:
                    print(guide[k], end='')
            else:
                print(guide[k], end='')
        print()
    print('     ######################')
    print(f'x = {position["x"]}, y = {position["y"]}')
    print(f'당신의 점수는 {score}점입니다.')
   
    time.sleep(0.1)
#적기 이동하기
    if air_update_time > 2:
        air_update_time = 0
        for i ,val in enumerate(air):
            if val > -1:
                air[i] += 1
                if air[i] > 9:
                    air[i] = -1
#미사일 이동하기
    if missile_update_time > 1:
        missile_update_time = 0
        for i, val in enumerate(missile):
            if val > -1:
                missile[i] -= 1

    air_make_time += 1 
    air_update_time += 1
    missile_update_time += 1

del listener
print('종료했습니다.')
반응형