[Go] 고블렛 고블러스의 통신 게임을 만들어 보았다.
소개
굴 사용으로 고블렛 고브라즈라고 하는 보드 게임을 소개하고 있어 매우 재미있을 것 같았기 때문에, Go로 만들어 보기로 했습니다.
고블렛 고브라즈에 대해서는 이하의 기사가 알기 쉬웠습니다!
htps // 쿄헤이오미. 코 m / 보아 rd 가메 / 레코 멘다 치온 / 굿
완제품
기능
구성
server-client형으로 만들었습니다.
서버에 대해, 클라이언트가 폴링을 실시해 게임을 갱신해 갑니다.
인터페이스는 json을 사용합니다.
다음은 패키지 구성입니다.
├── cli // ゲームを実行するcliツール群です。
│ ├── cli.go
│ └── util
│ ├── app.go
│ ├── client.go
│ ├── control.go
│ ├── display.go
│ ├── display_util.go
│ ├── model.go
│ ├── screen.go
│ └── util.go
├── go.mod
├── go.sum
├── logic //ゲームのロジックをまとめたところです。
│ ├── board.go
│ ├── game.go
│ ├── piece.go
│ ├── player.go
│ ├── square.go
│ └── type.go
├── server // logicを使って、サーバを立てています
│ ├── handler.go
│ ├── model.go
│ └── server.go
└── web //clientがWebの場合も作る:未実装
logic과 server를 나눈 이유
구현 설명
약간의 구현을 설명합니다.
const P1 P = 1
const P2 P = -1
type Piece struct {
id uint
size Size
user P
}
type Square struct {
top int
pieces [3]*Piece
}
type Board [BOARD_MAX][BOARD_MAX]*Square
Piece는 크기와 사용자 정보를 제공합니다.
Square는 매스로, 매스에는 컷을 최대 3개까지 둘 수 있기 때문에, 매스의 상태를 차례로 유지해 둘 필요가 있습니다.
Board는, 이 매스가 지정한 개수 있습니다.
슬라이스가 아니고, 배열을 이용하는 것으로, 예상외의 처리는 panic가 되도록(듯이) 하고 있습니다.
이들에 메소드를 생성하고 게임 로직을 만듭니다.
자세한 코드는 아래를 참조하십시오.
게임 사용법
$ go run server/*.go
$ go run cli/cli.go -me tida -op yuna
me 옵션이 자신의 이름, op 옵션이 상대방의 이름을 입력합니다.그러면 방 ID가 지불됩니다. (ex a48dec12-2a25-4b61-ad60-95134fd93b24)
$ go run cli/cli.go -me yuna -room a48dec12-2a25-4b61-ad60-95134fd93b24
사용자 1이 만든 방의 방 ID와 자신의 사용자 이름을 입력합니다.그러면 게임이 시작됩니다.
덧붙여서, me 옵션으로 설정한 이름과 방이 작성되었을 때에 등록된 이름이 일치하지 않는 경우, 독자로서 게임을 볼 수 있습니다.
게임
턴마다 터미널에 컷의 배치를 해 갑니다.
``a,A,2 (a,A 매스에 크기 2의 컷을 놓는다)
미실장
WEB 버전
이번에는 termbox를 사용하고 싶고, cli를 사용했습니다만, 외형이 망설입니다.
브라우저에서도 할 수 있도록 하고 싶습니다. WebAssembly를 사용하면 로직 모델을 재사용 할 수 있으므로 편리 할 수 있습니다.
【Go】WebAssembly로 trend 표시해 보았다
오류 처리
cli의 오류 처리가 달콤합니다.
메모리 관리
게임이 끝난 후에는 게임 정보를 삭제하지 않으므로 항상 남아 있습니다.
다른 모든 것
서비스로 제공하려면 예외를 포함하여 고려하는 점이 아직 개미인 것 같습니다.
마지막으로
게임 작성은 예외가 많이 있기 때문에 고려해야 할 점이 많아서 힘들었습니다.
기존 구현의 추가 개수 해주는 사람은 꼭 풀릭 부탁드립니다 mm
Reference
이 문제에 관하여([Go] 고블렛 고블러스의 통신 게임을 만들어 보았다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ryoma0413/items/8fe396f4a2110548b934텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)