見出し画像

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

いいなと思ったら応援しよう!