版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、文檔供參考,可復(fù)制、編制,期待您的好評與關(guān)注! 貪吃蛇源碼,初始源碼來自于網(wǎng)絡(luò)。初學(xué)python,做了部分修改,加了些有趣的功能進(jìn)行測試。增加了部分注釋;增加背景設(shè)置;增加歷史高分統(tǒng)計;增加當(dāng)前玩家排名;增加幸運食物,吃了有驚喜!開始:回車鍵暫停:空格鍵操作:控制上下左右( w、s、a、d ) or( up、down、left、right)自動背景開啟和關(guān)閉: L手動背景RGB值微調(diào):r、g、b 鍵(L開啟才可用)游戲界面Python 源碼"""貪吃蛇"""import randomimport sysimport timeimpor
2、t copyimport pygamefrom pygame.locals import *from collections import dequeSCREEN_WIDTH = 800 # 屏幕寬度SCREEN_HEIGHT = 480 # 屏幕高度SIZE = 20 # 小方格大小LINE_WIDTH = 3 # 網(wǎng)格線寬度# 游戲區(qū)域的坐標(biāo)范圍SCOPE_X = (0, SCREEN_WIDTH / SIZE - 1)SCOPE_Y = (2, SCREEN_HEIGHT / SIZE - 1)# 食物的分值及顏色# FOOD_STYLE_LIST = (10, (255, 100, 1
3、00), (20, (100, 255, 100), (30, (100, 100, 255)FOOD_STYLE_LIST = (10, (255, 0, 0), (20, (0, 255, 0), (30, (0, 0, 255), (100, (255, 255, 0)# 幸運食物出現(xiàn)概率(蛇身減一,速度不增加)FOOD_LUCK=(0,7)# LIGHT = (100, 100, 100)DARK = (200, 200, 200) # 蛇的顏色BLACK = (0, 0, 0) # 網(wǎng)格線顏色RED = (200, 30, 30) # 紅色,GAME OVER 的字體顏色BGCOLO
4、R = (40, 40, 60) # 背景色def print_text(screen, font, x, y, text, fcolor=(255, 255, 255): imgText = font.render(text, True, fcolor) screen.blit(imgText, (x, y)# 初始化蛇def init_snake(): snake = deque() snake.append(2, SCOPE_Y0) # snake.append(1, SCOPE_Y0+1), snake.append(1, SCOPE_Y0), snake.append(1, SCOP
5、E_Y0+2) snake.append(1, SCOPE_Y0) snake.append(0, SCOPE_Y0) return snakedef create_food(snake): food_x = random.randint(SCOPE_X0, SCOPE_X1) food_y = random.randint(SCOPE_Y0, SCOPE_Y1) while (food_x, food_y) in snake: # 如果食物出現(xiàn)在蛇身上,則重來 food_x = random.randint(SCOPE_X0, SCOPE_X1) food_y = random.randin
6、t(SCOPE_Y0, SCOPE_Y1) return food_x, food_ydef get_food_style(): if random.randint(FOOD_LUCK0,FOOD_LUCK1)=FOOD_LUCK1: return FOOD_STYLE_LIST3 else: return FOOD_STYLE_LISTrandom.randint(0, 2)def main(): pygame.init() screen = pygame.display.set_mode(SCREEN_WIDTH, SCREEN_HEIGHT) #pygame創(chuàng)建窗口 pygame.dis
7、play.set_caption('貪吃蛇') #窗口名稱 font1 = pygame.font.SysFont('SimHei', 16) # 得分的字體 font_ypos = 12 #位置 font2 = pygame.font.Font(None, 72) # GAME OVER 的字體 fwidth, fheight = font2.size('GAME OVER') # 如果蛇正在向右移動,那么快速點擊向下向左,由于程序刷新沒那么快,向下事件會被向左覆蓋掉,導(dǎo)致蛇后退,直接GAME OVER # b 變量就是用于防止這種情況的發(fā)生
8、b = True # 蛇 snake = init_snake() # 食物 food = create_food(snake) food_style = get_food_style() # 方向 pos = (1, 0) #(左-1 右1,上-1 下1) game_over = True start = False # 是否開始,當(dāng)start = True,game_over = True 時,才顯示 GAME OVER score = 0 # 得分 orispeed =0.5 # 原始速度 speed = orispeed luck_times=0 last_move_time = No
9、ne last_draw_time = None pause = False # 暫停 BG_r = 40 #手動背景調(diào)整 BG_g = 40 BG_b = 60 BG_auto=True REC_score= REC_save=False while True: for event in pygame.event.get(): if event.type = QUIT: #關(guān)閉窗口事件直接退出 sys.exit() elif event.type = KEYDOWN: #處理按鍵事件 if event.key = K_RETURN: #處理回車鍵事件 if game_over: start
10、= True #游戲開始 game_over = False b = True snake = init_snake() food = create_food(snake) food_style = get_food_style() pos = (1, 0) # 得分 score = 0 REC_save=True REC_score.append(score) last_move_time = time.time() last_draw_time = last_move_time luck_times = 0 elif event.key = K_SPACE: #處理空格鍵事件 暫停和繼續(xù)
11、if not game_over: pause = not pause elif event.key in (K_w, K_UP): # 這個判斷是為了防止蛇向上移時按了向下鍵,導(dǎo)致直接 GAME OVER if b and not pos1: pos = (0, -1) b = False elif event.key in (K_s, K_DOWN): if b and not pos1: pos = (0, 1) b = False elif event.key in (K_a, K_LEFT): if b and not pos0: pos = (-1, 0) b = False el
12、if event.key in (K_d, K_RIGHT): if b and not pos0: pos = (1, 0) b = False elif event.key in (K_r,K_g,K_b): #背景色調(diào)整 L鍵控制開關(guān)(R,G,B)鍵控制3原色 if event.key=K_r: BG_r=BG_r+5 if BG_r>=125: BG_r=40 elif event.key=K_g: BG_g=BG_g+5 if BG_g>=125: BG_g=40 elif event.key=K_b: BG_g=BG_b+5 if BG_b>=125: BG_b=
13、40 elif event.key=K_l: BG_auto=not BG_auto # 填充背景色 if BG_auto: screen.fill(BGCOLOR) else: screen.fill(BG_r,BG_g,BG_b) # 畫網(wǎng)格線 豎線 for x in range(SIZE, SCREEN_WIDTH, SIZE): pygame.draw.line(screen, BLACK, (x, SCOPE_Y0 * SIZE), (x, SCREEN_HEIGHT), LINE_WIDTH) # 畫網(wǎng)格線 橫線 for y in range(SCOPE_Y0 * SIZE, SC
14、REEN_HEIGHT, SIZE): pygame.draw.line(screen, BLACK, (0, y), (SCREEN_WIDTH, y), LINE_WIDTH) if not game_over: curTime = time.time() if curTime - last_move_time > speed: #控制移動速度speed值越小,刷新越快 if not pause: b = True last_move_time = curTime next_s = (snake00 + pos0, snake01 + pos1) #按方向讀取下一個前進(jìn)位 if ne
15、xt_s = food: # 吃到了食物 snake.appendleft(next_s) score += food_style0 if REC_save: #記錄得分 REC_score.pop() REC_score.append(score) if food_style0 = FOOD_STYLE_LIST30 and len(snake) > 3: snake.pop() snake.pop() luck_times+=1 else: speed = orispeed - 0.03 * (score / 100-luck_times) food = create_food(sn
16、ake) food_style = get_food_style() else: if SCOPE_X0 <= next_s0 <= SCOPE_X1 and SCOPE_Y0 <= next_s1 <= SCOPE_Y1 and next_s not in snake: #判斷下一步是否越界和碰到自己 snake.appendleft(next_s) snake.pop() #沒吃到食物,前進(jìn)一步 else: game_over = True # 畫食物 if not game_over: # 避免 GAME OVER 的時候把 GAME OVER 的字給遮住了 if
17、 food_style0 = FOOD_STYLE_LIST30: curTime = time.time() if curTime-last_draw_time>0.01: #閃爍時間 pygame.draw.rect(screen, food_style1, (food0 * SIZE, food1 * SIZE, SIZE, SIZE), 0) last_draw_time=curTime else: pygame.draw.rect(screen, food_style1, (food0 * SIZE, food1 * SIZE, SIZE, SIZE), 0) # 畫蛇 for
18、 s in snake: pygame.draw.rect(screen, DARK, (s0 * SIZE + LINE_WIDTH, s1 * SIZE + LINE_WIDTH, SIZE - LINE_WIDTH * 2, SIZE - LINE_WIDTH * 2), 0) print_text(screen, font1, 30, font_ypos, f'速度: score/100-luck_times') print_text(screen, font1, 630, font_ypos, f'得分: score') if game_over: if start: print_text(screen, font2, (SCREEN_WIDTH - fwidth) / 2, (SCREEN_HEIGHT - fheight) / 2, 'GAME OVER', RED) TMP_score=copy.deepcopy(REC_score) TMP_score.sort() TMP_score.reverse() if len(REC_score): print_text(screen, font1, 230, font_ypos, f'最高得分: TMP_score0') print_te
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年制衣面料供應(yīng)居間合同
- 2025版小企業(yè)合同管理規(guī)范與合同管理信息化解決方案3篇
- 2025年超額展覽會保險條款
- 二零二五版新型環(huán)保建材采購合同樣本2篇
- 2025版企事業(yè)單位食堂員工招聘與服務(wù)協(xié)議3篇
- 2024-2025年中國寬帶行業(yè)市場評估分析及投資發(fā)展盈利預(yù)測報告
- 2025版小額貸款合同簽訂中的合同簽訂中的合同簽訂前的準(zhǔn)備與協(xié)商3篇
- 二零二五年度門面房裝修工程設(shè)計與施工質(zhì)量監(jiān)理合同
- 2025版建筑行業(yè)設(shè)備托管正規(guī)范本3篇
- 二零二五年度游艇俱樂部船舶租賃售后服務(wù)合同
- 2024年高考語文備考之常考作家作品(下):中國現(xiàn)當(dāng)代、外國
- 《裝配式蒸壓加氣混凝土外墻板保溫系統(tǒng)構(gòu)造》中
- T-CSTM 01124-2024 油氣管道工程用工廠預(yù)制袖管三通
- 2019版新人教版高中英語必修+選擇性必修共7冊詞匯表匯總(帶音標(biāo))
- 新譯林版高中英語必修二全冊短語匯總
- 基于自適應(yīng)神經(jīng)網(wǎng)絡(luò)模糊推理系統(tǒng)的游客規(guī)模預(yù)測研究
- 河道保潔服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 品管圈(QCC)案例-縮短接臺手術(shù)送手術(shù)時間
- 精神科病程記錄
- 閱讀理解特訓(xùn)卷-英語四年級上冊譯林版三起含答案
- 清華大學(xué)考博英語歷年真題詳解
評論
0/150
提交評論