就業のためのPython学習3日目/将棋盤表示のコード
将棋盤を表示するコードを書いたら長くなりすぎてしまいました。
これを実行すると、将棋盤が表示されます。
打ちますか ?ときかれるので、yesを押すと、盤上どこにでも駒を置くことができます。相手方の駒はひらがなの頭文字になります。
駒を自由に移動することができますが、銀でも真横に動かすことができるので、(というよりもどこにでも移動することができる)まだ完成には程遠い感じですが、本を読みながら棋譜並べをすることができます。
この助長なコードを短く表現してみたいです。
banjyou = [
[16, 17, 18, 19, 20, 19, 18, 17, 16],
[0, 15, 0, 0, 0, 0, 0, 14, 0],
[13, 13, 13, 13, 13, 13, 13, 13, 13],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[3, 3, 3, 3, 3, 3, 3, 3, 3],
[0, 4, 0, 0, 0, 0, 0, 5, 0],
[6, 7, 8, 9, 10, 9, 8, 7, 6],
]
#koma = {3:'歩',4:'角',5:'飛',6:'香',7:'桂',8:'銀',9:'金',10:"玉"}
teban = True
def idou():
while True:
print("駒を動かします")
yoko = int(input("行数を選択してください"))
tate = int(input("列数を選択してください"))
tate -= 1
yoko = -yoko # 正しい符号に修正
if banjyou[tate][yoko] == 0:
print("そこは何もありません。")
elif banjyou[tate][yoko] == 3:
print("歩ですね良いですか?")
ques=input('歩ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=3
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 4:
print("角ですね")
ques=input('角ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=4
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 5:
print("飛車ですね")
ques=input('飛車ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=5
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 6:
print("香車ですね")
ques=input('香車ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=6
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 7:
print("桂馬ですね")
ques=input('桂馬ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=7
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 8:
print("銀ですね")
ques=input('銀ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=8
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 9:
print("金ですね")
ques=input('金ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=9
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 10:
print("玉ですね")
ques=input('玉ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=10
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 14:
print("相手の角ですね")
ques=input('相手の角ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=14
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 15:
print("相手の飛車ですね")
ques=input('相手の飛車ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=15
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 16:
print("相手の香車ですね")
ques=input('相手の飛車ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=16
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 17:
print("相手の桂馬ですね")
ques=input('相手の飛車ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=17
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 18:
print("相手の銀ですね")
ques=input('相手の銀ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=18
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 19:
print("相手の金ですね")
ques=input('相手の金ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=19
banjyou[tate][yoko]=0
break
elif banjyou[tate][yoko] == 20:
print("相手の玉ですね")
ques=input('相手の玉ですね良いですか?y/yes')
if ques=='y'or'yes':
print('動かす場所を教えてください')
idou_yoko = int(input("行数を選択してください"))
idou_tate = int(input("列数を選択してください"))
idou_tate -= 1
idou_yoko = -idou_yoko # 正しい符号に修正
banjyou[idou_tate][idou_yoko]=20
banjyou[tate][yoko]=0
break
def draw():
for row in banjyou:
for piece in row:
if piece == 0:
print(' ', end=' ')
elif piece == 3:
print('歩', end=' ')
elif piece == 4:
print('角', end=' ')
elif piece == 5:
print('飛', end=' ')
elif piece == 6:
print('香', end=' ')
elif piece == 7:
print('桂', end=' ')
elif piece == 8:
print('銀', end=' ')
elif piece == 9:
print('金', end=' ')
elif piece == 10:
print('玉', end=' ')
#相手のほう
elif piece == 13:
print('ふ', end=' ')
elif piece == 14:
print('か', end=' ')
elif piece == 15:
print('ひ', end=' ')
elif piece == 16:
print('き', end=' ')
elif piece == 17:
print('け', end=' ')
elif piece == 18:
print('ぎ', end=' ')
elif piece == 19:
print('き', end=' ')
elif piece == 20:
print('お', end=' ')
print() # 行の終わりで改行
def utu():
is_utu=input ("打ちますか?y/yes ")
if is_utu=='y'or is_utu=='yes':
utu_yoko = int(input("行数を選択してください"))
utu_tate = int(input("列数を選択してください"))
utu_koma= input("打つ駒を指定してください")
if utu_koma=='歩':
banjyou[utu_tate][utu_yoko]==3
elif utu_koma=='角':
banjyou[utu_tate][utu_yoko]==4
elif utu_koma=='飛':
banjyou[utu_tate][utu_yoko]==5
elif utu_koma=='香':
banjyou[utu_tate][utu_yoko]==6
elif utu_koma=='桂':
banjyou[utu_tate][utu_yoko]==7
elif utu_koma=='銀':
banjyou[utu_tate][utu_yoko]==8
elif utu_koma=='金':
banjyou[utu_tate][utu_yoko]==9
elif utu_koma=='玉':
banjyou[utu_tate][utu_yoko]==10
elif utu_koma=='ふ':
banjyou[utu_tate][utu_yoko]==13
elif utu_koma=='か':
banjyou[utu_tate][utu_yoko]==14
elif utu_koma=='ひ':
banjyou[utu_tate][utu_yoko]==15
elif utu_koma=='き':
banjyou[utu_tate][utu_yoko]==16
elif utu_koma=='け':
banjyou[utu_tate][utu_yoko]==17
elif utu_koma=='ぎ':
banjyou[utu_tate][utu_yoko]==18
elif utu_koma=='き':
banjyou[utu_tate][utu_yoko]==19
elif utu_koma=='お':
banjyou[utu_tate][utu_yoko]==20
utu_tate -= 1
utu_yoko = -utu_yoko
else:
print("打ちません")
if __name__ == '__main__':
print('///////////////////////////////////')
draw()
print('///////////////////////////////////')
while True:
if teban:
utu()
idou()
print('///////////////////////////////////')
draw()
#teban = False
print('///////////////////////////////////')
この記事が気に入ったらサポートをしてみませんか?