日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏

發(fā)布時間:2024/9/30 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:DataGo數(shù)據(jù)狗? ?鏈接:

https://mp.weixin.qq.com/s/fDcr1SfcbynLzHye7Q7VOg

大家小時候都玩過貪吃蛇吧?小編小時候可喜歡拿爸媽的手機玩了,厲害著呢!今天,小編就來用100行代碼實現(xiàn)一個簡易版的貪吃蛇。在網(wǎng)上,貪吃蛇教程蠻多的,但要安裝蠻多庫的,而且也不夠清晰,今天的代碼比較短,而且理解起來或者說你更改起來要簡單一些。最終會實現(xiàn)效果如下:

基本準(zhǔn)備

首先,我們需要安裝pygame庫,小編通過pip install pygame,很快就安裝好了。在完成貪吃蛇小游戲的時候,我們需要知道整個游戲分為四部分:

  • 游戲顯示:游戲界面、結(jié)束界面

  • 貪吃蛇:頭部、身體、食物判斷、死亡判斷

  • 樹莓:隨機生成

  • 按鍵控制:上、下、左、右

  • 游戲顯示

    首先,我們來初始化pygame,定義顏色、游戲界面的窗口大小、標(biāo)題和圖標(biāo)等。

    1#?初始化pygame
    2pygame.init()
    3fpsClock?=?pygame.time.Clock()
    4#?創(chuàng)建pygame顯示層
    5playSurface?=?pygame.display.set_mode((600,460))#窗口大小
    6pygame.display.set_caption('Snake?Game')#窗口名稱
    7#?定義顏色變量
    8redColour?=?pygame.Color(255,0,0)
    9blackColour?=?pygame.Color(0,0,0)
    10whiteColour?=?pygame.Color(255,255,255)
    11greyColour?=?pygame.Color(150,150,150)

    游戲結(jié)束界面,我們會顯示“Game Over!”和該局游戲所得分?jǐn)?shù),相關(guān)代碼如下:

    1#?定義gameOver函數(shù)
    2def?gameOver(playSurface,score):
    3????gameOverFont?=?pygame.font.SysFont('arial.ttf',54)?#游戲結(jié)束字體和大小
    4????gameOverSurf?=?gameOverFont.render('Game?Over!',?True,?greyColour)?#游戲結(jié)束內(nèi)容顯示
    5????gameOverRect?=?gameOverSurf.get_rect()
    6????gameOverRect.midtop?=?(300,?10)?#顯示位置
    7????playSurface.blit(gameOverSurf,?gameOverRect)
    8????scoreFont?=?pygame.font.SysFont('arial.ttf',54)?#得分情況顯示
    9????scoreSurf?=?scoreFont.render('Score:'+str(score),?True,?greyColour)
    10????scoreRect?=?scoreSurf.get_rect()
    11????scoreRect.midtop?=?(300,?50)
    12????playSurface.blit(scoreSurf,?scoreRect)
    13????pygame.display.flip()?#刷新顯示界面
    14????time.sleep(5)?#休眠五秒鐘自動退出界面
    15????pygame.quit()
    16????sys.exit()

    貪吃蛇和樹莓

    我們需要將整個界面看成許多20*20的小方塊,每個方塊代表一個單位,蛇的長度用單位來表示,同時我們采用列表的形式存儲蛇的身體。同時,我們都知道,樹莓的位置是隨機的。所以,我們需要讓樹莓出現(xiàn)的位置是游戲界面中的隨機位置,同時,每吃到一顆樹莓,就需要重新生成一顆新的樹莓,并且得分加1。相關(guān)初始化設(shè)置如下:

    1snakePosition?=?[100,100]?#貪吃蛇?蛇頭的位置
    2snakeSegments?=?[[100,100]]?#貪吃蛇?蛇的身體,初始為一個單位
    3raspberryPosition?=?[300,300]?#樹莓的初始位置
    4raspberrySpawned?=?1?#樹莓的個數(shù)為1
    5direction?=?'right'?#初始方向為右
    6changeDirection?=?direction
    7score?=?0?#初始得分

    如何控制貪吃蛇的運動軌跡呢,那么就需要按鍵控制了。我們通過鍵盤的↑↓←→和WSAD來控制,如果想直接退出游戲,則可以通過Esc鍵。這里需要強調(diào)的是,貪吃蛇里面是不能反方向運動,因此,我們需要進一步的增加限制條件:

    1#?檢測例如按鍵等pygame事件
    2for?event?in?pygame.event.get():
    3????if?event.type?==?QUIT:
    4????????pygame.quit()
    5????????sys.exit()
    6????elif?event.type?==?KEYDOWN:
    7????????#?判斷鍵盤事件
    8????????if?event.key?==?K_RIGHT?or?event.key?==?ord('d'):
    9????????????changeDirection?=?'right'
    10????????if?event.key?==?K_LEFT?or?event.key?==?ord('a'):
    11????????????changeDirection?=?'left'
    12????????if?event.key?==?K_UP?or?event.key?==?ord('w'):
    13????????????changeDirection?=?'up'
    14????????if?event.key?==?K_DOWN?or?event.key?==?ord('s'):
    15????????????changeDirection?=?'down'
    16????????if?event.key?==?K_ESCAPE:
    17????????????pygame.event.post(pygame.event.Event(QUIT))
    18#?判斷是否輸入了反方向
    19if?changeDirection?==?'right'?and?not?direction?==?'left':
    20????direction?=?changeDirection
    21if?changeDirection?==?'left'?and?not?direction?==?'right':
    22????direction?=?changeDirection
    23if?changeDirection?==?'up'?and?not?direction?==?'down':
    24????direction?=?changeDirection
    25if?changeDirection?==?'down'?and?not?direction?==?'up':
    26????direction?=?changeDirection

    方向設(shè)置好了,那么貪吃蛇蛇身變換怎么做啊?很簡單,我們只需要根據(jù)方向變換一下坐標(biāo)即可。

    1#?根據(jù)方向移動蛇頭的坐標(biāo)
    2if?direction?==?'right':
    3????snakePosition[0]?+=?20
    4if?direction?==?'left':
    5????snakePosition[0]?-=?20
    6if?direction?==?'up':
    7????snakePosition[1]?-=?20
    8if?direction?==?'down':
    9????snakePosition[1]?+=?20
    10#?增加蛇的長度
    11snakeSegments.insert(0,list(snakePosition))

    貪吃蛇游戲里面最重要的就是食物判斷和死亡判斷。首先是食物判斷,我們通過鍵盤按鍵來決定貪吃蛇的走向,以便它能吃到樹莓。如何判斷貪吃蛇有沒有吃到樹莓呢?很簡單,如果貪吃蛇蛇頭的位置和樹莓的位置重合了,也就是相同,那么貪吃蛇就吃到樹莓了,否則沒有。同時,一旦發(fā)生了樹莓被吃的情況,立刻重新隨機生成一個新的樹莓。相關(guān)代碼如下:

    1#?判斷是否吃掉了樹莓
    2if?snakePosition[0]?==?raspberryPosition[0]?and?snakePosition[1]?==?raspberryPosition[1]:
    3????raspberrySpawned?=?0
    4?else:
    5????snakeSegments.pop()?#若沒有吃掉樹莓,需將最后一單位的蛇身提出列表,此處和蛇身移動時位置變換有關(guān)
    6#?如果吃掉樹莓,則重新生成樹莓
    7if?raspberrySpawned?==?0:
    8????x?=?random.randrange(1,30)?#和游戲界面大小相關(guān)
    9????y?=?random.randrange(1,23)
    10????raspberryPosition?=?[int(x*20),int(y*20)]
    11????raspberrySpawned?=?1
    12????score?+=?1

    死亡判斷則分為兩類情況,一是觸碰到了游戲界面的邊界,二是貪吃蛇觸碰到了自己的身體。一旦發(fā)生死亡,則觸發(fā)gameover。

    1#?判斷是否死亡
    2if?snakePosition[0]?>?600?or?snakePosition[0]?0:?#若超過左右邊界,觸發(fā)gameover
    3????gameOver(playSurface,score)
    4if?snakePosition[1]?>?460?or?snakePosition[1]?0:?#若超過上下邊界,觸發(fā)gameover
    5????gameOver(playSurface,score)
    6for?snakeBody?in?snakeSegments[1:]:?#若觸碰到自己的身體,觸發(fā)gameover
    7????if?snakePosition[0]?==?snakeBody[0]?and?snakePosition[1]?==?snakeBody[1]:
    8????????gameOver(playSurface,score)

    貪吃蛇運動和吃掉樹莓的過程中,游戲界面需要不斷更新。同時,我們設(shè)置了游戲速度。

    1#?繪制pygame顯示層
    2playSurface.fill(blackColour) #蛇身為白色
    3for?position?in?snakeSegments:
    4????pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))
    5????pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0],?raspberryPosition[1],20,20))
    6
    7#?刷新pygame顯示層
    8pygame.display.flip()
    9#?控制游戲速度
    10fpsClock.tick(5)

    至此,我們就能完成一個貪吃蛇小游戲了。趕緊去實驗一下吧!

    完整的代碼如下:

    ?1import?pygame,sys,time,random
    ?2from?pygame.locals?import?*
    ?3#?定義顏色變量
    ?4redColour?=?pygame.Color(255,0,0)
    ?5blackColour?=?pygame.Color(0,0,0)
    ?6whiteColour?=?pygame.Color(255,255,255)
    ?7greyColour?=?pygame.Color(150,150,150)
    ?8def?gameOver(playSurface,score):
    ?9????gameOverFont?=?pygame.font.SysFont('arial.ttf',54)
    10????gameOverSurf?=?gameOverFont.render('Game?Over!',?True,?greyColour)
    11????gameOverRect?=?gameOverSurf.get_rect()
    12????gameOverRect.midtop?=?(300,?10)
    13????playSurface.blit(gameOverSurf,?gameOverRect)
    14????scoreFont?=?pygame.font.SysFont('arial.ttf',54)
    15????scoreSurf?=?scoreFont.render('Score:'+str(score),?True,?greyColour)
    16????scoreRect?=?scoreSurf.get_rect()
    17????scoreRect.midtop?=?(300,?50)
    18????playSurface.blit(scoreSurf,?scoreRect)
    19????pygame.display.flip()
    20????time.sleep(5)
    21????pygame.quit()
    22????sys.exit()
    23def?main():
    24????#?初始化pygame
    25????pygame.init()
    26????fpsClock?=?pygame.time.Clock()
    27????#?創(chuàng)建pygame顯示層
    28????playSurface?=?pygame.display.set_mode((600,460))
    29????pygame.display.set_caption('Snake?Game')
    30????#?初始化變量
    31????snakePosition?=?[100,100]?#貪吃蛇?蛇頭的位置
    32????snakeSegments?=?[[100,100]]?#貪吃蛇?蛇的身體,初始為一個單位
    33????raspberryPosition?=?[300,300]?#樹莓的初始位置
    34????raspberrySpawned?=?1?#樹莓的個數(shù)為1
    35????direction?=?'right'?#初始方向為右
    36????changeDirection?=?direction
    37????score?=?0?#初始得分
    38????while?True:
    39????????#?檢測例如按鍵等pygame事件
    40????????for?event?in?pygame.event.get():
    41????????????if?event.type?==?QUIT:
    42????????????????pygame.quit()
    43????????????????sys.exit()
    44????????????elif?event.type?==?KEYDOWN:
    45????????????????#?判斷鍵盤事件
    46????????????????if?event.key?==?K_RIGHT?or?event.key?==?ord('d'):
    47????????????????????changeDirection?=?'right'
    48????????????????if?event.key?==?K_LEFT?or?event.key?==?ord('a'):
    49????????????????????changeDirection?=?'left'
    50????????????????if?event.key?==?K_UP?or?event.key?==?ord('w'):
    51????????????????????changeDirection?=?'up'
    52????????????????if?event.key?==?K_DOWN?or?event.key?==?ord('s'):
    53????????????????????changeDirection?=?'down'
    54????????????????if?event.key?==?K_ESCAPE:
    55????????????????????pygame.event.post(pygame.event.Event(QUIT))
    56????????#?判斷是否輸入了反方向
    57????????if?changeDirection?==?'right'?and?not?direction?==?'left':
    58????????????direction?=?changeDirection
    59????????if?changeDirection?==?'left'?and?not?direction?==?'right':
    60????????????direction?=?changeDirection
    61????????if?changeDirection?==?'up'?and?not?direction?==?'down':
    62????????????direction?=?changeDirection
    63????????if?changeDirection?==?'down'?and?not?direction?==?'up':
    64????????????direction?=?changeDirection
    65????????#?根據(jù)方向移動蛇頭的坐標(biāo)
    66????????if?direction?==?'right':
    67????????????snakePosition[0]?+=?20
    68????????if?direction?==?'left':
    69????????????snakePosition[0]?-=?20
    70????????if?direction?==?'up':
    71????????????snakePosition[1]?-=?20
    72????????if?direction?==?'down':
    73????????????snakePosition[1]?+=?20
    74????????#?增加蛇的長度
    75????????snakeSegments.insert(0,list(snakePosition))
    76????????#?判斷是否吃掉了樹莓
    77????????if?snakePosition[0]?==?raspberryPosition[0]?and?snakePosition[1]?==?raspberryPosition[1]:
    78????????????raspberrySpawned?=?0
    79????????else:
    80????????????snakeSegments.pop()
    81????????#?如果吃掉樹莓,則重新生成樹莓
    82????????if?raspberrySpawned?==?0:
    83????????????x?=?random.randrange(1,30)
    84????????????y?=?random.randrange(1,23)
    85????????????raspberryPosition?=?[int(x*20),int(y*20)]
    86????????????raspberrySpawned?=?1
    87????????????score?+=?1
    88????????#?繪制pygame顯示層
    89????????playSurface.fill(blackColour)
    90????????for?position?in?snakeSegments:
    91????????????pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))
    92????????????pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0],?raspberryPosition[1],20,20))
    93????????#?刷新pygame顯示層
    94????????pygame.display.flip()
    95????????#?判斷是否死亡
    96????????if?snakePosition[0]?>?600?or?snakePosition[0]?0:
    97????????????gameOver(playSurface,score)
    98????????if?snakePosition[1]?>?460?or?snakePosition[1]?0:
    99????????????gameOver(playSurface,score)
    100????????for?snakeBody?in?snakeSegments[1:]:
    101????????????if?snakePosition[0]?==?snakeBody[0]?and?snakePosition[1]?==?snakeBody[1]:
    102????????????????gameOver(playSurface,score)
    103????????#?控制游戲速度
    104????????fpsClock.tick(5)
    105
    106if?__name__?==?"__main__":
    107????main()

    python爬蟲人工智能大數(shù)據(jù)公眾號

    總結(jié)

    以上是生活随笔為你收集整理的bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产69视频在线观看 | 久久在线免费观看视频 | 污污软件在线观看 | 久av在线 | 欧美一线天 | 国产精品视频麻豆 | 免费观看美女裸体网站 | 国产污视频在线观看 | 日韩中文字幕第一页 | 中文字幕在线观看视频网站 | 欧美日韩a | 国产精品乱码久久久久久 | 97免费超碰 | 国产乱码77777777 | 一级二级在线观看 | 亚洲图片另类小说 | 日本精品一区 | 久久九九色 | 免费成人美女在线观看 | 一级大黄色片 | 河北彩花av在线播放 | 3d动漫精品啪啪一区二区竹菊 | 久久天 | 看片网站在线观看 | 国产一久久| 999精品国产 | 日本精品中文字幕 | 在线观看三级视频 | 九色91丨porny丨丝袜 | 在线观看中文字幕码 | 亚洲最新视频 | 亚洲精品日韩在线观看 | 日韩毛片| 国产精品亚洲一区二区无码 | 欧美日韩成人在线视频 | 国产视频手机在线播放 | 96在线观看 | 免费成人深夜在线观看 | juliaann精品艳妇hd | 亚洲av无一区二区三区怡春院 | av网站免费在线 | 麻豆成人av| 99ri国产精品 | 国产精品夜夜夜爽张柏芝 | 日本一本视频 | 亚洲精品国产免费 | 亚洲av无码国产精品永久一区 | 色婷婷综合久久久久中文一区二区 | 番号动态图 | 免费观看日韩 | 国产一级影院 | 宅男噜噜噜66一区二区 | 一级黄色影院 | 亚洲av无码乱码在线观看性色 | 国产ts人妖系列高潮 | 高潮毛片 | 超碰在线观看99 | 精品久久一区 | 日韩成人在线看 | 成年人免费小视频 | 黄色三级三级 | 国产孕妇孕交大片孕 | 中文字幕婷婷 | 国产成人片 | 国产aⅴ爽av久久久久成人 | 国产精品2019| 国产又好看的毛片 | 污导航在线 | 久久国产美女 | 黄色调教视频 | 窝窝午夜看片 | 色哟哟免费观看 | 动漫av在线播放 | 97成人免费视频 | 成人性生活毛片 | av在线不卡播放 | 一本色道久久综合熟妇 | 欧美a视频 | 国产精品老熟女视频一区二区 | 国内特级毛片 | 手机成人免费视频 | 亚洲激情欧美色图 | 国产精品剧情一区 | 韩国主播青草55部完整 | 久久久久久免费毛片精品 | 在线观看二区 | 97视频久久 | 亚洲日本中文字幕在线 | 黄色av国产 | 国产精品国产三级国产普通话蜜臀 | 原神女裸体看个够无遮挡 | 精品国产免费视频 | 狠狠爱夜夜操 | 国产中文一区 | 欧美日韩乱| 一本到久久 | 日韩专区在线观看 | 天天操人人干 | 一区二区福利电影 |