ボンバーマン(中2男子/作)
講師から一言
Pythonで記述したコード
import tkinter
import pygame
#変数定義
i=0 #爆弾の画像交互に表示するために使用
mx=1 #ボンバーマンのx座標
my=1 #ボンバーマンのy座標
mx2=0 #爆弾のx座標
my2=0 #爆弾のy座標
mx3=0 #二次元リストで更新用
my3=0 #二次元リストで更新用
key =""
フラグ=0 #フラグ
スコア=1 #敵をカウントする
#関数定義
def key_down(e):
global key
key= e.keysym
def key_up(e):
global key
key =""
def 爆弾():
global i,mx2,my2,フラグ
if フラグ==1:
canvas.delete("BOM")
canvas.create_image(mx2,my2,image=爆弾リスト[i],tag="BOM")
i = i + 1
i = i%2
root.after(400,爆弾)
def 消す(): #爆発画像を消す
canvas.delete("爆発1")
root.after(100,黒)
def 黒(): #二次元リスト上で3の所を焦跡にする
canvas.delete("爆発1")
for y in range(7):
for x in range(10):
if maze[y][x]==3:
canvas.create_image(x*80+40,y*80+40,image=焦跡,tag="焦跡")
def エンディング():
効果音_BGM.stop()
効果音_クリア.play()
canvas.delete("壁")
canvas.delete("BOM")
canvas.delete("焦跡")
canvas.delete("敵1")
canvas.delete("床")
canvas.delete("壁2")
canvas.delete("ボンバーマン")
canvas.create_image(400,280,image = クリア)
def ボンバーマン左歩行():
global i
i = i +1
i = i%2
canvas.delete("ボンバーマン")
canvas.create_image(mx*80+40,my*80+40,image=ボンバーマン左リスト[i],tag="ボンバーマン")
def ボンバーマン右歩行():
global i
i = i +1
i = i%2
canvas.delete("ボンバーマン")
canvas.create_image(mx*80+40,my*80+40,image=ボンバーマン右リスト[i],tag="ボンバーマン")
def ボンバーマン下歩行():
global i
i = i +1
i = i%2
canvas.delete("ボンバーマン")
canvas.create_image(mx*80+40,my*80+40,image=ボンバーマン下リスト[i],tag="ボンバーマン")
def ボンバーマン上歩行():
global i
i = i +1
i = i%2
canvas.delete("ボンバーマン")
canvas.create_image(mx*80+40,my*80+40,image=ボンバーマン上リスト[i],tag="ボンバーマン")
def 爆発():
global フラグ,maze
効果音_爆発.play()
canvas.delete("BOM1")
canvas.delete("BOM2")
フラグ=0
スコア=0
#基準になる点(二次元リストを変更して焦跡(3)にする)
maze[my3][mx3] =3
#爆弾の1つ右が壁(1)でなければ二次元リストを変更して焦跡(3)にする
if maze[my3][mx3+1] !=1:
maze[my3][mx3+1] =3
#爆弾の1つ右が壁(1)でなければ二次元リストを変更して焦跡(3)にする
if maze[my3][mx3-1] !=1:
maze[my3][mx3-1] =3
#爆弾の1つ上が壁(1)でなければ二次元リストを変更して焦跡(3)にする
if maze[my3+1][mx3] !=1:
maze[my3+1][mx3]=3
#爆弾の1つ下が壁(1)でなければ二次元リストを変更して焦跡(3)にする
if maze[my3-1][mx3] !=1:
maze[my3-1][mx3]=3
#2次元リスト上で2(敵)の数を数える。爆弾で消すと2(敵)が3(焦跡)に変わる。
for y in range(7):
for x in range(10):
if maze[y][x] == 2:
スコア= スコア+1
#2次元リスト上で3の所を爆発画像にする
for y in range(7):
for x in range(10):
if maze[y][x]==3:
canvas.create_image(mx2,my2,image = 爆発1,tag="爆発1")
canvas.create_image(mx2-80,my2,image = 爆発1,tag="爆発1")
canvas.create_image(mx2+80,my2,image = 爆発1,tag="爆発1")
canvas.create_image(mx2,my2+80,image = 爆発1,tag="爆発1")
canvas.create_image(mx2,my2-80,image = 爆発1,tag="爆発1")
#2次元リスト上で1の所を壁にする
for y in range(7):
for x in range(10):
if maze[y][x]==1:
canvas.create_image(x*80+40,y*80+40,image=壁,tag="壁")
#2次元リスト上で2の所を敵にする
if maze[y][x]==2:
canvas.create_image(x*80+40,y*80+40,image=敵,tag="敵1")
#二次元リストで2(敵)がすべてなくなったらエンディングを送る
if スコア==0:
root.after(100,黒)
root.after(500,エンディング)
else:
root.after(100,消す)
#メイン処理
def main_proc():
global mx,my,yuka,mx2,my2,フラグ,mx3,my3,maze,スコア
#「↑」キーが押されるかつ、1つ上が通路のとき
if key == "Up" and maze[my-1][mx]==0:
my = my - 1
効果音_足音.play()
ボンバーマン上歩行()
#「↓」キーが押されるかつ、1つ下が通路のとき
if key == "Down" and maze[my+1][mx]==0:
my = my + 1
効果音_足音.play()
ボンバーマン下歩行()
#「←」キーが押されるかつ、1つ左が通路のとき
if key =="Left" and maze[my][mx-1]==0:
mx = mx - 1
効果音_足音.play()
ボンバーマン左歩行()
#「→」キーが押されるかつ、1つ右が通路のとき
if key == "Right" and maze[my][mx+1]==0:
mx = mx + 1
効果音_足音.play()
ボンバーマン右歩行()
#「スペース」キーが押されたときの処理
if key == "space":
mx2=mx*80+40 #その時点のマウスのx座標をmx2に代入する(mx2は爆弾を配置するx座標)
my2=my*80+40 #その時点のマウスのy座標をmy2に代入する(my2は爆弾を配置するy座標)
mx3=mx #二次元リストの値を更新するために使用する
my3=my #二次元リストの値を更新するために使用する
フラグ=1 #フラグが1のときに爆弾の画像を入れ替えて、爆弾に動きをつける。
爆弾() #爆弾を配置する関数
root.after(2000,爆発) #配置した爆弾を2秒後に爆破させる
root.after(100,main_proc)
#画面作成
root=tkinter.Tk()
root.title("ボンバーマン")
root.resizable(False,False)
root.bind("",key_down)
root.bind("",key_up)
canvas = tkinter.Canvas(width=800,height=560,bg="white")
canvas.pack()
#効果音
pygame.init()
pygame.mixer.init()
効果音_爆発=pygame.mixer.Sound("sound\爆発.mp3")
効果音_BGM=pygame.mixer.Sound("sound\BGM.wav")
効果音_足音=pygame.mixer.Sound("sound\足音.wav")
効果音_クリア=pygame.mixer.Sound("sound\クリア.wav")
#BGM
効果音_BGM.play(-1)
#画像のアップロード
ボンバーマン下1 = tkinter.PhotoImage(file="image\ボンバーマン下1.png")
ボンバーマン下2 = tkinter.PhotoImage(file="image\ボンバーマン下2.png")
ボンバーマン上1 = tkinter.PhotoImage(file="image\ボンバーマン上1.png")
ボンバーマン上2 = tkinter.PhotoImage(file="image\ボンバーマン上2.png")
ボンバーマン左1 = tkinter.PhotoImage(file="image\ボンバーマン左1.png")
ボンバーマン左2 = tkinter.PhotoImage(file="image\ボンバーマン左2.png")
ボンバーマン右1 = tkinter.PhotoImage(file="image\ボンバーマン右1.png")
ボンバーマン右2 = tkinter.PhotoImage(file="image\ボンバーマン右2.png")
爆弾1 = tkinter.PhotoImage(file="image\爆弾1.png")
爆弾2 = tkinter.PhotoImage(file="image\爆弾2.png")
爆発1 = tkinter.PhotoImage(file="image\爆発1.png")
クリア = tkinter.PhotoImage(file="image\クリア.png")
敵 = tkinter.PhotoImage(file="image\敵.png")
壁 = tkinter.PhotoImage(file="image\壁.png")
壁2 = tkinter.PhotoImage(file="image\壁2.png")
床 = tkinter.PhotoImage(file="image\床.png")
焦跡 = tkinter.PhotoImage(file="image\焦げ跡.png")
#爆弾リスト※爆弾を大きくしたり、小さくしたりする時に使用
爆弾リスト=[爆弾1,爆弾2]
ボンバーマン左リスト=[ボンバーマン左1,ボンバーマン左2]
ボンバーマン右リスト=[ボンバーマン右1,ボンバーマン右2]
ボンバーマン下リスト=[ボンバーマン下1,ボンバーマン下2]
ボンバーマン上リスト=[ボンバーマン上1,ボンバーマン上2]
#二次元リストで迷路の定義(0:床、1:壁、2:敵、3:焦げ跡、4:壁2)
maze = [
[1,1,1,1,1,1,1,1,1,1],
[1,0,2,0,2,0,0,0,0,1],
[1,0,4,0,0,4,0,0,2,1],
[1,0,0,0,0,0,0,0,2,1],
[1,0,0,0,4,0,4,0,2,1],
[1,0,2,0,2,0,0,0,0,1],
[1,1,1,1,1,1,1,1,1,1]
]
#迷路の描画(最初の1回目)
for y in range(7):
for x in range(10):
if maze[y][x]==0 or maze[y][x]==2 or maze[y][x]==4 or maze[y][x]==1:
canvas.create_image(x*80+40,y*80+40,image=床,tag="床")
if maze[y][x]==1:
canvas.create_image(x*80+40,y*80+40,image=壁,tag="壁")
if maze[y][x]==2:
canvas.create_image(x*80+40,y*80+40,image=敵,tag="敵1")
if maze[y][x]==4:
canvas.create_image(x*80+40,y*80+40,image=壁2,tag="壁2")
#ボンバーマンの描画
canvas.create_image(mx*80+40,my*80+40,image=ボンバーマン下1,tag="ボンバーマン")
#メインプロセスの呼び出し
main_proc()
#ループ処理
root.mainloop()