NCurses 기반 Space Invader 게임을 웹으로 포팅하기

지난번 PacVim 포팅1http://andrwj.com/post/2019/09/porting-pacvim-with-emscripten/ 실패후에 찝찝함이 남아서 다른 패키지를 포팅해보았다.  흔해빠진 Invader 게임인데 ncurses 기반이다. 2http://ninvaders.sourceforge.net/ 둘다 ncurses v6.1 이지만 이번 nInvader 게임은 PacVim 보다 화면제어가 잘되고 있다. 그러나 역시나 어쩔 수 없는 점도 많이 보인다.

 

 

nInvaders 게임 코드 수정사항

1  pthread를 사용하지 않기 때문에 간단히 window.requestAnimationFrame()를 사용해서 브라우저가 뻗지 않도록 적절하게 업데이트하게 했다. iTerm2 에서 동작할 때와 별반 다른 점을 찾기 힘들정도로 부드럽게 움직였다. (뭐 당연한 얘기)

2  역시나 main()exit() 을 업애버리고 시작과 종료를 적절히 웹에서 조절하게 했다. 

3  장애물이 이상하게 표시되고 미사일 발사 주변이 말려올라가고 … 등등은 iTerm2에서 실행할 때는 전혀 문제없다. PacVim에서보다 훨씬 화면 제어가 잘되는 걸로 봐서 xterm.js에서 제대로 표시하려면 특정 ncurses API를 WebAssembly로 변환된 후의 상황을 고려해서 보정해줘야하는게 있다고 추측한다. 그게 뭔지 알려면 시간이 필요할 뿐이다. xterm.js 에는 문제가 없는 것 같다. (여전히 추측)

4  종료후 GPL 라이센스 출력을 하지 않게했다. 

5  ‘q’를 눌러도 exit() 하지 않고 다시 게임 대기화면으로 돌아가게 했다.

 

 

별 수정을 가하지 않아도 제대로 포팅되는 ncurses 기반 프로젝트를 발견할 때까지 쉬엄 쉬엄 포팅을 해볼 요량이다. 더불어 xterm.js 를 Client/Server 방식으로 돌려보며 문제해결채을 찾게되면 다시 업데이트 할 예정. 

References   [ + ]