見出し画像

まんから

今日はUnityにPhotonを追加して、オンラインの実装を試みた。チュートリアルやってみたけど、実際にゲームを動かす際は、なにをクライアントで動かして、なにをサーバ側にまかせるのかいまいち分からなかった。もうちょっと理解できたらコード書きます。

まんから

話は変わりますが、Nintendo Switchの「世界のアソビ大全51」というゲームがとっても面白いらしい。そのなかに「マンカラ」っていうゲームがあってそれについてのプログラムを昔書いたことがあったので載せておく。

まんからって?

まんからとは

マンカラ (mancala) は、アフリカや中近東、東南アジアにかけて古くから遊ばれている、伝統的な一群のゲーム(ボードゲーム)の総称である。ルールの異なる100種以上ものゲームが含まれるが、後述するように、他のボードゲームとは明確に区別される特徴を持つ。マンカラという言葉はアラビア語で「動かす」(نقل, naqala)を意味する動詞から派生した名詞 منقلة,manqala に由来する。西洋で広く知られているマンカラには、カラハ(Kalah)、オワリ(Oware /Owari /Awele)、コンカク(Congklak)、オムウェソ(Omweso)、バオ(Bao)[1]などという名のものがある。
(wikipedia引用)

らしい。簡単に言うと、とても古いボードゲームでたくさんの種類のゲームの総称でいっぱいやると賢くなれるゲームのこと。

プログラム

マンカラのなかでも、カードを動かして自分の場のカードをなくすゲームをPythonの学習初期に書いてみた。ぼくとしてはこのゲームをマンカラって呼んでたから、wikiの定義に従った場合、なんて呼んだらいいかわからない。以下コード。

import numpy as np

class Game:
       
   def visualize(self,field,turn_ing):
       print("-------------------------")
       print("    ",turn_ing[1])
       print(" ","a   b   c")
       print(" ",field[6]," ",field[5]," ",field[4])
       print(field[7],"         ",field[3])
       print(" ",field[0]," ",field[1]," ",field[2])
       print(" ","a   b   c")
       print("    ",turn_ing[0])
       print("-------------------------")


   def select(self,field,turn,turn_ing):
       select_number = 0
       print("player ",str(turn)," input one figure")

       while(True):
           input_figure = input()
           
           if turn == turn_ing[0]:  
               if input_figure == "a":
                   select_number = 0
               elif input_figure == "b":
                   select_number = 1 
               elif input_figure == "c":
                   select_number = 2
           else:
               if input_figure == "a":
                   select_number = 6
               elif input_figure == "b":
                   select_number = 5 
               elif input_figure == "c":
                   select_number = 4
                   
           if(field[select_number] != 0):
               return select_number
       
   def move_cards(self,field,select_number):
       card_numbers = field[select_number]
       
       move_numbers = np.arange(select_number+1,card_numbers + select_number+1,1)
       move_numbers_mod = move_numbers % 8
       
       field[select_number] = 0
       
       for i in move_numbers_mod:
           field[i] += 1
       
       return field,move_numbers_mod[card_numbers-1]        
           
   def turn_change(self,turn,turn_ing,end_number):
       if end_number == 3 or end_number == 7:
          return turn
       
       if turn == turn_ing[0]:
           return turn_ing[1]
       else:
           return turn_ing[0]
       
   def game_end(self,field,turn_ing):
       if np.sum(field[0:3]) == 0:
           return turn_ing[0]
       elif np.sum(field[4:7]) == 0:
           return turn_ing[1]
       else:
           return turn_ing[2]

class master:
   
   def __init__(self):
       self.instance = Game()
       self.field = np.ones(8).astype(np.int8)*3
       self.field[3] = 0
       self.field[7] = 0
       self.turn_ing = ["alpha","beta","continued"]
       self.turn = self.turn_ing[0]
       self.end = self.turn_ing[2]
       
   def start(self):
       while(self.end == "continued"):
           
           self.instance.visualize(self.field,self.turn_ing)
           select_number = self.instance.select(self.field,self.turn,self.turn_ing)
           self.field,end_number = self.instance.move_cards(self.field,select_number)
           self.turn = self.instance.turn_change(self.turn,self.turn_ing,end_number)
           self.end = self.instance.game_end(self.field,self.turn_ing)
           
       print("player ",self.end, "won")

master().start()

インターンで使ってたC#と違って、pythonは独学だったからいまいち綺麗な書き方がわかってないけど、これで動くはず。コンソール上で動くから暇な人は遊んでいただけると嬉しいです。

ルール

最後になりますが、ちょろっとルールの説明。
・1対1のボードゲーム
・各プレイヤーのフィールドに3箇所、自分と相手のフィールドの間に2箇所、計8箇所カードを置くスペースがある。
・最初各プレイヤーの場所、計6カ所に3枚ずつ、計18枚のカードが置かれる。
・自分のフィールドのカードをなくせば勝ち
・自分の手番でできることは、自分のフィールドを一つ選択すること。
・選んだフィールドのカードを1枚ずつ時計回りに配置してく。
・間のフィールドで配置が終わった際には、もう一回選択できる。

こんな感じですかね。結局このゲームはなんて呼ぶのでしょうか?




この記事が気に入ったらサポートをしてみませんか?