貪吃蛇python源碼_第1頁
貪吃蛇python源碼_第2頁
貪吃蛇python源碼_第3頁
貪吃蛇python源碼_第4頁
貪吃蛇python源碼_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論