【Python小游戏】当当当当 万众瞩目得《滑雪大冒险》来啦~(附源码)
生活随笔
收集整理的這篇文章主要介紹了
【Python小游戏】当当当当 万众瞩目得《滑雪大冒险》来啦~(附源码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前文
大家好!我是梨子同學!
希望大家多多支持我!哈哈
為了感謝每一個關注我的小可愛:💓每篇文章的項目源碼都是無償分享滴💓見文末!
很多csdn的功能還在研究中,還有小編的文筆不好勿怪,會慢慢進步跟大家一起學習的
小編也一直在學習編程,如果代碼小程序出現錯誤歡迎大家評論區留言哈!
最后——如果文章有幫助到你,記得“關注”、“點贊”、“評論”三連哦~
導語
雪崩來啦!快點跑呀!
故事小背景:(胡編亂造的)
在極地的雪峰上,住著一個年輕的狩獵者,沒有人知道其名字,因為沒人會來這個地方,雪峰上只
有企鵝、雪怪和獵鷹,一如既往的一天,狩獵者還在木屋中熟睡著,可是狩獵者不知道一場危機正
悄悄來臨,危險正逼近,巨大的聲響驚醒了狩獵者,狩獵者朝窗外一看,發現雪崩正快速逼近,雪
崩馬上就要淹沒房屋了,幸運的是,狩獵者被雪沖出了房屋,睡眼朦朧的狩獵者開始了逃避雪崩的
極限滑雪旅程,速度就是生命。
嘿嘿,今天小編來給大家制造一個Python《滑雪大冒險🏂》小游戲!這款小游戲操作特別簡單
啦,游戲開始之后按住方向鍵左右即可滑動不同的方向!好啦 我們正式開始吧👇
正文
冬天到了,我們來一場滑雪大冒險吧👇
效果展示:
?游戲開始——
?撞上樹之后一次減少30分,一顆🚩加10分!
主程序:
import sys import cfg import pygame import random'''滑雪者類''' class SkierClass(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)# 滑雪者的朝向(-2到2)self.direction = 0self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]self.image = pygame.image.load(self.imagepaths[self.direction])self.rect = self.image.get_rect()self.rect.center = [320, 100]self.speed = [self.direction, 6-abs(self.direction)*2]'''改變滑雪者的朝向. 負數為向左,正數為向右,0為向前'''def turn(self, num):self.direction += numself.direction = max(-2, self.direction)self.direction = min(2, self.direction)center = self.rect.centerself.image = pygame.image.load(self.imagepaths[self.direction])self.rect = self.image.get_rect()self.rect.center = centerself.speed = [self.direction, 6-abs(self.direction)*2]return self.speed'''移動滑雪者'''def move(self):self.rect.centerx += self.speed[0]self.rect.centerx = max(20, self.rect.centerx)self.rect.centerx = min(620, self.rect.centerx)'''設置為摔倒狀態'''def setFall(self):self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])'''設置為站立狀態'''def setForward(self):self.direction = 0self.image = pygame.image.load(self.imagepaths[self.direction])''' Function:障礙物類 Input:img_path: 障礙物圖片路徑location: 障礙物位置attribute: 障礙物類別屬性 ''' class ObstacleClass(pygame.sprite.Sprite):def __init__(self, img_path, location, attribute):pygame.sprite.Sprite.__init__(self)self.img_path = img_pathself.image = pygame.image.load(self.img_path)self.location = locationself.rect = self.image.get_rect()self.rect.center = self.locationself.attribute = attributeself.passed = False'''移動'''def move(self, num):self.rect.centery = self.location[1] - num'''創建障礙物''' def createObstacles(s, e, num=10):obstacles = pygame.sprite.Group()locations = []for i in range(num):row = random.randint(s, e)col = random.randint(0, 9)location = [col*64+20, row*64+20]if location not in locations:locations.append(location)attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))img_path = cfg.OBSTACLE_PATHS[attribute]obstacle = ObstacleClass(img_path, location, attribute)obstacles.add(obstacle)return obstacles'''合并障礙物''' def AddObstacles(obstacles0, obstacles1):obstacles = pygame.sprite.Group()for obstacle in obstacles0:obstacles.add(obstacle)for obstacle in obstacles1:obstacles.add(obstacle)return obstacles'''顯示游戲開始界面''' def ShowStartInterface(screen, screensize):screen.fill((255, 255, 255))tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)title = tfont.render(u'滑雪游戲', True, (255, 0, 0))content = cfont.render(u'按任意鍵開始游戲', True, (0, 0, 255))trect = title.get_rect()trect.midtop = (screensize[0]/2, screensize[1]/5)crect = content.get_rect()crect.midtop = (screensize[0]/2, screensize[1]/2)screen.blit(title, trect)screen.blit(content, crect)while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:returnpygame.display.update()'''顯示分數''' def showScore(screen, score, pos=(10, 10)):font = pygame.font.Font(cfg.FONTPATH, 30)score_text = font.render("Score: %s" % score, True, (0, 0, 0))screen.blit(score_text, pos)'''更新當前幀的游戲畫面''' def updateFrame(screen, obstacles, skier, score):screen.fill((255, 255, 255))obstacles.draw(screen)screen.blit(skier.image, skier.rect)showScore(screen, score)pygame.display.update()'''主程序''' def main():# 游戲初始化pygame.init()pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)# 設置屏幕screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('滑雪大冒險')# 游戲開始界面ShowStartInterface(screen, cfg.SCREENSIZE)# 實例化游戲精靈# --滑雪者skier = SkierClass()# --創建障礙物obstacles0 = createObstacles(20, 29)obstacles1 = createObstacles(10, 19)obstaclesflag = 0obstacles = AddObstacles(obstacles0, obstacles1)# 游戲clockclock = pygame.time.Clock()# 記錄滑雪的距離distance = 0# 記錄當前的分數score = 0# 記錄當前的速度speed = [0, 6]# 游戲主循環while True:# --事件捕獲for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT or event.key == pygame.K_a:speed = skier.turn(-1)elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:speed = skier.turn(1)# --更新當前游戲幀的數據skier.move()distance += speed[1]if distance >= 640 and obstaclesflag == 0:obstaclesflag = 1obstacles0 = createObstacles(20, 29)obstacles = AddObstacles(obstacles0, obstacles1)if distance >= 1280 and obstaclesflag == 1:obstaclesflag = 0distance -= 1280for obstacle in obstacles0:obstacle.location[1] = obstacle.location[1] - 1280obstacles1 = createObstacles(10, 19)obstacles = AddObstacles(obstacles0, obstacles1)for obstacle in obstacles:obstacle.move(distance)# --碰撞檢測hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False)if hitted_obstacles:if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed:score -= 50skier.setFall()updateFrame(screen, obstacles, skier, score)pygame.time.delay(1000)skier.setForward()speed = [0, 6]hitted_obstacles[0].passed = Trueelif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:score += 10obstacles.remove(hitted_obstacles[0])# --更新屏幕updateFrame(screen, obstacles, skier, score)clock.tick(cfg.FPS)'''run''' if __name__ == '__main__':main()配置文件代碼:
import os'''FPS''' FPS = 40 '''游戲屏幕大小''' SCREENSIZE = (640, 640) '''圖片路徑''' SKIER_IMAGE_PATHS = [os.path.join(os.getcwd(), 'resources/images/skier_forward.png'),os.path.join(os.getcwd(), 'resources/images/skier_right1.png'),os.path.join(os.getcwd(), 'resources/images/skier_right2.png'),os.path.join(os.getcwd(), 'resources/images/skier_left2.png'),os.path.join(os.getcwd(), 'resources/images/skier_left1.png'),os.path.join(os.getcwd(), 'resources/images/skier_fall.png') ] OBSTACLE_PATHS = {'tree': os.path.join(os.getcwd(), 'resources/images/tree.png'),'flag': os.path.join(os.getcwd(), 'resources/images/flag.png') } '''背景音樂路徑''' BGMPATH = os.path.join(os.getcwd(), 'resources/music/bgm.mp3') '''字體路徑''' FONTPATH = os.path.join(os.getcwd(), 'resources/font/FZSTK.TTF')總結
你們的支持是我最大的動力!!記得三連哦~mua?歡迎大家閱讀往期的文章哦~
關注小編獲取更多精彩內容!
?制作不易,記得一鍵三連哦!!?如需打包好的源碼+素材免費分享滴!!傳送門
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Python小游戏】当当当当 万众瞩目得《滑雪大冒险》来啦~(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Opencv实战】入门也能学会的「黑白
- 下一篇: AI扫雷有多牛?他国纷纷来求师学艺(附完