# 5.1.3 멍멍이와 야옹이가 인사해요3 - 순차

이번에는 야옹이 오브젝트를 만들고, 화면에 등장시킬 차례이다. 이미 멍멍이 오브젝트로 해봤던 코딩이라 크게 어려울 것이 없다. 다만, 다음의 11번 라인의 경우, 처음보는 코드가 등장했는데, 이 속성이 무엇인지는 **flip\_x** 라는 이름에서 직관적으로 알 수 있을 것이다. 이미 우리가 엔트리 블록코딩에서 야옹이가 멍멍이와 서로 마주보기 위해 특별히 추가되어졌던 블록\["좌우 모양 뒤집기" 블록]을 기억한다면, 그 블록과 같은 역할임을 알 수 있다. 즉, x방향(수평방향, Horizontal)으로 이미지를 뒤집기 위한 속성으로 True 값을 주어 화면에 x방향으로 이미지를 뒤집어 출력해 준다.

{% code lineNumbers="true" %}
```python
from pgzhelper import *

TITLE = '멍멍이와 야옹이가 인사해요'
WIDTH = 480
HEIGHT = 270

dog = Actor('dog', (100, 150))
dog.scale = 0.5
cat = Actor('cat', (350, 150))
cat.scale = 0.5
cat.flip_x = True

def draw():
    screen.fill('white')
    dog.draw()
    cat.draw()
```
{% endcode %}

이제 남은 일은 각각의 멍멍이와 야옹이가 번갈아서 순서대로 인사말과 작별인사를 건네면 되는 것이다. 이를 코딩으로 표현하면 18\~21번 라인의 4줄의 코딩이 된다. &#x20;

{% code lineNumbers="true" %}
```python
from pgzhelper import *

TITLE = '멍멍이와 야옹이가 인사해요'
WIDTH = 480
HEIGHT = 270

dog = Actor('dog', (100, 150))
dog.scale = 0.5
cat = Actor('cat', (350, 150))
cat.scale = 0.5
cat.flip_x = True

def draw():
    screen.fill('white')
    dog.draw()
    cat.draw()
    
    dog.say_for_sec('멍멍!', 2, fontname='nanum_square')
    cat.say_for_sec('야옹~', 2, fontname='nanum_square')
    dog.say_for_sec('잘가~', 2, fontname='nanum_square')
    cat.say_for_sec('잘있어 안녕!', 2, fontname='nanum_square')
```
{% endcode %}

해당 코딩의 이해 역시나 직관적으로 알 수 있다. 오브젝트 내 내장된 **say\_for\_sec** 함수(메소드)를 사용해 어떤 말을 몇 초 동안 얘기할지를 코딩하면 된다. _단, mu 에디터의 기본 내장폰트에는 한글이 존재하지 않아, 한글출력을 시도하면 한글이 보이지 않는 문제가 있다._ 이를 해결하기 위해 우리는 화면출력을 위한 별도의 한글폰트 사용할 수 있다.&#x20;

우리는 앞서 5.1.1 장에서 언급한 것처럼, 폰트 역시도 게임에 사용되는 리소스(그림, 글자, 소리 등)이고, 그 리소스들은 항상 미리 정해진 폴더에 위치해야 한다는 것을 인지하고 있다. 폰트 폴더는 다음과 같이 에디터에  **폰트 아이콘**을 눌러 열 수 있고, 그 안에 필요한 한글폰트를 넣어두면 된다.  Mu 에디터 커스텀 버전에서는 여러분의 편의를 위해 이미 무료 한글폰트(네이버 나눔스퀘어 폰트)가 넣어져  있을 것이고, 우리는 이를 함수 파마미터의 하나로 fontname='nanum\_square' 라는 값으로 넘기기만 하면 된다.

<figure><img src="https://3827255905-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fd15BjHzo0klcYpoHnPr6%2Fuploads%2Fu5wyMLotkjkPrY4xLP1e%2Fcapture1.png?alt=media&#x26;token=03016099-30ee-46ea-84a0-28842ce2e19d" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
폰트에 관해 알아둘 것이 하나 있다. 일반적으로 폰트의 종류는 크게 2가지가 있는데, 파이게임제로에서는 ttf 확장자를 갖는 폰트(True Type Font) 만 지원한다. 따라서, otf 폰트(Open Type Font)를 폰트 폴더에 넣고, 왜 안되는지 의아해 하지 않기를 바란다. 해당 내용에 대해서는 [라이브러리 레퍼런스(메뉴얼)](https://pygame-zero.readthedocs.io/en/stable/ptext.html#font-name-and-size)에 언급되어 있다.
{% endhint %}

이것으로 엔트리 초급책의 가장 첫 번째 예제를 파이게임제로로 코딩해 보는 것을 마치겠다. 첫 번째 예제의 실행결과는 다음과 같다.

<figure><img src="https://3827255905-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fd15BjHzo0klcYpoHnPr6%2Fuploads%2F6SgmhnufIz2EgqZuSftS%2FKapture%202024-07-17%20at%2017.57.45.gif?alt=media&#x26;token=4b52fbf1-614e-4e1f-9a31-a5fb9dd414a1" alt=""><figcaption></figcaption></figure>

마지막으로 다시한번 정리하면, 이미 4장 게임루프의 이해에서 언급했던 것처럼 파이게임제로를 활용한 텍스트 코딩이 엔트리 블록코딩과는 차이점이 있는데 엔트리 때는 멍멍이, 야옹이 오브젝트가 각각 개별적으로 독립적으로 존재했고, 해당 오브젝트에 해당하는 코딩역시도 각자에게 독립적으로 존재하였다. 그러나, 파이게임제로에는 그러한 병렬/동시성 방식([자세한 내용은 이전 서 참조](https://app.gitbook.com/s/nDUP8xZ7pbezrK2wo5dX/paradigm/4.1-serial-parallel))을 지원하지 않고 있고, 게임루프라는 거대 루프(loop) 구조를 사용한다. 파이썬 게임코딩에서는 이 구조에 대한 기본 이해를 바탕으로 특히 중요하게 언급된 오브젝트에 대한 개념까지 잘 이해했다면, 앞으로의 남은 예제들의 코딩도 크게 어려움은 없을 것이다.&#x20;

첫 예제까지 무사히 마친 여러분께 축하를 전하며, 이이서 두번 째 예제에 도전해보자.
