版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第利用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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職煙草栽培與加工(煙草技術專題)試題及答案
- 2025年大學交通運輸(物流運輸規(guī)劃)試題及答案
- 2025年大學農村電氣技術(農村新能源利用)試題及答案
- 2026年生物科技(基因編輯技術)試題及答案
- 2025年高職獸醫(yī)服務(服務技術)試題及答案
- 2025年高職(野生動植物資源保護與利用)野生動物監(jiān)測試題及答案
- 2025年中職護理(老年護理)試題及答案
- 2025年高職電網監(jiān)控技術(電網監(jiān)控操作)試題及答案
- 2025年高職(中藥購銷員)中藥銷售綜合測試題及答案
- 2025年高職(現代農業(yè)技術)精準農業(yè)種植試題及答案
- 商超信息系統(tǒng)操作規(guī)定
- 如何做好一名護理帶教老師
- 房地產項目回款策略與現金流管理
- 花溪區(qū)高坡苗族鄉(xiāng)國土空間總體規(guī)劃 (2021-2035)
- 非連續(xù)性文本閱讀(中考試題20篇)-2024年中考語文重難點復習攻略(解析版)
- 專題13 三角函數中的最值模型之胡不歸模型(原卷版)
- 門診藥房西藥管理制度
- 新能源汽車生產代工合同
- 2025年中煤科工集團重慶研究院有限公司招聘筆試參考題庫含答案解析
- 消防救援預防職務犯罪
- 一體化泵站安裝施工方案
評論
0/150
提交評論