<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
導語
Hey!下午好,我是木木子,關注我,一起玩遊戲吧~
微信小遊戲很久之前颳起了一股切水果熱潮,還記得嘛?我記得純粹是因為這個遊戲家裡的孩子依舊沒放棄~
比如:果盤忍者|水果切切切|一起切水果|全民切西瓜|王牌飛刀手......
那時候——各種同型別的切水果小遊戲層出不窮,並“前仆後繼”地紛紛霸佔小程式排行榜前列。那場面簡直是經典手遊《水果忍者》的強勢迴歸!
今天木木子手把手教大家寫一款簡單又好玩兒的切水果小遊戲,來比拼一下吧——battlebattle!
還沒有“切過水果”的朋友們你們就OUT了!
本文是寫的水果忍者小遊戲啦~還是用的大家所熟悉的Pygame模組啦~本文超詳細講解哦!
Python版本的水果忍者小編初始化設定是玩家3條生命值,切到相應的水果相應加分,切到易爆物
比如炸彈這些就會相應的減少生命值,在生命值內可以一直切切切,切的越多分數越高,相應的生命值耗盡即結束遊戲哦!快試試你能得幾分?
哈哈哈,今天也錄製了遊戲視訊的,看著視訊更有玩遊戲的感覺嘛~
本文木子是用的Python3、Pycharm寫的。模組Pygame、random隨機出現水果以及一些自帶的。
這裡模組安裝命令統一映象源豆瓣:
pip install -i https://pypi.douban.com/simple/ +模組名
player_lives = 3 # 生命 score = 0 # 得分 fruits = ['melon', 'orange', 'pomegranate', 'guava', 'bomb'] # 水果和炸彈
import pygame, sys import os import random
background = pygame.image.load('背景圖/02.png') # 背景 font = pygame.font.Font(os.path.join(os.getcwd(), '字型/comic.ttf'), 42) # 字型 score_text = font.render('Score : ' + str(score), True, (255, 255, 255)) # 得分的字型樣式
WIDTH = 800 HEIGHT = 500 FPS = 12 # gameDisplay的影格率,1/12秒重新整理一次 pygame.init() pygame.display.set_caption('水果忍者_csdn賬號:顧木子吖') # 標題 gameDisplay = pygame.display.set_mode((WIDTH, HEIGHT)) # 遊戲視窗 clock = pygame.time.Clock()
def generate_random_fruits(fruit): fruit_path = "images/" + fruit + ".png" data[fruit] = { 'img': pygame.image.load(fruit_path), 'x' : random.randint(100,500), # 水果在x座標軸上的位置 'y' : 800, 'speed_x': random.randint(-10,10), # 水果在x方向時的速度和對角線移動 'speed_y': random.randint(-80, -60), # y方向時的速度 'throw': False, # 如果生成水果的位置在gameDisplay之外,將被丟棄 't': 0, 'hit': False, } if random.random() >= 0.75: # 返回在[0.0, 1.0]範圍內的下一個隨機浮點數,以保持水果在遊戲中的顯示。 data[fruit]['throw'] = True else: data[fruit]['throw'] = False
data = {} for fruit in fruits: generate_random_fruits(fruit) def hide_cross_lives(x, y): gameDisplay.blit(pygame.image.load("images/red_lives.png"), (x, y))
font_name = pygame.font.match_font('comic.ttf') def draw_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)
def draw_lives(display, x, y, lives, image) : for i in range(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)
def show_gameover_screen(): gameDisplay.blit(background, (0,0)) draw_text(gameDisplay, "FRUIT NINJA!", 90, WIDTH / 2, HEIGHT / 4) if not game_over : draw_text(gameDisplay,"Score : " + str(score), 50, WIDTH / 2, HEIGHT /2) draw_text(gameDisplay, "Press any key to start the game", 64, WIDTH / 2, HEIGHT * 3 / 4) pygame.display.flip() waiting = True while waiting: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() if event.type == pygame.KEYUP: waiting = False
first_round = True game_over = True # 超過3個炸彈,終止遊戲迴圈 game_running = True # 管理遊戲迴圈 while game_running : if game_over : if first_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 for event in pygame.event.get(): # 檢查是否關閉視窗 if event.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') for key, value in data.items(): if value['throw']: value['x'] += value['speed_x'] # x方向上移動水果 value['y'] += value['speed_y'] # y方向上移動 value['speed_y'] += (1 * value['t']) # 遞增 value['t'] += 1 if value['y'] <= 800: gameDisplay.blit(value['img'], (value['x'], value['y'])) # 動態顯示水果 else: generate_random_fruits(key) current_position = pygame.mouse.get_pos() # 獲取滑鼠的位置,單位為畫素 if not value['hit'] and current_position[0] > value['x'] and current_position[0] < value['x']+60 and current_position[1] > value['y'] and current_position[1] < value['y']+60: if key == 'bomb': player_lives -= 1 if player_lives == 0: hide_cross_lives(690, 15) elif player_lives == 1 : hide_cross_lives(725, 15) elif player_lives == 2 : hide_cross_lives(760, 15) # 超過3次炸彈,提示遊戲結束,重置視窗 if player_lives < 0 : 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 if key != '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()
4.1 Part 1 動態視訊展示效果如下
Python版水果忍者,有趣有趣~
4.2 Part 2 靜態截圖展示效果如下
(1)遊戲進入介面——
(2)修改下背景圖進入的介面——這個感覺貌似好看點兒~
4.3 Part 3 靜態進入遊戲介面截圖如下
以上就是Python Pygame實戰之水果忍者遊戲的實現的詳細內容,更多關於Python Pygame水果忍者的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45