게임도프로그램의일부이기때문에,게임은입력,처리그리고출력으로구성된다.C콘솔환경에서게임을만든다고가정해보자(C로소스코드를작성한후콘솔에서실행하는방식)。그러면입력은수많은扫描(또는엔터입력필요없는비표준Getch)함수로,처리는항상절차적으로실행되는복잡한알고리즘으로,출력은아스키아트를이용한打印(그리고화면을지우는깜빡거리는Clear)함수로구성할수있다。하지만이렇게만든게임은구식이고,그래픽없는Cui고,끉겨보인다는단점이있다.이런식의게임을만드는것이질린다면,보통统一게임엔진이나虚幻게임엔진등게임엔진에도손을대보게된다。하지만,게임엔진은입문장벽이높다는단점이있다.복소수좌표를활용한공간상에서의충돌,机械/旧式애니메이션호환성,더좋은그래픽을위한더큰메모리/더빠른中央处理器…아무래도콘솔환경과게임엔진사이에는딜레마가있는것같다.이딜레마를해결할수있을까?

../../../../_images/introduction-PuyoPuyo1.png
 1import sys, pygame
 2pygame.init()
 3
 4size = width, height = 220, 140
 5speed = [2, 2]
 6black = 0, 0, 0
 7
 8screen = pygame.display.set_mode(size)
 9
10ball = pygame.image.load("introduction-PuyoPuyo.png")
11ballrect = ball.get_rect()
12
13while True:
14    for event in pygame.event.get():
15        if event.type == pygame.QUIT: sys.exit()
16
17    ballrect = ballrect.move(speed)
18    if ballrect.left < 0 or ballrect.right > width:
19        speed[0] = -speed[0]
20    if ballrect.top < 0 or ballrect.bottom > height:
21        speed[1] = -speed[1]
22
23    screen.fill(black)
24    screen.blit(ball, ballrect)
25    pygame.display.flip()

(C콘솔환경게임의예시-뿌요뿌요)

../../../../_images/introduction-TPS1.png
 1import sys, pygame
 2pygame.init()
 3
 4size = width, height = 220, 140
 5speed = [2, 2]
 6black = 0, 0, 0
 7
 8screen = pygame.display.set_mode(size)
 9
10ball = pygame.image.load("introduction-TPS.png")
11ballrect = ball.get_rect()
12
13while True:
14    for event in pygame.event.get():
15        if event.type == pygame.QUIT: sys.exit()
16
17    ballrect = ballrect.move(speed)
18    if ballrect.left < 0 or ballrect.right > width:
19        speed[0] = -speed[0]
20    if ballrect.top < 0 or ballrect.bottom > height:
21        speed[1] = -speed[1]
22
23    screen.fill(black)
24    screen.blit(ball, ballrect)
25    pygame.display.flip()

(유니티게임엔진게임의예시-TPS)

다행히파이게임은그딜레마를해결할수있다.파이게임이란프로그래머가게임을만들수있게해주는파이썬의외부라이브러리이다.파이게임은콘솔환경에서의장점을가지고있다.그첫째장점은하나의파이게임프로젝트은하나의소스코드와거의동치관계라는것이다.(외부소리파일이나외부사진파일을제외화면)그래서프로그래머는소스코드를작성하는것에만집중하면된다.그리고둘째장점은파이게임은툴이아닌라이브러리이기때문에,소스파일에“导入电子游戏”만있으면그소스파일은파이게임의모든것에접근할수있게된다。접근성이좋다는것이다.파이게임은게임엔진의장점도가지고있다.그첫째장점은파이게임이키보드,마우스,파일등의상태를확인하는입력관련함수들과,도형그리기,색칠하기,디스플레이설정등의출력관련함수들을제공하기때문에、Ci가아닌图形用户界面환경에서실행된다는것이다.그리고둘째장점은파이게임이파이썬에기반하였기때문에,파이게임의함수들은절차적이아닌이벤트적(여러함수들이선택적으로실행되거나거의동시에실행됨)으로실행된다는것이다.

../../../../_images/introduction-Battleship1.png
 1import sys, pygame
 2pygame.init()
 3
 4size = width, height = 220, 140
 5speed = [2, 2]
 6black = 0, 0, 0
 7
 8screen = pygame.display.set_mode(size)
 9
10ball = pygame.image.load("introduction-Battleship.png")
11ballrect = ball.get_rect()
12
13while True:
14    for event in pygame.event.get():
15        if event.type == pygame.QUIT: sys.exit()
16
17    ballrect = ballrect.move(speed)
18    if ballrect.left < 0 or ballrect.right > width:
19        speed[0] = -speed[0]
20    if ballrect.top < 0 or ballrect.bottom > height:
21        speed[1] = -speed[1]
22
23    screen.fill(black)
24    screen.blit(ball, ballrect)
25    pygame.display.flip()

(파이게임게임의예시-배틀십)

요약하자면,파이게임은저급수준(콘솔환경은예시중하나)의게임제작프로그램과고급수준(게임엔진은예시중하나)의게임제작프로그램의장점을모두가진다는것이다.파이게임은이둘사이의좋은연결점이된다.이것이파이게임을쓸이유이다.더복잡한게임엔진을최대한활용해게임을만드는1인개발자가목표가아닌이상(빨리그게임엔진을배우는것이낫다!),콘솔환경용게임이아닌더발전된환경에서게임을한번쯤은코딩해보고싶다면(물론,푹빠지면계속코딩하게될것이다!),한번쯤은파이게임을시도해볼만하다.




Edit on GitHub