snake python語言實現

2021-08-19 13:35:24 字數 3543 閱讀 3280

import pygame,sys,time,random

from pygame.locals import * //引入必要模組

pygame.init() //pygame初始化

fpsclock=pygame.time.clock() //建立乙個控制遊戲速度的變數

playsu***ce=pygame.display.set_mode((640,480)) //新建乙個遊戲的圖形介面

pygame.display.set_caption('snake') //遊戲名

redcolour=pygame.color(255,0,0)

blackcolour=pygame.color(0,0,0)

whitecolour=pygame.color(255,255,255)

greycolour=pygame.color(150,150,150)

snakeposition=[100,100]

snakesegments=[[100,100],[80,100],[60,100]]

raspberryposition=[300,300]

raspberryspawned=1

direction='right'

changedirection=direction //定義一些顏色和座標供以後使用

def gameover():

gameoverfont=pygame.font.font('freesansbold.ttf',72)

gameoversurf=gameoverfont.render('game over',true,greycolour)

gameoverrect=gameoversurf.get_rect()

gameoverrect.midtop=(320,10)

playsu***ce.bilt(gameoversurf,gameoverrect)

pygame.display.flip()

time.sleep(5)

pygame.quit()

sys.exit() 定義乙個gameover函式,這樣方便以後直接呼叫

while true:

for event in pygame.event.get():

if event.type == quit:

pygame.quit() //按下esc鍵就退出

elif event.type == keydown:

if evnet.key == k_right or event.key == ord('d'):

changedirection='right'

if evnet.key == k_left or event.key == ord('a'):

changedirection='left'

if evnet.key == k_up or event.key == ord('w'):

changedirection='up'

if evnet.key == k_down or event.key == ord('s'):

changedirection='down' //控制蛇的移動

if event.key == k_escape:

pygame.event.post(pygame.event.event(quit))

if changedirection == 'right' and not direction == 'left':

direction=changedirection

if changedirection == 'left' and not direction == 'right':

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 //控制移動的距離

snakesegments.insert(0,list(snakeposition))

if snakeposition[0]==raspberryposition[0] and snakeposition[1]==raspberryposition[1]:

raspberryspawned=0

else:

snakesegments.pop() //當吃到士多啤梨時,蛇的長度逐漸增加

if raspberryspawned == 0:

x=random.randrange(1,32)

y=random.randrange(1,24)

raspberryposition=[int(x*20),int(y*20)]

raspberryspawned=1 //如果士多啤梨被吃掉,更新士多啤梨的位置

playsu***ce.fill(blackcolour) //背景色為黑色

for position in snakesegments:

pygame.draw.rect(playsu***ce,whitecolour,rect(position[0],position[1],20,20)) //蛇為白色

pygame.draw.rect(playsu***ce,redcolour,rect(raspberryposition[0],raspberryposition[1],20,20)) //士多啤梨為紅色

pygame.display.flip()

if snakeposition[0]>620 or snakeposition[0]<0:

gameover()

if snakeposition[1]>460 or snakeposition[1]<0:

gameover()

for snakebody in snakesegments[1:]:

if snakeposition[0]==snakebody[0] and snakeposition[1] == snakebody[1]:

gameover() //蛇死亡的條件

fpsclock.tick(30) //控制遊戲的速度

**寫完後出現了一些非預期的錯誤,比如程式未響應,仍在除錯中,上述**主要是提供乙個用python寫程式的思路,所以以後在寫大型的python程式時先把思路想好,按照思路一點一點實現,就可以把乙個複雜的大型程式分解,效率會很高。

KMP C語言實現

這是我的第一篇部落格,希望以後可以堅持下去!kmp原理 kmp是在字串中尋找特定子串的演算法。假設 給定字串 s abcdefabcdex 下標用i表示 子串 t abcdex 下標用j表示 我們希望在s中找到字串t,正常的方法是從s的第乙個字元 a 與t的第乙個字元 a 進行比較,然後依次比下去....

C語言實現memcpy

memcpy和memmove都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊 的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。程式設計師面試寶典中有例題 對應的原型如下 v...

棧 Stack C 語言實現

棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰...