2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

프로그래밍언어문법/파이썬 게임 프로그래밍

[파이썬 게임프로그래밍] Ursina 를 이용한 2D 게임 만들어 보기

파아란기쁨1 2022. 12. 6. 13:24
반응형

원본 소스코드 - https://github.com/kairess/iwannabetheboshy-clone

 

GitHub - kairess/iwannabetheboshy-clone: I wanna be the BOSHY clone using Python and Ursina game engine

I wanna be the BOSHY clone using Python and Ursina game engine - GitHub - kairess/iwannabetheboshy-clone: I wanna be the BOSHY clone using Python and Ursina game engine

github.com

 

원본 소스 코드에서 만들어진 프로그램을 따라 만들어 보겠습니다.

 

1. 라이브러리 임포트

from ursina import *
from ursina.prefabs.platformer_controller_2d import PlatformerController2d

 2. 윈도우 만들기

app = Ursina()

3. 카메라 생성

#카메라 생성
camera.orthographic = True #원근감이 없도록 카메라를 직교로 설치
camera.fov = 20 #카메라가 수직으로 볼 수 있는 단위 수를 설정 fov(field of view = 시야각)

field of view 는 시야각으로 20 정도 설정

 

4. 플레이어가 밟고 지나가는 땅을 만들어 보자

# 땅을 만든다.
ground = Entity(
    model='cube',
    color=color.rgb(50, 180, 50),
    z=0.1,
    y=-8,
    scale=(100, 5, 10),
    collider='box'
)

Entity 는 객체를 의미하고 model='cube' 는 사각형을 의미한다. z=0.1 을 둔 것은 0 보다 약간 뒷쪽에 배치하겠다는 의미이고 scale 에서 x축으로 100 y축으로 5 크기로 만들겠다는 의미이다.

collider 는 box 형태로 두어서 충돌 했을 때 아래 쪽으로 내려가지 못하도록 설정했다.

 

5. 게임실행하기

# 게임 실행하기

app.run()

여기까지 실행하면 다음과 같은 화면이 뜬다.

6. 플레이어 만들기

- 원본 소스에 있는 boshy.png 를 플레이어로 만든다.

player = PlatformerController2d(
    position=(-15, -5),
    texture='boshy.png',
    color=color.white,
    scale=1,
    max_jumps=2
)

PlatformerController2d 형태로 플레이어를 만들면 (a,d)키로 좌우 이동과 스페이스로 점프가 가능하다.

texture에 이미지 파일 이름을 넣으면 해당 이미지로 객체가 생성 되고 max_jumps=2 는 최대 점프 횟수가 2회 라는 의미이다.

실행을 해 보면 다음과 같이 동작한다.

7. 배경 화면 만들기

#백그라운드 만들기
background = Entity(
    model='cube',
    texture='background.png',
    scale=(40, 20, 1),
    z=2
)

background.png 를 배경 화면으로 z =  2 를 둔 것은 배경을 가장 뒷쪽에 배치 하겠다는 의미이다.

실행 화면

8. 장애물 랜덤 위치에 10개 만들기

spikes = []

for i in range(10):
    spike = Entity(
        model='cube',
        texture='spike.png',
        color=color.white,
        collider='box',
        position=(random.randint(-10, 10), -5),
        scale=1
    )

    spikes.append(spike)

8개만 보이는 것은 같은 위치에 2개가 생겼기 때문이다.

 

9. 위에 벽을 밟고 이동할 수 있도록 벽을 세워 보자.

wall = Entity(
    model='cube',
    color=color.rgb(50, 180, 50),
    collider='box',
    position=(-3, 0),
    scale=(5, 1)
)

10. 플레이어가 장애물에 부딪혔을 때 원 위치로 돌아가는 코드를 작성하자.

def update():
    hit_info = player.intersects()

    if hit_info.hit:
        if hit_info.entity in spikes:
            player.position = (-15, -5)

플레이어가 부딪힌 객체를 hit_info 에 가져와서 만약 spikes 리스트에 포함 되어 있는 객체라면 원래 생성위치로 돌아가자.

 

전체 실행 화면

 

반응형