2014 年春天開始,我在 機率與統計 課程中,加入 Python 程式設計的簡介,算是輔助機率與統計課程的學習。
到期末時,我帶學生們用 Pygame 來寫一個有聲光效果的遊戲,我以 Al Sweigart
這批程式,最大的特色是:
這將使得程式設計的語言障礙可以打破,
進而利於 普及程式教育。
ryCopy: 92 則留言:
import pygame, sys, random
from pygame.locals import *
# Create the constants (go ahead and experiment with different values)
行數 = 4
列數 = 4
方塊尺寸 = 80
視窗寬度 = 640
視窗高度 = 480
畫面更新率 = 30
空白 = None
# R G B
黑色 = ( 0, 0, 0)
白色 = (255, 255, 255)
亮藍 = ( 0, 50, 255)
墨綠 = ( 3, 54, 73)
綠色 = ( 0, 204, 0)
背景顏色 = 墨綠
方塊顏色 = 綠色
文字顏色 = 白色
邊框顏色 = 亮藍
基本字體大小 = 20
按鈕顏色 = 白色
按鈕文字顏色 = 黑色
訊息顏色 = 白色
邊框X座標 = int((視窗寬度 - (方塊尺寸 * 行數 + (行數 - 1))) / 2)
邊框Y座標 = int((視窗高度 - (方塊尺寸 * 列數 + (列數 - 1))) / 2)
上 = '上'
下 = '下'
左 = '左'
右 = '右'
def 主函式():
global 畫面更新控制器, 顯示介面, 基本字型, 重置介面, 重置方塊, 新介面, 新方塊, 解答畫面, 解答方塊
pygame.init()
畫面更新控制器 = pygame.time.Clock()
顯示介面 = pygame.display.set_mode((視窗寬度, 視窗高度))
pygame.display.set_caption('Slide Puzzle')
基本字型 = pygame.font.Font('freesansbold.ttf', 基本字體大小)
# Store the option buttons and their rectangles in OPTIONS.
重置介面, 重置方塊 = 製造文字('ReSet',文字顏色,方塊顏色,視窗寬度 - 120,視窗高度 - 90)
新介面, 新方塊 = 製造文字('New Game', 文字顏色, 方塊顏色, 視窗寬度 - 120, 視窗高度 - 60)
解答畫面, 解答方塊 = 製造文字('Solve',文字顏色, 方塊顏色, 視窗寬度 - 120, 視窗高度 - 30)
主要區塊, 解答順序 = 產生新題目(80)
解答區塊 = 區塊初始化()
移動記錄 = [] # list of 移動s made from the solved configuration
while True: # main game loop
滑向 = None # the 方向, if any, a tile should slide
訊息 = ''
if 主要區塊 == 解答區塊:
訊息 = 'Solved!'
繪製畫面(主要區塊, 訊息)
結束檢查()
for event in pygame.event.get(): # event handling loop
if event.type == MOUSEBUTTONUP:
點擊橫座標, 點擊縱座標 = 取得點擊座標(主要區塊, event.pos[0], event.pos[1])
if (點擊橫座標, 點擊縱座標) == (None, None):
# check if the user clicked on an option button
if 重置方塊.collidepoint(event.pos):
重置動畫(主要區塊, 移動記錄) # clicked on Reset button
移動記錄 = []
elif 新方塊.collidepoint(event.pos):
主要區塊, 解答順序 = 產生新題目(80) # clicked on New Game button
移動記錄 = []
elif 解答方塊.collidepoint(event.pos):
重置動畫(主要區塊, 解答順序 + 移動記錄) # clicked on Solve button
移動記錄 = []
else:
空位橫座標, 空位縱座標 = 取得空位置(主要區塊)
if 點擊橫座標 == 空位橫座標 + 1 and 點擊縱座標 == 空位縱座標:
滑向 = 左
elif 點擊橫座標 == 空位橫座標 - 1 and 點擊縱座標 == 空位縱座標:
滑向 = 右
elif 點擊橫座標 == 空位橫座標 and 點擊縱座標 == 空位縱座標 + 1:
滑向 = 上
elif 點擊橫座標 == 空位橫座標 and 點擊縱座標 == 空位縱座標 - 1:
滑向 = 下
elif event.type == KEYUP:
# check if the user pressed a key to slide a tile
if event.key in (K_LEFT, K_a) and 有效移動(主要區塊, 左):
滑向 = 左
elif event.key in (K_RIGHT, K_d) and 有效移動(主要區塊, 右):
滑向 = 右
elif event.key in (K_UP, K_w) and 有效移動(主要區塊, 上):
滑向 = 上
elif event.key in (K_DOWN, K_s) and 有效移動(主要區塊, 下):
滑向 = 下
if 滑向:
移動動畫(主要區塊, 滑向, 'Click tile or press arrow keys to slide.', 8) # show slide on screen
移動函式(主要區塊, 滑向)
移動記錄.append(滑向) # record the slide
pygame.display.update()
畫面更新控制器.tick(畫面更新率)
if __name__ == '__main__':
主函式()
- 回覆very good, music is good, 解釋很自然。
-
回覆口語報告很好。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
B0129023回覆OK
因BLOGGER無法使用所以分開
YOU TOBE: https://www.youtube.com/watch?v=WqckVGz4vVM&feature=youtu.be
GIT HUB: https://gist.github.com/xjimtim/a1894ca4fe0215b4fe11
SPEAKER: https://speakerdeck.com/xjimtim/b0129023 -
回覆看不到影片
-
-
-
-
-
-
-
-
- 你的程式碼太特別了,
變數1, 2, 3, ......
函式甲、乙、丙、丁、、、
串列1,2,3,4....
完全不具任何語意上的意義!
改成中文是為了增加可讀性,
你這樣改似乎沒有達到目的,
甚至是反其道而行!
ryCopy 8 則留言:
-












http://little-hsuan.blogspot.tw/
#---原版作者--- ''' Gemgem (a Bejeweled clone) By Al Sweigart al@inventwithpython.com http://inventwithpython.com/pygame Released under a "Simplified BSD" license ''' #--改版作者--- """ 遊戲名稱:消糖果遊戲 學號:b0129031 """ import random, time, pygame, sys, copy from pygame.locals import * from pygame_tc import * 畫面更新率 = 30 #FPS 視窗寬度 = 600 # 程式視窗寬度(單位為像素) 視窗高度 = 600 版面總欄位數 = 8 版面總列數 = 8 糖果圖片大小 = 64 # 每個空間的高度和寬度(單位為像素) 糖果圖片總數 = 7 assert 糖果圖片總數 >= 5 # 遊戲需要至少五種以上的糖果才能運作 配對成功的音效總數 = 6 移動速率 = 25 #範圍是1~100 , 數字越大移動越快 扣除速度 = 1 # 分數是以每秒的速度遞減2分 #三原色光模式 R G B 紫色 = (255, 0, 255) 愛麗絲藍 = (130, 206, 250) 皇藍色 = ( 30, 144, 255) 黃色 = (255, 255, 0) 黑色 = ( 0, 0, 0) 紅色 = (255, 0, 0) 選取邊的顏色 = 紫色 視窗背景顏色 = 愛麗絲藍 版面顏色 = 皇藍色 遊戲結束字體顏色 = 黃色 遊戲結束背景顏色 = 黑色 分數的顏色 = 紅色 X軸剩餘邊界 = int((視窗寬度 - 糖果圖片大小 * 版面總欄位數) / 2) Y軸剩餘邊界 = int((視窗高度 - 糖果圖片大小 * 版面總列數) / 2) # 表示方向的定量 上 = 'up' 下 = 'down' 左 = 'left' 右 = 'right' 空的空間 = -1 # 一個任意非正數來判斷空的空間 面板上方的列 = 'row above 面版' # 一個任意非整數的值 def 主函式(): global 畫面更新時鐘, 版面展示, 糖果圖片, 糖果音效, 預設字體, 矩形版面 # 初始化設置 遊戲開始() 畫面更新時鐘 = 時鐘物件() 版面展示 = 設螢幕大小((視窗寬度, 視窗高度)) 設螢幕標題('消糖果遊戲') 預設字體 = 字型物件('freesansbold.ttf', 36) # 載入圖片 糖果圖片 = [] for i in 範圍(1, 糖果圖片總數+1): 圖片 = 圖片載入('candy%s.png' % i) if 圖片.get_size() != (糖果圖片大小, 糖果圖片大小): 圖片 = 轉換任意平滑版面(圖片, (糖果圖片大小, 糖果圖片大小)) 糖果圖片.append(圖片) # 載入音效 糖果音效 = {} 糖果音效['bad swap'] = 聲音物件('badswap.wav') 糖果音效['match'] = [] for i in 範圍(配對成功的音效總數): 糖果音效['match'].append(聲音物件('match%s.wav' % i)) # 為每個面板空間創造矩形物件,並做面板座標到像素座標的轉換 矩形版面 = [] for x in 範圍(版面總欄位數): 矩形版面.append([]) for y in 範圍(版面總列數): r = 矩形物件((X軸剩餘邊界 + (x * 糖果圖片大小), Y軸剩餘邊界 + (y * 糖果圖片大小), 糖果圖片大小, 糖果圖片大小)) 矩形版面[x].append(r) while True: 開始遊戲()