今年のバレンタインぐらいに放送されていた「頭脳王」で行われた考察ゲームを雑に作ったので誰か見てという話。(どうでもいい話だが, 優勝者は最近性欲に忠実なことが広まった〇ん〇ん)
ルールは簡単で、2人対戦型のボードゲームで、5×5の盤面とコマxが5個、コマoが5個与えられる。交互にコマを動かしていき次のどちらかを満たしたプレイヤーの勝ちとなる。
1:相手のコマを1つとる。
2:相手のコマすべてを動けなくする。
コマの移動についてだが、将棋の飛車のように縦と横に好きなだけ動かすことができる。ただしコマをすり抜けて動かすことはできない。
コマの取り方は、相手のコマを自分のコマで挟むだけである。ただし xox のように両隣を挟んだときのみ取ることができ, xooxのように挟んでもとることは出来ない。
また x . xという盤面があったときにoが自ら真ん中に入りに行く(つまりxoxの盤面を作りに行く)ときは挟まれたという判定をしないらしいので、それに従った。
ファイルここに貼って遊んでもらおうかと思ったけど、はてなブログにファイルのアップロードに仕方がわからないのでキレた。ソースコード貼るからそれで許して
sd = ['','','','','','',''] s0 = ['0','1','2','3','4','5',''] s1 = ['A','o','o','o','o','o',''] s2 = ['B','.','.','.','.','.',''] s3 = ['C','.','.','.','.','.',''] s4 = ['D','.','.','.','.','.',''] s5 = ['E','x','x','x','x','x',''] S = [sd,s0,s1,s2,s3,s4,s5,sd] alpha = ['A','B','C','D','E'] alpha = set(alpha) AN = {'A':2,'B':3,'C':4,'D':5,'E':6} dx = [1,0,-1,0] dy = [0,1,0,-1] print("ルール説明\n5x5の盤面(A1~E5)とコマxが5個, コマoが5個あります。\n全ての駒は縦横に好きなだけ動かすことができます。") print("ただしコマを通り抜けて動かすことはできません。\n交互にコマを動かしていき次のどちらかを満たしたプレイヤーの勝ちとなります。") print("1:相手のコマを一つでも取る\n2:相手のコマを全て動けなくする") print("相手のコマは自分のコマで挟むことでとることができます\n50ターン経過時に決着がついていなかった場合は引き分けとなります。") def output(i): print("") print(str(i)+"ターン目") for s in S: print(''.join(s)) def judge(): x_check = [] o_check = [] for i in range(7): for j in range(7): if S[i][j] == 'x': x_check.append((i,j)) elif S[i][j] == 'o': o_check.append((i,j)) if len(x_check) == 4: print("oを操作しているプレイヤーの勝ちです") exit() elif len(o_check) == 4: print("xを操作しているプレイヤーの勝ちです") exit() else: draw = 0 for y,x in x_check: for i in range(4): ny = y+dy[i] nx = x+dx[i] if S[ny][nx] == '.': draw = 1 if not draw: print("oを操作しているプレイヤーの勝ちです") exit() draw = 0 for y,x in o_check: for i in range(4): ny = y+dy[i] nx = x+dx[i] if S[ny][nx] == '.': draw = 1 if not draw: print("xを操作しているプレイヤーの勝ちです") exit() def move(a,b): flag = 1 output(game_turn) judge() print(a+"を動かすプレイヤーのターンです\n動かすコマと動かす位置を入力してください") while flag: start,goal = input().split() if start[0] not in alpha or goal[0] not in alpha : print(" \nerror\n盤面外を参照しています") else: sy = AN[start[0]] sx = int(start[1]) gy = AN[goal[0]] gx = int(goal[1]) if not (1<=sx<=5) or not (2<=sy<=6) or S[sy][sx] != a: print(" \nerror\nそこに動かせるコマはありません") elif not (1<=gx<=5) or not (2<=gy<=6) or S[gy][gx] != '.' or (sy != gy and sx != gx) or (sy == gy and sx == gx): print(" \nerror\nそのコマはそこには動かせません") elif sy == gy: tmp = 0 for i in range(min(sx,gx),max(sx,gx)+1): if S[sy][i] == '.': tmp += 1 if tmp != max(sx,gx)-min(sx,gx): print(" \nerror\nそのコマはそこには動かせません") else: flag = 0 elif sx == gx: tmp = 0 for i in range(min(sy,gy),max(sy,gy)+1): if S[i][sx] == '.': tmp += 1 if tmp != max(sy,gy)-min(sy,gy): print(" \nerror\nそのコマはそこには動かせません") else: flag = 0 else: flag = 0 S[sy][sx] = '.' S[gy][gx] = a if S[gy][gx+1] == b and S[gy][gx+2] == a: S[gy][gx+1] = '.' if S[gy][gx-1] == b and S[gy][gx-2] == a: S[gy][gx-1] = '.' if S[gy-1][gx] == b and S[gy-2][gx] == a: S[gy-1][gx] = '.' if S[gy+1][gx] == b and S[gy+2][gx] == a: S[gy+1][gx] = '.' game_turn = 1 while game_turn < 50: if game_turn%2 == 1: move('x','o') else: move('o','x') game_turn += 1 print("引き分けです") exit()
はじまりがこんな感じ
テレビでもちらっとしかやってなかったけど、あまり面白いゲームじゃないです。多分後攻は勝てません(引き分けに持ち込むしかない)