Python 入門指南 5.0

exercise4410.py

  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
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# 從 Brython 引入 document 並以 doc 為別名
from browser import document as doc
# 從 Brython 引入 window
from browser import window
# 引入 Point 定義
from exercise1810 import Point
# 引入 Lion 定義
from exercise1812 import Lion
# 引入 Elephant 定義
from exercise2901 import Elephant
# 引入 Cat 定義
from exercise2902 import Cat
# 引入 Mouse 定義
from exercise2903 import Mouse
# 引入 move() 定義
from exercise2807 import move
# 引入 bound_check() 定義
from exercise2605 import bound_check
# 引入 animal_check() 定義
from exercise2809 import animal_check
# 引入 get_world_string() 定義
from exercise2906 import get_world_string
# 從 random 引入 randint
from random import randint
# 從 random 引入 choice
from random import choice

# 遊戲資料
user = Mouse(Point(3,0), "鼠")
animals = {}
animals["鼠"] = user
animals["象"] = Elephant(Point(0,0), "象")
animals["獅"] = Lion(Point(0,3), "獅")
animals["貓"] = Cat(Point(3,3), "貓")
world = [["口", "口", "口", "口"],
         ["口", "口", "口", "口"],
         ["口", "口", "口", "口"],
         ["口", "口", "口", "口"]]

# 印出鬥獸棋棋盤
def print_world(animals_list, world):
    doc["display"].clear()
    temp_list = get_world_string(animals_list, world).split("\n")
    for temp in temp_list:
        d = doc.createElement("div")
        d.style.border = "none"
        d.style.padding = "0"
        d.style.margin = "0"
        d.style.fontSize = "3em"
        d.text = temp
        doc["display"] <= d

# 初始設定
doc["button_up"].disabled = True
doc["button_left"].disabled = True
doc["button_right"].disabled = True
doc["button_down"].disabled = True
print_world(list(animals.values()), world)

# 進行動物移動
def animal_move(d, animal):
    # 宣告全域變數
    global animals, world
    # 進行移動
    if bound_check(animal, d, world):
        other = animal_check(animal, list(animals.values()), d, world)
        if other == "口":
            move(animal, d)
        else:
            if other in animal.food:
                animals.pop(other)
                move(animal, d)
            else:
                animals.pop(animal.name)
                if animal == user:
                    end_game()
    # 印出地圖
    print_world(list(animals.values()), world)

# 進行按鈕上
def method_up(event):
    animal_move("up", user)

# 進行按鈕下
def method_down(event):
    animal_move("down", user)

# 進行按鈕左
def method_left(event):
    animal_move("left", user)

# 進行按鈕右
def method_right(event):
    animal_move("right", user)

# 啟動遊戲
def start_game(event):
    doc["button_up"].disabled = False
    doc["button_left"].disabled = False
    doc["button_right"].disabled = False
    doc["button_down"].disabled = False
    doc["run"].disabled = True

def animals_move():
    def animate_animals():
        global animals, world
        direction = ["up", "down", "right", "left"]
        animal = choice(list(animals.values()))
        if animal == user:
            pass
        else:
            animal_move(direction[randint(0, 3)], animal)
        print_world(list(animals.values()), world)
        if len(animals) == 1:
            window.clearInterval(animate_id)
            end_game()
    animate_id = window.setInterval(animate_animals, 400)

# 結束遊戲
def end_game():
    doc["run"].disabled = False
    doc["button_up"].disabled = True
    doc["button_left"].disabled = True
    doc["button_right"].disabled = True
    doc["button_down"].disabled = True

# 啟動遊戲
def start_game(event):
    global user, animals
    user = Mouse(Point(3,0), "鼠")
    animals = {}
    animals["鼠"] = user
    animals["象"] = Elephant(Point(0,0), "象")
    animals["獅"] = Lion(Point(0,3), "獅")
    animals["貓"] = Cat(Point(3,3), "貓")
    doc["button_up"].disabled = False
    doc["button_left"].disabled = False
    doc["button_right"].disabled = False
    doc["button_down"].disabled = False
    doc["run"].disabled = True
    animals_move()

# 按鈕註冊事件
doc["button_up"].bind("click", method_up)
doc["button_down"].bind("click", method_down)
doc["button_left"].bind("click", method_left)
doc["button_right"].bind("click", method_right)
doc["run"].bind("click", start_game)

# 檔名: exercise4410.py
# 說明:《Python入門指南》的練習
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 12 月

回到練習題目
上一頁 exercise4409.py
回 Python 入門指南 5.0 首頁
回 Python 教材首頁
回程式語言教材首頁