python學習筆記--趣學Python程式設計第十三章的例子

weixin_33858249發表於2017-11-11

彈球

由反彈球和球拍構成的遊戲。球會在螢幕上飛過來,玩家要用球拍把它彈回去

畫布和畫彈球

  • 引入模組
    #Tkinter -- Python的標準GUI庫,Tk 介面,是python 內建的安裝包
    from tkinter import *
    import random
    import time
  • 建立窗體
    #建立tk物件
    tk = Tk()
    #設定窗體標題
    tk.title("Game")
    #設定視窗不能調整,0,0 水平垂直方面都不能改變
    tk.resizable(0, 0)
    #視窗置頂
    tk.wm_attributes("-topmost",1)
    # Canvas提供可以用來進行繪圖的Container,支援基本的幾何元素,使用Canvas進行繪圖時,
    #所有的操作都是通過Canvas,不是通過它的元素
    canvas = Canvas(tk,width=500, height=400, bd=0, highlightthickness=0)
    #根據上面定的屬性來調整自己
    canvas.pack()
    #初始化
    tk.update()

    建立Ball類

    建立Ball類,它有兩個引數,一個是畫布,另一個是球的顏色 
    把畫布儲存到一個物件變數中,因為我們會在它上面畫球 
    在畫布上畫一個用顏色引數作為填充色的小球
    把tkinter畫小球時所返回的ID儲存起來,因為我們要用它移動螢幕上的小球

#建立Ball
class Ball:
    def __init__(self, canvas,color):
        self.canvas = canvas 
        self.id = canvas.create_oval(10,10,25,25,fill=color)
        self.canvas.move(self.id,245,100)
        #
        starts = [-3,-2,-1,1,2,3]
        random.shuffle(starts)
        self.x = starts[0]
        self.y = -3
        #取得當前畫布的大小
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width  = self.canvas.winfo_width()

    def draw(self):
      #新增移動:  move(id-物體,水平移動,垂直移動)
        self.canvas.move(self.id,self.x,self.y)
        pos = self.canvas.coords(self.id)
        if pos[1] <= 0:
            self.y = 3
        if pos[3] >= self.canvas_height:
            self.y = -3
        if pos[0] <= 0:
            self.x =3
        if pos[2] >= self.canvas_width:
            self.x = -3

主程式的程式碼分析:

while 1:
    ball.draw() #引入移動操作
    tk.update_idletasks() #和update 合作 讓tkinter快點把物體畫出來
    tk.update()
    time.sleep(0.05)
本文轉自孤舟夜航之家部落格51CTO部落格,原文連結http://blog.51cto.com/cysky/2049045如需轉載請自行聯絡原作者

cysky

相關文章