
pythonでbingo25ゲームを作りました
bingo25ゲームとは
二人で行うゲームです。
紙と鉛筆を用意します。
紙に5×5の升目を書き、升目にランダムに1~25までの数字を書きます。
お互いに数字を言い合っていくのですが、自分が言った数字には×を付け相手が言った数字に〇を付けていきます。
最初に縦か横か斜めに〇が並べは勝ちです。
リーチになったら、もう一回相手に数字を言ってもらいます。
と言った感じです。
僕は、このゲームに中学生の時ハマりました。
プログラムには、いつものごとくエラー処理も例外処理も全くありません。
コンピュータは乱数のみで処理しますが、結構手ごわいです。
#bingo25
import random
def disp(z):
for i in range(0,5):
for j in range(0,5):
if z[i][j]==0:
ss=" \033[34mO\033[0m"
elif z[i][j]==99:
ss=" \033[31mX\033[0m"
else:
if z[i][j]<10:
ss=" "+str(z[i][j])
else:
ss=str(z[i][j])
print(" "+ss ,end="")
print()
def hantei(z,reach,yoko,tate,naname):
reach[0]=False
for i in range(0,5):
cc=0
for j in range(0,5):
if z[i][j]==0:
cc=cc+1
elif z[i][j]==99:
cc=0
break
if cc==5:
return True
else:
if cc==4:
if yoko[i]==1:
yoko[i]=0
reach[0]=True
for i in range(0,5):
cc=0
for j in range(0,5):
if z[j][i]==0:
cc=cc+1
elif z[j][i]==99:
cc=0
break
if cc==5:
return True
else:
if cc==4:
if tate[i]==1:
tate[i]=0
reach[0]=True
cc=0
for i in range(0,5):
if z[i][i]==0:
cc=cc+1
elif z[i][i]==99:
cc=0
break
if cc==5:
return True
else:
if cc==4:
if naname[0]==1:
naname[0]=0
reach[0]=True
cc=0
for i in range(0,5):
if z[i][4-i]==0:
cc=cc+1
elif z[i][4-i]==99:
cc=0
break
if cc==5:
return True
else:
if cc==4:
if naname[1]==1:
naname[1]=0
reach[0]=True
return False
yoko1=[1,1,1,1,1]
tate1=[1,1,1,1,1]
naname1=[1,1]
yoko2=[1,1,1,1,1]
tate2=[1,1,1,1,1]
naname2=[1,1]
reach=[False]
a=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]
b=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]
num=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
for i in range(100):
x1=random.randint(0,4)
y1=random.randint(0,4)
x2=random.randint(0,4)
y2=random.randint(0,4)
w=a[x1][y1]
a[x1][y1]=a[x2][y2]
a[x2][y2]=w
for i in range(100):
x1=random.randint(0,4)
y1=random.randint(0,4)
x2=random.randint(0,4)
y2=random.randint(0,4)
w=b[x1][y1]
b[x1][y1]=b[x2][y2]
b[x2][y2]=w
disp(a)
#print(a)
#print(b)
count=0
nnn=0
while(True):
print(count-nnn+1)
if count%2==0:
n=int(input("YOU:n="))
num.remove(n)
else:
n=num[random.randint(0,len(num)-1)]
num.remove(n)
print("COM:n=",n)
flag=False
for i1 in range(0,5):
for j1 in range(0,5):
if a[i1][j1]==n:
ii1=i1
jj1=j1
flag=True
break
if flag==True:
break
flag=False
for i2 in range(0,5):
for j2 in range(0,5):
if b[i2][j2]==n:
ii2=i2
jj2=j2
flag=True
break
if flag==True:
break
if count%2==0:
a[ii1][jj1]=99
b[ii2][jj2]=0
f=hantei(b,reach,yoko2,tate2,naname2)
if f==True:
print("COM WIN")
disp(b)
break
else:
if reach[0]==True:
print("REACH")
count=count+1
nnn=nnn+1
else:
a[ii1][jj1]=0
b[ii2][jj2]=99
f=hantei(a,reach,yoko1,tate1,naname1)
if f==True:
print("YOU WIN")
disp(a)
break
else:
if reach[0]==True:
print("REACH")
count=count+1
nnn=nnn+1
count=count+1
if count==25+nnn:
print("DRAW")
break
# print(count-nnn)
disp(a)
# print(a)
# print(b)
# print(num)
出力結果
1 25 18 9 14
19 23 16 10 8
6 13 11 21 15
2 3 24 20 7
22 5 17 4 12
1
YOU:n=25
1 X 18 9 14
19 23 16 10 8
6 13 11 21 15
2 3 24 20 7
22 5 17 4 12
2
COM:n= 8
1 X 18 9 14
19 23 16 10 O
6 13 11 21 15
2 3 24 20 7
22 5 17 4 12
3
YOU:n=18
1 X X 9 14
19 23 16 10 O
6 13 11 21 15
2 3 24 20 7
22 5 17 4 12
4
COM:n= 17
1 X X 9 14
19 23 16 10 O
6 13 11 21 15
2 3 24 20 7
22 5 O 4 12
5
YOU:n=9
1 X X X 14
19 23 16 10 O
6 13 11 21 15
2 3 24 20 7
22 5 O 4 12
6
COM:n= 22
1 X X X 14
19 23 16 10 O
6 13 11 21 15
2 3 24 20 7
O 5 O 4 12
7
YOU:n=23
1 X X X 14
19 X 16 10 O
6 13 11 21 15
2 3 24 20 7
O 5 O 4 12
8
COM:n= 4
1 X X X 14
19 X 16 10 O
6 13 11 21 15
2 3 24 20 7
O 5 O O 12
9
YOU:n=16
1 X X X 14
19 X X 10 O
6 13 11 21 15
2 3 24 20 7
O 5 O O 12
10
COM:n= 12
REACH
1 X X X 14
19 X X 10 O
6 13 11 21 15
2 3 24 20 7
O 5 O O O
11
COM:n= 5
YOU WIN
1 X X X 14
19 X X 10 O
6 13 11 21 15
2 3 24 20 7
O O O O O