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