欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python tkinter Canvas繪制動畫桌面彈球游戲

系統 1875 0

其實前面程序中的高亮顯示已經是動畫效果了。程序會用紅色、黃色交替顯示幾何圖形的邊框,這樣看上去就是動畫效果了。實現其他動畫效果也是這個原理,程序只要增加一個定時器,周期性地改變界面上圖形項的顏色、大小、位置等選項,用戶看上去就是所謂的“動畫”了。

下面以一個簡單的桌面彈球游戲來介紹使用 Canvas 繪制動畫。在游戲界面上會有一個小球,該小球會在界面上滾動,遇到邊界或用戶擋板就會反彈。該程序涉及兩個動畫:

  • 小球轉動:小球轉動是一個“逐幀動畫”,程序會循環顯示多張轉動的小球圖片,這樣用戶就會看到小球轉動的效果。
  • 小球移動:只要改變小球的坐標程序就可以控制小球移動。


為了讓用戶控制擋板移動,程序還為 Canvas 的向左箭頭、向右箭頭綁定了事件處理函數。下面是桌面彈球游戲的程序:

            ?
          
  1. from tkinter import *
  2. from tkinter import messagebox
  3. import threading
  4. import random
  5. GAME_WIDTH = 500
  6. GAME_HEIGHT = 680
  7. BOARD_X = 230
  8. BOARD_Y = 600
  9. BOARD_WIDTH = 80
  10. BALL_RADIUS = 9
  11. class App:
  12. def __init__(self, master):
  13. self.master = master
  14. # 記錄小球動畫的第幾幀
  15. self.ball_index = 0
  16. # 記錄游戲是否失敗的旗標
  17. self.is_lose = False
  18. # 初始化記錄小球位置的變量
  19. self.curx = 260
  20. self.cury = 30
  21. self.boardx = BOARD_X
  22. self.init_widgets()
  23. self.vx = random.randint(3, 6) # x方向的速度
  24. self.vy = random.randint(5, 10) # y方向的速度
  25. # 通過定時器指定0.1秒之后執行moveball函數
  26. self.t = threading.Timer(0.1, self.moveball)
  27. self.t.start()
  28. # 創建界面組件
  29. def init_widgets(self):
  30. self.cv = Canvas(root, background='white',
  31. width=GAME_WIDTH, height=GAME_HEIGHT)
  32. self.cv.pack()
  33. # 讓畫布得到焦點,從而可以響應按鍵事件
  34. self.cv.focus_set()
  35. self.cv.bms = []
  36. # 初始化小球的動畫幀
  37. for i in range(8):
  38. self.cv.bms.append(PhotoImage(file='images/ball_' + str(i+1) + '.gif'))
  39. # 繪制小球
  40. self.ball = self.cv.create_image(self.curx, self.cury,
  41. image=self.cv.bms[self.ball_index])
  42. self.board = self.cv.create_rectangle(BOARD_X, BOARD_Y,
  43. BOARD_X + BOARD_WIDTH, BOARD_Y + 20, width=0, fill='lightblue')
  44. # 為向左箭頭按鍵綁定事件,擋板左移
  45. self.cv.bind(' ', self.move_left)
  46. # 為向右箭頭按鍵綁定事件,擋板右移
  47. self.cv.bind(' ', self.move_right)
  48. def move_left(self, event):
  49. if self.boardx <= 0:
  50. return
  51. self.boardx -= 5
  52. self.cv.coords(self.board, self.boardx, BOARD_Y,
  53. self.boardx + BOARD_WIDTH, BOARD_Y + 20)
  54. def move_right(self, event):
  55. if self.boardx + BOARD_WIDTH >= GAME_WIDTH:
  56. return
  57. self.boardx += 5
  58. self.cv.coords(self.board, self.boardx, BOARD_Y,
  59. self.boardx + BOARD_WIDTH, BOARD_Y + 20)
  60. def moveball(self):
  61. self.curx += self.vx
  62. self.cury += self.vy
  63. # 小球到了右邊墻壁,轉向
  64. if self.curx + BALL_RADIUS >= GAME_WIDTH:
  65. self.vx = -self.vx
  66. # 小球到了左邊墻壁,轉向
  67. if self.curx - BALL_RADIUS <= 0:
  68. self.vx = -self.vx
  69. # 小球到了上邊墻壁,轉向
  70. if self.cury - BALL_RADIUS <= 0:
  71. self.vy = -self.vy
  72. # 小球到了擋板處
  73. if self.cury + BALL_RADIUS >= BOARD_Y:
  74. # 如果在擋板范圍內
  75. if self.boardx <= self.curx <= (self.boardx + BOARD_WIDTH):
  76. self.vy = -self.vy
  77. else:
  78. messagebox.showinfo(title='失敗', message='您已經輸了')
  79. self.is_lose = True
  80. self.cv.coords(self.ball, self.curx, self.cury)
  81. self.ball_index += 1
  82. self.cv.itemconfig(self.ball, image=self.cv.bms[self.ball_index % 8])
  83. # 如果游戲還未失敗,讓定時器繼續執行
  84. if not self.is_lose:
  85. # 通過定時器指定0.1秒之后執行moveball函數
  86. self.t = threading.Timer(0.1, self.moveball)
  87. self.t.start()
  88. root = Tk()
  89. root.title("彈球游戲")
  90. root.iconbitmap('images/fklogo.ico')
  91. root.geometry('%dx%d' % (GAME_WIDTH, GAME_HEIGHT))
  92. # 禁止改變窗口大小
  93. root.resizable(width=False, height=False)
  94. App(root)
  95. root.mainloop()

上面程序中第 26、27 行代碼通過線程啟動了一個定時器,該定時器控制 moveball() 方法每隔 0.1 秒執行一次,而 moveball() 方法中通過改變小球的坐標可以實現小球移動的效果;通過改變小球的圖片,可以實現小球滾動的效果。

運行上面程序,可以看到如圖 1 所示的游戲效果:


Python tkinter Canvas繪制動畫桌面彈球游戲_第1張圖片
圖 1 桌面彈球游戲


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久中文视频 | 国产成人免费永久播放视频平台 | 亚洲精品久久久久一区二区三 | 国产欧美一区二区 | 九色亚洲 | 草莓福利视频 | 久久精品.com | 成人免费网视频 | 久久久精品一区二区三区 | 韩国美女激情视频一区二区 | 国产一级毛片视频 | 狠狠草视频 | 99视频网站| 色屁屁www影院免费观看软件 | 欧美精品一区二区免费 | 色偷偷影院 | 久久国产精品久久精品国产 | 久久亚洲热| 色中色在线视频 | 羞羞视频在线免费 | 精品小视频在线观看 | 国产精品久久久久久久久软件 | 亚洲综合首页 | 久久久99精品免费观看 | 色综合久久综合欧美综合图片 | 日本v片做爰免费视频网站 国产精品v欧美精品v日韩精品 | www.4hu影院 | 久久久9999久久精品小说 | 国产精品国产午夜免费福利看 | 久久大胆视频 | 欧美日一区 | 2021最新国产成人精品视频 | 国产女人与拘做受视频 | 成人午夜性视频欧美成人 | 天天天天天操 | 国产高清在线观看 | 欧美a级成人淫片免费看 | 亚洲成人午夜在线 | 国产成人精品免费视频大 | 国产人成精品 | 国产精品蜜芽在线观看 |