日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【编程6】贪吃蛇游戏(python+pygame)

發(fā)布時(shí)間:2025/3/19 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【编程6】贪吃蛇游戏(python+pygame) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

效果圖~新鮮出爐

  • 開始界面
  • 游戲中
  • 結(jié)束界面

一、pygame模塊概覽

模塊名稱功能
pygame.cdrom訪問(wèn)光驅(qū)
pygame.cursors加載光標(biāo)
pygame.display訪問(wèn)顯示設(shè)備
pygame.draw繪制形狀、線和點(diǎn)
pygame.event管理事件
pygame.font使用字體
pygame.image加載和存儲(chǔ)圖片
pygame.joystick使用游戲手柄或類似的東西
pygame.key讀取鍵盤按鍵
pygame.mixer聲音
pygame.mouse鼠標(biāo)
pygame.movie播放視頻
pygame.music播放音頻
pygame.overlay訪問(wèn)高級(jí)視頻疊加
pygame目前學(xué)習(xí)的
pygame.rect管理矩形區(qū)域
pygame.sndarray操作聲音數(shù)據(jù)
pygame.sprite操作移動(dòng)圖像
pygame.surface管理圖像和屏幕
pygame.surfarray管理點(diǎn)陣圖像數(shù)據(jù)
pygame.time管理時(shí)間和幀信息
pygame.transform縮放和移動(dòng)圖像

二、核心代碼

思路

  • 首頁(yè)面:會(huì)涉及圖片和文字提示的顯示,進(jìn)入(任意鍵)或退出(ESC)游戲;
  • 游戲頁(yè)面:主要涉及食物的創(chuàng)建繪制,蛇的移動(dòng)和顯示,蛇是否吃到食物或者是否撞到邊界或自身,再者就是音效的實(shí)現(xiàn)(背景音樂(lè)+gameover音效);
  • 結(jié)束頁(yè)面:會(huì)涉及圖片和文字提示的顯示,重來(lái)(任意鍵)或退出(ESC)游戲。
  • 核心代碼

    • 主函數(shù)
    def main():pygame.init()# 創(chuàng)建Pygame時(shí)鐘對(duì)象,控制每個(gè)循環(huán)多長(zhǎng)時(shí)間運(yùn)行一次。# 例如:snake_speed_clock(60)代表每秒內(nèi)循環(huán)要運(yùn)行的 60 次# 每秒60個(gè)循環(huán)(或幀)時(shí),每個(gè)循環(huán)需要1000/60=16.66ms(大約17ms)如果循環(huán)中的代碼運(yùn)行時(shí)間超過(guò)17ms,# 在clock指出下一次循環(huán)時(shí)當(dāng)前循環(huán)將無(wú)法完成。snake_speed_clock = pygame.time.Clock()screen = pygame.display.set_mode((windows_width, windows_height))screen.fill(white)pygame.display.set_caption("貪吃蛇~")show_start_info(screen)while True:music()running_game(screen, snake_speed_clock)show_end_info(screen)
    • 游戲運(yùn)行代碼
    def running_game(screen,snake_speed_clock):start_x = random.randint(3, map_width - 8) #開始位置start_y = random.randint(3, map_height - 8)snake_coords = [{'x': start_x, 'y': start_y}, #初始貪吃蛇{'x': start_x - 1, 'y': start_y},{'x': start_x - 2, 'y': start_y}]direction = RIGHT # 開始時(shí)向右移動(dòng)food = get_random_location() #實(shí)物隨機(jī)位置while True:for event in pygame.event.get():if event.type == QUIT:terminate()elif event.type == KEYDOWN:if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:direction = LEFTelif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:direction = RIGHTelif (event.key == K_UP or event.key == K_w) and direction != DOWN:direction = UPelif (event.key == K_DOWN or event.key == K_s) and direction != UP:direction = DOWNelif event.key == K_ESCAPE:terminate()move_snake(direction, snake_coords) #移動(dòng)蛇ret = snake_is_alive(snake_coords)if not ret:gameover_music()break #蛇死了. 游戲結(jié)束snake_is_eat_food(snake_coords, food) #判斷蛇是否吃到食物screen.fill(BG_COLOR)draw_snake(screen, snake_coords)draw_food(screen, food)show_score(screen, len(snake_coords) - 3)pygame.display.update()snake_speed_clock.tick(snake_speed) #控制fps
    • 食物繪制
    def draw_food(screen, food):x = food['x'] * cell_sizey = food['y'] * cell_sizeappleRect = pygame.Rect(x, y, cell_size, cell_size)pygame.draw.rect(screen, red, appleRect)
    • 貪吃蛇繪制
    def draw_snake(screen, snake_coords):for coord in snake_coords:x = coord['x'] * cell_sizey = coord['y'] * cell_sizewormSegmentRect = pygame.Rect(x,y,cell_size,cell_size)pygame.draw.rect(screen, dark_blue, wormSegmentRect)wormInnerSegmentRect = pygame.Rect(x+4,y+4,cell_size - 8, cell_size - 8)pygame.draw.rect(screen, blue, wormInnerSegmentRect)
    • 移動(dòng)貪吃蛇
    def move_snake(direction, snake_coords):if direction == UP:newHead = {'x':snake_coords[HEAD]['x'], 'y':snake_coords[HEAD]['y'] - 1}elif direction == DOWN:newHead = {'x':snake_coords[HEAD]['x'], 'y':snake_coords[HEAD]['y'] + 1}elif direction == LEFT:newHead = {'x':snake_coords[HEAD]['x'] - 1, 'y':snake_coords[HEAD]['y']}elif direction == RIGHT:newHead = {'x':snake_coords[HEAD]['x'] + 1, 'y':snake_coords[HEAD]['y']}snake_coords.insert(0, newHead)
    • 判斷蛇死沒有死
    def snake_is_alive(snake_coords):tag = True# 頭坐標(biāo)超出地圖范圍if(snake_coords[HEAD]['x'] == -1 \or snake_coords[HEAD]['x'] == map_width \or snake_coords[HEAD]['y'] == -1 \or snake_coords[HEAD]['y'] == map_height):tag = False# 頭坐標(biāo)等于身體某節(jié)坐標(biāo)for snake_body in snake_coords[1:]:if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:tag = Falsereturn tag
    • 判斷蛇是否吃到食物
    def snake_is_eat_food(snake_coords, food):if(snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']):## 重新生成食物food['x'] = random.randint(0, map_width - 1)food['y'] = random.randint(0, map_height - 1)else:# 如果沒有吃到實(shí)物, 就向前移動(dòng), 那么尾部一格刪掉del snake_coords[-1]
    • 隨機(jī)生成食物
    def get_random_location():return {'x':random.randint(0, map_width - 1),'y':random.randint(0, map_height - 1)}
    • 開始信息顯示
    def show_start_info(screen):# 創(chuàng)建Font字體對(duì)象,使用render方法寫字font = pygame.font.Font("simsun.ttc", 40)tip = font.render('按任意鍵開始游戲', True,(65,105,255))# 加載圖片gamestart = pygame.image.load('startlogo.jpg').convert()# 通過(guò)blit方法輸出在屏幕上screen.blit(gamestart,(140, 30))screen.blit(tip,(240, 550))## 刷新屏幕pygame.display.update()while True: # 監(jiān)聽鍵盤for event in pygame.event.get():if event.type == QUIT:terminate()elif event.type == KEYDOWN: # 任意鍵按下returnif (event.key == K_ESCAPE): # 若為ESC,則終止程序terminate()else:return
    • 聲音設(shè)置
    def music():pygame.mixer.init()pygame.mixer.music.load('111.mp3')pygame.mixer.music.play(1, 0)def gameover_music():pygame.mixer.init()pygame.mixer.music.load('gameover.mp3')pygame.mixer.music.play(1,0)
    • 結(jié)束信息顯示
    def show_end_info(screen):font = pygame.font.Font("simsun.ttc", 40)tip = font.render("按ESC退出游戲,按任意鍵重新開始游戲",True,(65,105,255))# gamestart = pygame.image.load('gameover.png')# screen.blit(gamestart,(60, 0))screen.blit(tip,(80, 300))pygame.display.update()while True:for event in pygame.event.get():if event.type == QUIT:terminate()elif event.type == KEYDOWN:if event.key == K_ESCAPE:terminate()else:return
    • 成績(jī)信息顯示
    def show_score(screen, score):font = pygame.font.Font("simsun.ttc", 30)scoreSurf = font.render("得分:%s" % score, True, green)scoreRect = scoreSurf.get_rect()scoreRect.topleft = (windows_width - 120, 10)screen.blit(scoreSurf,scoreRect)
    • 程序終止
    def terminate():pygame.quit()sys.exit()

    總結(jié)

    以上是生活随笔為你收集整理的【编程6】贪吃蛇游戏(python+pygame)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。