python編寫貪喫蛇遊戲

     關於編寫遊戲,是博主非常向往的東西(博主喜愛遊戲),編寫遊戲得一步一步的走!今天我簡單的編寫一下非常經典的遊戲貪喫蛇!!!!

效果圖:

首先引入pygame模塊

pip install pygame

關於編寫貪喫蛇有如下幾個步驟!依次思考

1,設置背景大小,即遊戲框大小,---像素(px)

2,設置顏色,蛇的顏色,背景顏色,豆子的顏色

#pygame遊戲庫,sys操控python運行的環境
import pygame,sys,random
#這個模塊包含所有pygame所使用的常亮
from  pygame.locals import  *
#1,定義顏色變量
#0-255  0黑色  255白色
redColor = pygame.Color(255,0,0)
#背景爲黑色
blackColor = pygame.Color(0,0,0)
#貪喫蛇爲白色
whiteColor = pygame.Color(255,255,255)

3,設置蛇的初始位置和長度,豆子的初始位置及被喫後隨機出現的位置(如下),及蛇的速度

4,設置按鍵,控制蛇的上下左右

5,設置蛇通過與豆子的位置重合判斷是否吃了豆子,此時蛇長度加一,豆子消失同時隨機出現

6,設置開始函數(1,,3,4,5都可以設置在開始函數裏),結束函數,並判斷死亡方式,及遊戲結束方式(直接退出,或者遊戲結束)

def main():
    #初始化pygame
    pygame.init()
    #定義一個變量來控制速度
    fpsClock=pygame.time.Clock()
    #創建pygame顯示層,創建一個界面
    playsurface=pygame.display.set_mode((640,480))
    pygame.display.set_caption('貪喫蛇')
    #初始化變量
    #貪喫蛇初始座標位置   (先以100,100爲基準)
    snakePosition = [100,100]
    #初始化貪喫蛇的長度列表中有個元素就代表有幾段身體
    snakeBody = [[100,100],[80,100],[60,100]]
    #初始化目標方向額位置
    targetPosition = [300,300]
    #目標方塊的標記 目的:判斷是否喫掉了這個目標方塊1 就是沒有喫 0就是喫掉
    targetflag = 1
    #初始化方向   --》往右
    direction = 'right'
    #定義一個方向變量(人爲控制  按鍵)
    changeDirection = direction
def gameover():    #遊戲結束
    pygame.quit()
    sys.exit()

關於遊戲運行可以當做一個時間,通過不斷地循環是蛇不斷地前進(設置按鍵,憑個人喜好按鍵)

 while True:

        for event in pygame.event.get():  #從隊列中獲取事件
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_d:
                    changeDirection = 'right'
                if event.key == K_a:
                    changeDirection = 'left'
                if event.key ==K_w:
                    changeDirection = 'up'
                if event.key ==K_s:
                    changeDirection = 'down'
                    #對應鍵盤上的esc文件
                if event.key == K_ESCAPE:
                    pygame.event.post(pygame.event.Event(QUIT))

確定方向!當蛇在運行時不可掉頭!不可前後,左後!

#確定方向
        if changeDirection =='left' and not direction =='right':
            direction = changeDirection
        if changeDirection =='right' and not direction =='left':
            direction = changeDirection
        if changeDirection =='up' and not direction =='down':
            direction = changeDirection
        if changeDirection =='down' and not direction =='up':
            direction = changeDirection

 這裏通過像素的加減確定蛇頭的移動向上或向下加減20px相當於向上下移動一步

 #根據方向移動蛇頭
        if direction =='right':
            snakePosition[0] +=20
        if direction =='left':
            snakePosition[0] -=20
        if direction =='up':
            snakePosition[1] -=20
        if direction =='down':
            snakePosition[1] +=20
        #增加蛇的長度
        snakeBody.insert(0,list(snakePosition))
        #如果貪喫蛇和目標方塊的位置重合
        if snakePosition[0] == targetPosition[0] and snakePosition[1] ==targetPosition[1]:
            targetflag= 0
        else:
            snakeBody.pop()
        if targetflag ==0:
            x = random.randrange(1,32)
            y = random.randrange(1,24)
            targetPosition = [int(x*20),int(y*20)]
            targetflag =1
        #填充背景顏色
        playsurface.fill(blackColor)

 設置蛇與豆子的顏色長寬

        for position in snakeBody:
            #第一個參數serface指定一個serface編輯區,在這個區域內繪製
            #第二個參數color:顏色
            #第三個參數:rect:返回一個矩形(xy),(width,height)
            #第四個參數:width:表示線條的粗細  width0填充  實心
            #化蛇
            pygame.draw.rect(playsurface,redColor,Rect(position[0],position[1],20,20))
            pygame.draw.rect(playsurface, whiteColor, Rect(targetPosition[0], targetPosition[1], 20, 20))

將上面的所作爲顯示到桌面,通過下面的方法實現

pygame.display.flip()

判斷遊戲結束

 if snakePosition[0] > 620 or snakePosition[0] < 0:
            gameover()
        elif snakePosition[1] >460 or snakePosition[1] <0:
            gameover()
        #控制遊戲速度
        fpsClock.tick(2)

基本的貪喫蛇步驟如上,如果要是添加得分或者開始和結束界面都憑自身能力了,大佬們肯定是灑灑水了

以下是完整代碼

#pygame遊戲庫,sys操控python運行的環境
import pygame,sys,random
#這個模塊包含所有pygame所使用的常亮
from  pygame.locals import  *
#1,定義顏色變量
#0-255  0黑色  255白色
redColor = pygame.Color(255,0,0)
#背景爲黑色
blackColor = pygame.Color(0,0,0)
#貪喫蛇爲白色
whiteColor = pygame.Color(255,255,255)


#定義遊戲結束的函數
def gameover():
    pygame.quit()
    sys.exit()
#定義main函數--》定義我們的入口函數
def main():
    #初始化pygame
    pygame.init()
    #定義一個變量來控制速度
    fpsClock=pygame.time.Clock()
    #創建pygame顯示層,創建一個界面
    playsurface=pygame.display.set_mode((640,480))
    pygame.display.set_caption('貪喫蛇')
    #初始化變量
    #貪喫蛇初始座標位置   (先以100,100爲基準)
    snakePosition = [100,100]
    #初始化貪喫蛇的長度列表中有個元素就代表有幾段身體
    snakeBody = [[100,100],[80,100],[60,100]]
    #初始化目標方向額位置
    targetPosition = [300,300]
    #目標方塊的標記 目的:判斷是否喫掉了這個目標方塊1 就是沒有喫 0就是喫掉
    targetflag = 1
    #初始化方向   --》往右
    direction = 'right'
    #定義一個方向變量(人爲控制  按鍵)
    changeDirection = direction
    while True:

        for event in pygame.event.get():  #從隊列中獲取事件
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_d:
                    changeDirection = 'right'
                if event.key == K_a:
                    changeDirection = 'left'
                if event.key ==K_w:
                    changeDirection = 'up'
                if event.key ==K_s:
                    changeDirection = 'down'
                    #對應鍵盤上的esc文件
                if event.key == K_ESCAPE:
                    pygame.event.post(pygame.event.Event(QUIT))

        #確定方向
        if changeDirection =='left' and not direction =='right':
            direction = changeDirection
        if changeDirection =='right' and not direction =='left':
            direction = changeDirection
        if changeDirection =='up' and not direction =='down':
            direction = changeDirection
        if changeDirection =='down' and not direction =='up':
            direction = changeDirection

        #根據方向移動蛇頭
        if direction =='right':
            snakePosition[0] +=20
        if direction =='left':
            snakePosition[0] -=20
        if direction =='up':
            snakePosition[1] -=20
        if direction =='down':
            snakePosition[1] +=20
        #增加蛇的長度
        snakeBody.insert(0,list(snakePosition))
        #如果貪喫蛇和目標方塊的位置重合
        if snakePosition[0] == targetPosition[0] and snakePosition[1] ==targetPosition[1]:
            targetflag= 0
        else:
            snakeBody.pop()
        if targetflag ==0:
            x = random.randrange(1,32)
            y = random.randrange(1,24)
            targetPosition = [int(x*20),int(y*20)]
            targetflag =1
        #填充背景顏色
        playsurface.fill(blackColor)
        for position in snakeBody:
            #第一個參數serface指定一個serface編輯區,在這個區域內繪製
            #第二個參數color:顏色
            #第三個參數:rect:返回一個矩形(xy),(width,height)
            #第四個參數:width:表示線條的粗細  width0填充  實心
            #化蛇
            pygame.draw.rect(playsurface,redColor,Rect(position[0],position[1],20,20))
            pygame.draw.rect(playsurface, whiteColor, Rect(targetPosition[0], targetPosition[1], 20, 20))

        #更新顯示到屏幕表面
        pygame.display.flip()
        #判斷是否遊戲結束
        if snakePosition[0] > 620 or snakePosition[0] < 0:
            gameover()
        elif snakePosition[1] >460 or snakePosition[1] <0:
            gameover()
        #控制遊戲速度
        fpsClock.tick(2)
#   啓動入口函數
if __name__ =='__main__':
    main()


運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章