基于Pygame實現(xiàn)簡單的貪吃蛇游戲_第1頁
基于Pygame實現(xiàn)簡單的貪吃蛇游戲_第2頁
基于Pygame實現(xiàn)簡單的貪吃蛇游戲_第3頁
基于Pygame實現(xiàn)簡單的貪吃蛇游戲_第4頁
基于Pygame實現(xiàn)簡單的貪吃蛇游戲_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第基于Pygame實現(xiàn)簡單的貪吃蛇游戲讓蛇動起來

這里將蛇列表最后一位移除,然后將第一位的位置根據(jù)方向加減坐標(biāo)

snake.pop()

newTop=copy.deepcopy(snake[0])

#改變蛇的位置

ifmoveRight:

newTop.left+=FOODSNAKEWIDTH

ifmoveLeft:

newTop.left-=FOODSNAKEWIDTH

ifmoveUp:

newTop.top-=FOODSNAKEWIDTH

ifmoveDown:

newTop.top+=FOODSNAKEWIDTH

snake.insert(0,newTop)

這樣會有一個問題,如果超出屏幕呢,我們將超出屏幕,那么就會消失,我們只需要你移動第一個元素的時候,如果超出則將元素移動另一個位置。

#改變蛇的位置

ifmoveRight:

ifnewTop.right==WIDTH:

newTop.left=0

else:

newTop.left+=FOODSNAKEWIDTH

ifmoveLeft:

ifnewTop.left==0:

newTop.right==WIDTH

else:

newTop.left-=FOODSNAKEWIDTH

ifmoveUp:

ifnewTop.top==0:

newTop.bottom=HEIGHT

else:

newTop.top-=FOODSNAKEWIDTH

ifmoveDown:

ifnewTop.bottom==HEIGHT:

newTop.top=0

else:

newTop.top+=FOODSNAKEWIDTH

實現(xiàn)貪吃蛇拐彎

為了實現(xiàn)對應(yīng)的功能,我們將方向變量改為一個變量,這樣我們方便修改方向

#定義四個方向

#moveLeftmoveRightmoveUpmoveDown

#定義初始的方向

snakeDirection="moveRight"

----

省略的代碼

----

foreventinpygame.event.get():

ifevent.type==QUIT:

pygame.quit()

sys.exit()

ifevent.type==KEYDOWN:

ifevent.key==K_LEFT:

ifsnakeDirection=="moveRight":

snake.reverse()

snakeDirection="moveLeft"

ifevent.key==K_RIGHT:

ifsnakeDirection=="moveLeft":

snake.reverse()

snakeDirection="moveRight"

ifevent.key==K_UP:

ifsnakeDirection=="moveDown":

snake.reverse()

snakeDirection="moveUp"

ifevent.key==K_DOWN:

ifsnakeDirection=="moveUp":

snake.reverse()

snakeDirection="moveDown"

為了方便看到效果,我將mainClock.tick(1)設(shè)置為mainClock.tick(3)

實現(xiàn)隨機食物

這里用了很啰嗦的代碼,我自己也看不下去,有點含糊,這里為了簡單只設(shè)計了一個食物,遍歷屏幕上不是貪吃蛇的可以放食物的集合,然后隨機生成一個食物。

iflen(foods)foodnum:

canFoodColl=[]

#獲取當(dāng)前不是貪吃蛇的位置集合

forxinrange(sizeNum):

foryinrange(sizeNum):

foodExist=True

forsninsnake:

ifx*FOODSNAKEWIDTH==sn.leftandy*FOODSNAKEWIDTH==sn.top:

foodExist=False

break

iffoodExist:

canFoodColl.append({'x':x,'y':y})

f=canFoodColl[random.randint(0,len(canFoodColl))]

foods.append(pygame.Rect(f['x'],f['y'],FOODSNAKEWIDTH,FOODSNAKEWIDTH))

吃食物

這里用colliderect判斷二者是否相撞,然后食物集合置空,不減去貪吃蛇集合的最后一個元素。

iflen(foods)foodnum:

canFoodColl=[]

#獲取當(dāng)前不是貪吃蛇的位置集合

forxinrange(sizeNum):

foryinrange(sizeNum):

foodExist=True

forsninsnake:

ifx*FOODSNAKEWIDTH==sn.leftandy*FOODSNAKEWIDTH==sn.top:

foodExist=False

break

iffoodExist:

canFoodColl.append({'x':x,'y':y})

f=canFoodColl[random.randint(0,len(canFoodColl))]

foods.append(pygame.Rect(f['x']*FOODSNAKEWIDTH,f['y']*FOODSNAKEWIDTH,FOODSNAKEWIDTH,FOODSNAKEWIDTH))

print(f['x'])

print(f['y'])

else:

ifnewTop.colliderect(foods[0]):

foods=[]

eatFlg=True

print('xxx')

完整代碼

importpygame,sys,random

frompygame.localsimport*

importcopy

#定義屏幕的寬高

WIDTH=400

HEIGHT=400

#初始化屏幕設(shè)置窗口標(biāo)題

surface=pygame.display.set_mode((WIDTH,HEIGHT),0,32)

pygame.display.set_caption('貪吃蛇')

pygame.init()

mainClock=pygame.time.Clock()

#定義使用的顏色

BLACK=(0,0,0)

GREEN=(0,255,0)

WHITE=(255,255,255)

#設(shè)置蛇的初始長度

snakeWidth=4

#設(shè)置蛇的起始位置為(40,40)

snakeX=40

snakeY=40

#食物和蛇的寬度設(shè)置為8

FOODSNAKEWIDTH=8

#定義四個方向

#moveLeftmoveRightmoveUpmoveDown

#定義初

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論