Python 新手村
用 Python 打造你的遊戲
2020
小草、RexWu
Part 6
ctl12345
前情提要
def greet(name):
print("Hello, " + str(name))
# main
n = input("請告訴我你的名字")
greet(n)
Greet again!
try:
x = int(input('請輸入 x :'))
y = int(input('請輸入 y :'))
print(x + y)
except:
print('輸入錯誤 請輸入整數')
所以要處理例外狀況
使用 「try」和 「except」
class
物件 - 概念
什麼是 "class"
物件
一位玩家
屬性
-
HP
-
ATK
-
DEF
-
背包
一位玩家
功能
-
攻擊
-
防禦
-
補血
-
撿東西
class
物件 - 實作
python 呈現物件
class 物件名稱:
建構
函數1
函數2
...
class Player:
def __init__(self, hp, atk, def_):
self.hp = hp
self.atk = atk
self.def_ = def_
def attack(self, target):
target.hp = target.def_ - self.atk
def greet(self):
print("Player 說:早安我的朋友!")
簡單的 Player 物件
init "初始化"
def __init__(self, hp, atk, def_):
物件本體
參數們
init "初始化"
self.hp = hp
self.atk = atk
self.def_ = def_
設定玩家的 hp
設定玩家的 atk
設定玩家的 def
辣個 self.xxx
取得物件本身的值
e.g.
self.hp -> 取得該物件的 hp 變數
Player1 = Player(10, 5, 2)
# 新增一個 hp = 10 atk = 5 def_ = 2 的玩家
Player2 = Player(20, 10, 5)
# 新增一個 hp = 20 atk = 10 def_ = 5 的玩家
新增 Player
取得物件的值
player1 = Player(10, 5, 2)
# 新增一個 hp = 10 atk = 5 def_ = 2 的玩家
player2 = Player(20, 10, 5)
# 新增一個 hp = 20 atk = 10 def_ = 5 的玩家
print(player1.hp) # 顯示 player1 的 hp
print(player2.hp) # 顯示 player2 的 hp
其實很像辣個
self.xxx
只是變成
物件變數.xxx
實作一下剛剛的 Player
並新增一個可以 print 出玩家 hp的函數
以及在初始化時,加入玩家名稱
取得物件的值 cont’d.
你可以這麼做
print (player1.hp)
Why
def getHp(self):
print(self.hp)
因為
player1.getHp() 直覺很多
而且
在定義物件外直接取值不是一個好習慣
class Player:
def __init__(self, hp, atk, def_):
self.hp = hp
self.atk = atk
self.def_ = def_
def attack(self, target):
target.hp = target.def_ - self.atk
def greet(self):
print("Player 說:早安我的朋友!")
關於那個 attack
傳入一個物件,並修改他的值
function 一樣可以回傳
class Player:
# 略過上面的東西
def getHpVal(self):
return self.hp
GUI
終於看得到惹
GUI
Graphical User Interface
CLI
Command Line Interface
Python's easiest GUI
Tkinter
import tkinter as tk
window = tk.Tk()
msg = tk.Label(master=window, text="你好!")
msg.pack()
window.mainloop()
簡單的視窗
import tkinter as tk
window = tk.Tk()
window.geometry("500x500")
msg = tk.Label(master=window, text="你好!")
msg.pack()
window.mainloop()
簡單的視窗(指定大小)
import tkinter as tk
window = tk.Tk()
window.geometry("500x500")
msg = tk.Label(master=window, text="你好!")
msg.pack()
window.mainloop()
文字標籤
import tkinter as tk
window = tk.Tk()
def clk():
print("尼亂按 ><")
btn = tk.Button(master=window, text="按我!", command=clk)
msg.pack()
window.mainloop()
按鈕
import tkinter as tk
window = tk.Tk()
def clk():
btn["text"] = "不要亂按 ><"
btn = tk.Button(master=window, text="按我!", command=clk)
btn.pack()
window.mainloop()
變更元件文字
frame
frame - side
import tkinter as tk
window = tk.Tk()
window.geometry("300x300")
label0 = tk.Label(text="我在最上面!")
label0.pack(side = tk.TOP)
label3 = tk.Label(text="我在左邊 ( ~'ω')~ ")
label3.pack(side = tk.LEFT)
label4 = tk.Label(text=" ~('ω'~ ) 窩在右邊")
label4.pack(side = tk.RIGHT)
window.mainloop()
frame - grid
import tkinter as tk
window = tk.Tk()
window.geometry("500x500")
frame = tk.Frame()
frame.grid(row=0, column=0)
label = tk.Label(master=frame, text="左上角")
label.pack()
frame = tk.Frame()
frame.grid(row=1, column=1)
label = tk.Label(master=frame, text="右下角")
label.pack()
window.mainloop()
frame - grid 結合迴圈
import tkinter as tk
window = tk.Tk()
window.geometry("500x500")
def clk():
print("不要亂按><")
for i in range(3):
for j in range(3):
frame = tk.Frame()
frame.grid(row=i, column=j)
btn = tk.Button(master=frame, text=str(i) + str(j), width=5, command=clk)
btn.pack()
window.mainloop()
九宮格的話...上禮拜的OOXX?
開始挑戰前
你會需要一個技能
小弟我在此授與這個技能給各位
剛剛的
import tkinter as tk
window = tk.Tk()
window.geometry("500x500")
def clk():
print("不要亂按><")
for i in range(3):
for j in range(3):
frame = tk.Frame()
frame.grid(row=i, column=j)
btn = tk.Button(master=frame, text=str(i) + str(j), width=5, command=clk)
btn.pack()
window.mainloop()
按鈕好多 怎麼知道誰是誰?
functools 套件
from functools import partial
def f(x, y):
return x * y
# 將參數"凍結"
f = partial(f, 10, 10)
print(f())
凍結住 command 的參數
for i in range(3):
for j in range(3):
frame = tk.Frame()
frame.grid(row=i, column=j)
btn = tk.Button(master=frame,
text=str(i) + str(j),
width=10,
height=10,
command=partial(clk, i, j)
)
btn.pack()
這樣還不夠喔!
( ゚Д゚#)
需要一個方法把按鈕記起來
ζ*'ヮ')ζ
有按鈕座標了 但是
用 list 吧
使用 2D List 記住 gird 元件
btnAry = []
for i in range(3):
row = []
for j in range(3):
frame = tk.Frame()
frame.grid(row=i, column=j)
btn = tk.Button( # 後面省略....
row.append(btn)
btn.pack()
btnAry.append(row)
開始挑戰吧!
還有更多 gui 教學
期待下次見面 ( ~'ω')~
下課囉~
來點個名
1514
Copy of Python 新手村 2020 Part 6
By Rex Wu
Copy of Python 新手村 2020 Part 6
- 71