<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
貪吃蛇是一個很常見的小遊戲,我們如何用Python去實現呢。
pip install pygame pip install keyboard pip install pickledb
通過命令提示字元安裝所需模組。(以上非Python程式碼)
#匯入 import pygame, keyboard, random, threading, time, pickledb
這個程式用到了pygame作為顯示模組,keyboard捕獲鍵盤操,pickledb記錄最高紀錄。
#顯示規則 print() print('方向鍵控制方向') print(''esc'退出') print(''alt'暫停') print(''space'繼續') print('每吃掉一個莓果,蛇身長長一格') print('撞到蛇身或視窗邊緣即為死亡') print('死亡後'esc'退出,'enter'再來一局')
#初始化 pygame.init() #設定視窗 screen = pygame.display.set_mode((500, 500)) pygame.display.set_caption('Greedy Snake')
執行以上程式碼就設定好了貪吃蛇的視窗。
#設定蛇身 body = pygame.Surface((20, 20)) body.fill('yellow') #設定莓果 berries = pygame.Surface((20, 20)) berries.fill('red') #設定數位方塊(用於顯示數位) block = pygame.Surface((4, 4))
#設定變數 T = 0 db = pickledb.load('Mark.db', False) HI = db.get('HiMark') B = False
def keyname(key) : #鍵盤捕獲 global KEY KEY = key.name keyboard.on_press(keyname)
用on_press繫結了keyname後,當鍵盤按下時會執行keyname函數。(key.name是按鍵的名稱)
def snake() : #顯示蛇身 global path for xy in path : screen.blit(body, xy) def food() : #顯示食物 global fx, fy screen.blit(berries, (fx, fy)) def eat() : #檢測是否吃掉食物 if (x, y) == (fx, fy) : return True else : return False def crash() : #檢測是否碰撞 if path.count((x, y)) != 0 : return True elif x < 0 or x > 480 or y < 0 or y > 480 : return True else : return False def count() : #計時執行緒函數 global T while True : if B : time.sleep(1) T += 1 def timer() : #顯示時間 global T, number a = T // 100 b = T % 100 // 10 c = T % 10 a = number[a] b = number[b] c = number[c] X, Y = 6, 10 block.fill('white') for n in (a, b, c) : for xy in n : x = X + xy[0] * 4 y = Y + xy[1] * 4 screen.blit(block, (x, y)) X += 32 def mark() : #顯示分數 global M, number a = M // 100 b = M % 100 // 10 c = M % 10 a = number[a] b = number[b] c = number[c] X, Y = 395, 10 block.fill('white') for n in (a, b, c) : for xy in n : x = X + xy[0] * 4 y = Y + xy[1] * 4 screen.blit(block, (x, y)) X += 32 def hi() : #顯示最高紀錄 global HI, number a = HI // 100 b = HI % 100 // 10 c = HI % 10 a = number[a] b = number[b] c = number[c] X, Y = 263, 10 block.fill('grey') for n in (a, b, c) : for xy in n : x = X + xy[0] * 4 y = Y + xy[1] * 4 screen.blit(block, (x, y)) X += 32
#啟動計時執行緒 time_count_thread = threading.Thread(target = count) time_count_thread.start()
執行緒可以在主執行緒的執行過程中執行,起到計時的作用。
以下就是程式的主要部分,實現了對按鍵名稱進行判斷、蛇的移動、蛇吃掉食物後的生長和判斷死亡。
while True : #變數初始化 KEY = 'up' lKEY = KEY x, y = 240, 240 path = [] path.append((x, y)) fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20) while path.count((fx, fy)) != 0 : fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20) T = 0 M = 0 B = True while True : time.sleep(0.1) #檢測是否按下退出按鈕 for event in pygame.event.get() : if event.type == pygame.QUIT : pygame.quit() exit() #檢測鍵盤按鍵 if (KEY == 'up' and lKEY != 'down') or (KEY == 'w' and lKEY != 's') : y -= 20 lKEY = KEY elif (KEY == 'down' and lKEY != 'up') or (KEY == 's' and lKEY != 'w') : y += 20 lKEY = KEY elif (KEY == 'left' and lKEY != 'right') or (KEY == 'a' and lKEY != 'd') : x -= 20 lKEY = KEY elif (KEY == 'right' and lKEY != 'left') or (KEY == 'd' and lKEY != 'a') : x += 20 lKEY = KEY elif KEY == 'alt' or KEY == 'right alt' : B = False while True : pygame.event.wait() if KEY == 'space' : KEY = lKEY B = True break elif KEY == 'esc' : pygame.quit() if M > HI : HI = M db.set('HiMark', HI) db.dump() exit() continue elif KEY == 'esc' : pygame.quit() if M > HI : HI = M db.set('HiMark', HI) db.dump() exit() else : KEY = lKEY continue #檢測是否碰撞或吃掉食物 if crash() : break if eat() : M += 1 fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20) while path.count((fx, fy)) != 0 : fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20) else : del path[0] #更新螢幕內容 path.append((x, y)) screen.fill('black') snake() food() timer() mark() hi() pygame.display.flip() #儲存最高紀錄 if M > HI : HI = M db.set('HiMark', HI) db.dump() B = False #檢測是否退出或再來一局 while True : event = pygame.event.wait() if event.type == pygame.QUIT : pygame.quit() exit() elif KEY == 'esc' : pygame.quit() exit() elif KEY == 'return' or KEY == 'enter' : break
如果你將以上所有的程式碼按順序編寫在一些,就可以執行完整的貪吃蛇了。這些程式碼都很簡單,適合初學者學習。
到此這篇關於用322行Python程式碼編寫貪吃蛇遊戲的文章就介紹到這了,更多相關Python編寫貪吃蛇內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45