python實現貪吃蛇小游戲
關于編寫游戲,是博主非常向往的東西(博主喜愛游戲),編寫游戲得一步一步的走!今天我簡單的編寫一下非常經典的游戲貪吃蛇?。。?!
效果圖:

首先引入pygame模塊
pip install pygame
關于編寫貪吃蛇有如下幾個步驟!依次思考
1、設置背景大小,即游戲框大小,---像素(px)
2、設置顏色,蛇的顏色,背景顏色,豆子的顏色
#pygame游戲庫,sys操控python運行的環(huán)境 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()
#創(chuàng)建pygame顯示層,創(chuàng)建一個界面
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()
關于游戲運行可以當做一個時間,通過不斷地循環(huán)是蛇不斷地前進(設置按鍵,憑個人喜好按鍵)
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編輯區(qū),在這個區(qū)域內繪制 #第二個參數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運行的環(huán)境
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()
#創(chuàng)建pygame顯示層,創(chuàng)建一個界面
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編輯區(qū),在這個區(qū)域內繪制
#第二個參數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()
運行結果:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
用Python展示動態(tài)規(guī)則法用以解決重疊子問題的示例
這篇文章主要介紹了用Python展示動態(tài)規(guī)則法用以解決重疊子問題的一個棋盤游戲的示例,動態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結構性質的問題,且耗時間往往遠少于樸素解法,需要的朋友可以參考下2015-04-04
Python?Setuptools的?setup.py實例詳解
setup.py是一個?python?文件,它的存在表明您要安裝的模塊/包可能已經用?Setuptools?打包和分發(fā),這是分發(fā)?Python?模塊的標準。?它的目的是正確安裝軟件,本文給大家講解Python?Setuptools的?setup.py感興趣的朋友跟隨小編一起看看吧2022-12-12

