最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

68行Python代碼實現(xiàn)帶難度升級的貪吃蛇

 更新時間:2022年01月18日 10:28:30   作者:曲鳥  
本文主要介紹了Python代碼實現(xiàn)帶難度升級的貪吃蛇,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、前言

之前版本很多小伙伴都覺得難度過高,另外也有粉絲問還能不能精簡代碼。

所以這版降低了難度 (由原來過關增加5km/h改為3.5KM/h)
并通過反射代替IF ELSE的寫法,刪除了一些冗余的代碼,將代碼由85行壓縮到了68行 (不必要的壓縮代碼是不建議的,這里壓縮代碼只是為了好玩)

二、實現(xiàn)效果

在這里插入圖片描述

個人最高紀錄

在這里插入圖片描述

三、環(huán)境要求

python 3+

pygame包 安裝命令:打開cmd 輸入: pip install pygame

四、源碼分享

import pygame,sys,random
SCREEN,dirction_node = 600, {pygame.K_LEFT:['left',-25],pygame.K_RIGHT:['right',25],pygame.K_UP:['top',-25],pygame.K_DOWN:['top',25]}  # 屏幕尺寸,移動的定義
class Snake:  # 蛇類
    def __init__(self):  # 初始化各種需要的屬性 [開始時默認向右/身體塊x5]
        self.dirction, self.body = pygame.K_RIGHT, []
        [self.add_node() for _ in range(5)]
    def add_node(self):
        node = pygame.Rect(((self.body[0].left, self.body[0].top) if self.body else (0, 0)) + (25, 25))  # 隨時增加蛇塊
        setattr(node, dirction_node[self.dirction][0], getattr(node, dirction_node[self.dirction][0]) + dirction_node[self.dirction][1])
        self.body.insert(0, node)
    def is_dead(self):
        body_h = self.body[0]
        if body_h.x not in range(SCREEN) or body_h.y not in range(SCREEN) or body_h in self.body[1:]:  # 撞墻、撞自己則死亡
            return True
    def move(self):
        self.add_node()
        self.body.pop()
    def change_direction(self, curkey):  # 改變方向 但是左右、上下不能被逆向改變
        LR, UD = [pygame.K_LEFT, pygame.K_RIGHT], [pygame.K_UP, pygame.K_DOWN]
        if curkey in LR + UD:
            if not ((curkey in LR) and (self.dirction in LR) or (curkey in UD) and (self.dirction in UD)):
                self.dirction = curkey
class Food:  # 食物類
    def __init__(self):
        self.rect = pygame.Rect(-25, 0, 25, 25)
    def remove(self):
        self.rect.x = -25
    def set(self):
        if self.rect.x == -25:
            allpos = [pos for pos in range(75, SCREEN - 75, 25)]  # 生成的食物距離墻在75 ~ SCREEN-55 之間
            self.rect.left, self.rect.top = random.choice(allpos), random.choice(allpos)
def show_text(screen, pos, text, color, font_size=30):
    cur_font = pygame.font.SysFont("SimHei", font_size)  # 設置文字樣式
    text_fmt = cur_font.render(text, True, color)  # 設置文字內容
    screen.blit(text_fmt, pos)  # 繪制文字
def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN, SCREEN))
    pygame.display.set_caption('貪吃蛇:是男人就堅持到第10關!')
    snake,food,clock, scores, isdead = Snake(),Food(),pygame.time.Clock(), 0, False
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYDOWN:
                snake.change_direction(event.key)
                if event.key == pygame.K_SPACE and isdead:  # 死后按space重新
                    return main()
        screen.fill((255, 255, 255))
        if not isdead:  # 畫蛇身 / 每一步+1分
            snake.move()
        for rect in snake.body:
            pygame.draw.rect(screen, (144, 238, 144), rect)
        isdead = snake.is_dead()  # 顯示死亡文字
        if isdead:
            show_text(screen, (150, 200), '翻車了!', (227, 29, 18), 80)
            show_text(screen, (50, 320), '是男人就超過45KM/h,按空格鍵重試...', (0, 0, 22))
        if food.rect == snake.body[0]:  # 當食物rect與蛇頭重合,吃掉 -> Snake增加一個Node
            scores += 1  # 食物處理 / 吃到+1分
            food.remove()
            snake.add_node()
        food.set()  # 食物投遞
        pygame.draw.rect(screen, (233, 150, 122), food.rect)
        speed = 10 + scores * 3.5 if scores else 10  # 蛇移動速度
        show_text(screen, (20, 550), '關卡:' + str(scores) + '   速度:' + str(speed) + 'KM/h', (0, 0, 205))  # 顯示得分和速度
        pygame.display.update()
        clock.tick(speed)
main()

五、總結

再強調一遍:這里減少代碼量只是為了好玩,不必要的壓縮代碼是不建議的!代碼可讀性、可維護性才是我們在編碼中首要考慮的事情!

這也只是隨便弄的一個小玩意,如果真要做游戲還是建議使用游戲引擎。

市面上常見的cocos、unity都是不錯的游戲引擎,能夠讓你開發(fā)游戲的效率達到事半功倍的效果

到此這篇關于68行Python代碼實現(xiàn)帶難度升級的貪吃蛇的文章就介紹到這了,更多相關Python 貪吃蛇內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Python實現(xiàn)簡易的植物識別小系統(tǒng)

    基于Python實現(xiàn)簡易的植物識別小系統(tǒng)

    這篇文章主要介紹了利用Python實現(xiàn)一個簡易的植物識別系統(tǒng),文中的示例代碼簡潔易懂,對我們學習Python有一定的幫助,需要的小伙伴可以參考一下
    2021-12-12
  • Python實現(xiàn)json對值進行模糊搜索的示例詳解

    Python實現(xiàn)json對值進行模糊搜索的示例詳解

    我經常使用json進行存儲配置,于是常常遇到這樣的問題:如果想要對某個數(shù)組里的值進行模糊搜索,同時輸出相關的其他數(shù)組相同位置的的值該如何實現(xiàn)呢?本文就來和大家詳細聊聊
    2023-01-01
  • 使用Python腳本zabbix自定義key監(jiān)控oracle連接狀態(tài)

    使用Python腳本zabbix自定義key監(jiān)控oracle連接狀態(tài)

    這篇文章主要介紹了使用Python腳本zabbix自定義key監(jiān)控oracle連接狀態(tài),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python對 MySQL 數(shù)據庫進行增刪改查的腳本

    python對 MySQL 數(shù)據庫進行增刪改查的腳本

    這篇文章主要介紹了python對 MySQL 數(shù)據庫進行增刪改查的腳本,幫助大家更好的利用python處理數(shù)據庫,感興趣的朋友可以了解下
    2020-10-10
  • django批量導入xml數(shù)據

    django批量導入xml數(shù)據

    從網上下載的一些數(shù)據,excel表格,xml文件,txt文件等有時候我們想把它導入數(shù)據庫,應該如何操作呢?下面我們就來詳細討論下。
    2016-10-10
  • LeetCode百錢買百雞python遞歸解法示例

    LeetCode百錢買百雞python遞歸解法示例

    這篇文章主要為大家介紹了LeetCode百錢買百雞題目python遞歸解法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 超簡單的Python HTTP服務

    超簡單的Python HTTP服務

    這篇文章主要介紹了超簡單的Python HTTP服務的實現(xiàn)過程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python中的裝飾器鏈(decorator chain)詳解

    Python中的裝飾器鏈(decorator chain)詳解

    在Python中,裝飾器是一種高級功能,它允許你在不修改函數(shù)或類代碼的情況下,為它們添加額外的功能,裝飾器通常用于日志記錄、性能測量、權限檢查等場景,當多個裝飾器應用于同一個函數(shù)或類時,形成裝飾器鏈,這篇文章主要介紹了Python中的裝飾器鏈詳解,需要的朋友可以參考下
    2024-06-06
  • Python 如何保存json文件并格式化

    Python 如何保存json文件并格式化

    這篇文章主要介紹了Python 如何保存json文件并格式化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python數(shù)據預處理之將類別數(shù)據轉換為數(shù)值的方法

    python數(shù)據預處理之將類別數(shù)據轉換為數(shù)值的方法

    下面小編就為大家?guī)硪黄猵ython數(shù)據預處理之將類別數(shù)據轉換為數(shù)值的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

巴楚县| 门头沟区| 夏河县| 和林格尔县| 交城县| 尚义县| 承德市| 南安市| 伊通| 重庆市| 鹰潭市| 清涧县| 双牌县| 安乡县| 恭城| 巴彦淖尔市| 公安县| 始兴县| 阜康市| 锡林郭勒盟| 阆中市| 交口县| 江华| 民丰县| 宣威市| 崇左市| 临颍县| 通城县| 娄底市| 黔江区| 辽源市| 青冈县| 安宁市| 富平县| 苏尼特右旗| 佛学| 思南县| 苏尼特右旗| 恭城| 广德县| 南川市|