로그라이크 관련 초유명 라이브러리로 libtcod가 있고,

이 라이브러리의 바인딩 라이브러리가 언어별로 존재하여 많이 쓰여져 왔다.

go에서도 libtcod-go라는 바인딩 패키지가 있다.


그런데 libtcod-go에는 약간의 문제점이 존재한다.


1. 바인딩 자체가 완벽하지 못하다.

몇가지 바인딩 되지 않은 기능, 혹은 go의 타기능으로 대체된 기능들이 존재한다.

libtcod-go의 문서가 따로 존재하지 않아 타언어용 문서를 참고해야 하기 때문에, 이 문제는 치명적일 수 있다.


2. 바인딩 패키지의 특성상 크로스-플랫폼 컴파일이 어렵다.

c코드를 바인딩해서 만들어졌기 때문에 컴파일시 cgo가 사용된다.

그런데 이 cgo는 크로스-플랫폼 컴파일시 아주 뭐같다.

불가능하지는 않으나 매우 괴롭다.


3. libtcod 자체가 크로스-플랫폼 컴파일을 어렵게 만든다.

libtcod는 미디어 출력을 위해 Simple DirectMedia Layer(SDL)을 사용한다.

SDL은 상당히 로우레벨로 제작되었기 때문에 플랫폼 의존성이 높다.


이로 인해 괴로워하다가 찾은 훌륭한 대안이 gorl이다.


gorl은 대부분의 기능이 서드파티 패키지 없이 독자적으로 작성되었다.

termbox-go라는 서드파티 콘솔 출력 패키지를 사용하기는 했고,

이것이 termbox라는 타언어 라이브러리를 이식한 거기는 하지만,

바인딩 패키지가 아닌 새로 구현하여 만든 패키지이다.

따라서 외부 언어와의 연결 고리가 없다.

그리고 go로만 작성된 패키지는 크로스-플랫폼 컴파일이 매우 쉽다.

리눅스에서 윈도우용, 맥용 바이너리를 컴파일하는데 아무런 문제가 없다.


현재 이 패키지는 협업이 아닌 1인 제작되고 있으며, 작성되기 시작한지 1년도 안 된 것으로 보인다.

하지만 99% 완성된 것으로 보이며, 이미 작성자 본인에 의해 이 패키지를 이용한 로그라이크가 작성되고 있다.

소스코드도 깔끔해서 별도의 문서 없이도 쉽게(?) 파악 가능하다.





결론 : 아직 많이 써본건 아니지만 강추!


gorl 패키지 주소 : gitlab.com/rauko1753/gorl

gorl로 작성되고 있는 로그라이크 주소 : gitlab.com/rauko1753/stones