[Go] 고블렛 고블러스의 통신 게임을 만들어 보았다.

5021 단어 5게임cli

소개



굴 사용으로 고블렛 고브라즈라고 하는 보드 게임을 소개하고 있어 매우 재미있을 것 같았기 때문에, 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를 나눈 이유


  • 앞으로 인터페이스를 변경할 경우 인터페이스와 게임 로직을 즉시 분리할 수 있도록 하기 위해서입니다.
  • logic에서 사용하고 있는 모델을 cli에서도 이용할 수 있기 때문입니다.

  • 구현 설명



    약간의 구현을 설명합니다.
    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
  • 사용자 1이 방 만들기$ go run cli/cli.go -me tida -op yuname 옵션이 자신의 이름, op 옵션이 상대방의 이름을 입력합니다.
    그러면 방 ID가 지불됩니다. (ex a48dec12-2a25-4b61-ad60-95134fd93b24)
  • 사용자 2가 방에 참가$ 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

    좋은 웹페이지 즐겨찾기