利用Python寫了一個水果忍者小游戲_第1頁
利用Python寫了一個水果忍者小游戲_第2頁
利用Python寫了一個水果忍者小游戲_第3頁
利用Python寫了一個水果忍者小游戲_第4頁
利用Python寫了一個水果忍者小游戲_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第利用Python寫了一個水果忍者小游戲目錄前言:一、需要導入的包二、窗口界面設置三、隨機生成水果位置四、繪制字體五、玩家生命的提示六、游戲開始與結束的畫面七、游戲主循環(huán)最后

前言:

水果忍者到家都玩過吧,但是Python寫的水果忍者你肯定沒有玩過。今天就給你表演一個新的,用Python寫一個水果忍者。水果忍者的玩法很簡單,盡可能的切開拋出的水果就行。

今天就用python簡單的模擬一下這個游戲。在這個簡單的項目中,我們用鼠標選擇水果來切割,同時炸彈也會隱藏在水果中,如果切開了三次炸彈,玩家就會失敗。

一、需要導入的包

importpygame,sys

importos

importrandom

二、窗口界面設置

#游戲窗口

WIDTH=800

HEIGHT=500

FPS=15#gameDisplay的幀率,1/12秒刷新一次

pygame.init()

pygame.display.set_caption('水果忍者')#標題

gameDisplay=pygame.display.set_mode((WIDTH,HEIGHT))#固定窗口大小

clock=pygame.time.Clock()

#用到的顏色

WHITE=(255,255,255)

BLACK=(0,0,0)

RED=(255,0,0)

GREEN=(0,255,0)

BLUE=(0,0,255)

background=pygame.image.load('背景.jpg')#背景

font=pygame.font.Font(os.path.join(os.getcwd(),'comic.ttf'),42)#字體

score_text=font.render('Score:'+str(score),True,(255,255,255))#得分字體樣式

三、隨機生成水果位置

defgenerate_random_fruits(fruit):

fruit_path="images/"+fruit+".png"

data[fruit]={

'img':pygame.image.load(fruit_path),

'x':random.randint(100,500),

'y':800,

'speed_x':random.randint(-10,10),

'speed_y':random.randint(-80,-60),

'throw':False,

't':0,

'hit':False,

ifrandom.random()=0.75:

data[fruit]['throw']=True

else:

data[fruit]['throw']=False

data={}

forfruitinfruits:

generate_random_fruits(fruit)

這個函數用于隨機生成水果和保存水果的數據

x和y存儲水果在x坐標和y坐標上的位置。

Speed_x和speed_y是存儲水果在x和y方向的移動速度。它也控制水果的對角線移動。

throw,用于判斷生成的水果坐標是否在游戲之外。如果在外面,那么將被丟棄。

data字典用于存放隨機生成的水果的數據。

四、繪制字體

font_name=pygame.font.match_font('comic.ttf')

defdraw_text(display,text,size,x,y):

font=pygame.font.Font(font_name,size)

text_surface=font.render(text,True,WHITE)

text_rect=text_surface.get_rect()

text_rect.midtop=(x,y)

gameDisplay.blit(text_surface,text_rect)

Draw_text函數可以在屏幕上繪制文字。

get_rect()返回Rect對象。

X和y是X方向和Y方向的位置。

blit()在屏幕上的指定位置繪制圖像或寫入文字。

五、玩家生命的提示

#繪制玩家的生命

defdraw_lives(display,x,y,lives,image):

foriinrange(lives):

img=pygame.image.load(image)

img_rect=img.get_rect()

img_rect.x=int(x+35*i)

img_rect.y=y

display.blit(img,img_rect)

defhide_cross_lives(x,y):

gameDisplay.blit(pygame.image.load("images/red_lives.png"),(x,y))

img_rect獲取十字圖標的(x,y)坐標(位于最右上方)

img_rect.x設置下一個十字圖標距離前一個圖標35像素。

img_rect.y負責確定十字圖標從屏幕頂部開始的位置。

另外,搜索公眾號Linux就該這樣學后臺回復git書籍,獲取一份驚喜禮包。

六、游戲開始與結束的畫面

defshow_gameover_screen():

gameDisplay.blit(background,(0,0))

draw_text(gameDisplay,"FRUITNINJA!",90,WIDTH/2,HEIGHT/4)

ifnotgame_over:

draw_text(gameDisplay,"Score:"+str(score),50,WIDTH/2,HEIGHT/2)

draw_text(gameDisplay,"Pressakeytobegin!",64,WIDTH/2,HEIGHT*3/4)

pygame.display.flip()

waiting=True

whilewaiting:

clock.tick(FPS)

foreventinpygame.event.get():

ifevent.type==pygame.QUIT:

pygame.quit()

ifevent.type==pygame.KEYUP:

waiting=False

show_gameover_screen()函數顯示初始游戲畫面和游戲結束畫面。

pygame.display.flip()將只更新屏幕的一部分,但如果沒有參數傳遞,則會更新整個屏幕。

pygame.event.get()將返回存儲在pygame事件隊列中的所有事件。

如果事件類型等于quit,那么pygame將退出。

event.KEYUP事件,當按鍵被按下和釋放時發(fā)生的事件。

七、游戲主循環(huán)

first_round=True

game_over=True

game_running=True

whilegame_running:

ifgame_over:

iffirst_round:

show_gameover_screen()

first_round=False

game_over=False

player_lives=3

draw_lives(gameDisplay,690,5,player_lives,'images/red_lives.png')

score=0

foreventinpygame.event.get():

ifevent.type==pygame.QUIT:

game_running=False

gameDisplay.blit(background,(0,0))

gameDisplay.blit(score_text,(0,0))

draw_lives(gameDisplay,690,5,player_lives,'images/red_lives.png')

forkey,valueindata.items():

ifvalue['throw']:

value['x']+=value['speed_x']

value['y']+=value['speed_y']

value['speed_y']+=(1*value['t'])

value['t']+=1

ifvalue['y']=800:

gameDisplay.blit(value['img'],(value['x'],value['y']))

else:

generate_random_fruits(key)

current_position=pygame.mouse.get_pos()

ifnotvalue['hit']andcurrent_position[0]value['x']andcurrent_position[0]value['x']+60\

andcurrent_position[1]value['y']andcurrent_position[1]value['y']+60:

ifkey=='bomb':

player_lives-=1

ifplayer_lives==0:

elifplayer_lives==1:

hide_cross_lives(725,15)

elifplayer_lives==2:

hide_cross_lives(760,15)

ifplayer_lives0:

show_gameover_screen()

game_over=True

half_fruit_path="images/explosion.png"

else:

half_fruit_path="images/"+"half_"+key+".png"

value['img']=pygame.image.load(half_fruit_path)

value['speed_x']+=10

ifkey!='bomb':

score+=1

score_text=font.render('Score:'+str(score),True,(255,255,255))

value['hit']=True

else:

generate_random_fruits(key)

pygame.display.update()

clock.tick(FPS)

pygame.quit()

這是游戲的主循環(huán)

如果超過3個炸彈被切掉,game_over終止游戲,同時循環(huán)。

game_ru

溫馨提示

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

評論

0/150

提交評論