python實(shí)現(xiàn)滑雪游戲
更新時(shí)間:2020年02月22日 11:18:21 作者:微笑的丁總
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)滑雪游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了python實(shí)現(xiàn)滑雪游戲的具體代碼,供大家參考,具體內(nèi)容如下
# coding: utf-8 # 滑雪小游戲 import sys import pygame import random from pygame.locals import * # 滑雪者類 class SkierClass(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) # 滑雪者的朝向(-2到2) self.direction = 0 self.imgs = ["./images/skier_forward.png", "./images/skier_right1.png", "./images/skier_right2.png", "./images/skier_left2.png", "./images/skier_left1.png"] self.person = pygame.image.load(self.imgs[self.direction]) self.rect = self.person.get_rect() self.rect.center = [320, 100] self.speed = [self.direction, 6-abs(self.direction)*2] # 改變滑雪者的朝向 # 負(fù)數(shù)為向左,正數(shù)為向右,0為向前 def turn(self, num): self.direction += num self.direction = max(-2, self.direction) self.direction = min(2, self.direction) center = self.rect.center self.person = pygame.image.load(self.imgs[self.direction]) self.rect = self.person.get_rect() self.rect.center = center self.speed = [self.direction, 6-abs(self.direction)*2] return self.speed # 移動(dòng)滑雪者 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) # 障礙物類 # 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_path self.image = pygame.image.load(self.img_path) self.location = location self.rect = self.image.get_rect() self.rect.center = self.location self.attribute = attribute self.passed = False # 移動(dòng) def move(self, num): self.rect.centery = self.location[1] - num # 創(chuàng)建障礙物 def create_obstacles(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(["tree", "flag"]) img_path = './images/tree.png' if attribute=="tree" else './images/flag.png' 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 # 顯示游戲開(kāi)始界面 def Show_Start_Interface(Demo, width, height): Demo.fill((255, 255, 255)) tfont = pygame.font.Font('./font/simkai.ttf', width//4) cfont = pygame.font.Font('./font/simkai.ttf', width//20) title = tfont.render(u'滑雪游戲', True, (255, 0, 0)) content = cfont.render(u'按任意鍵開(kāi)始游戲', True, (0, 0, 255)) trect = title.get_rect() trect.midtop = (width/2, height/10) crect = content.get_rect() crect.midtop = (width/2, height/2.2) Demo.blit(title, trect) Demo.blit(content, crect) pygame.display.update() while True: for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == pygame.KEYDOWN: return # 主程序 def main(): ''' 初始化 ''' pygame.init() # 聲音 pygame.mixer.init() pygame.mixer.music.load("./music/bg_music.mp3") pygame.mixer.music.set_volume(0.4) pygame.mixer.music.play(-1) # 屏幕 screen = pygame.display.set_mode([640, 640]) pygame.display.set_caption('滑雪游戲-公眾號(hào):Charles的皮卡丘') # 主頻 clock = pygame.time.Clock() # 滑雪者 skier = SkierClass() # 記錄滑雪的距離 distance = 0 # 創(chuàng)建障礙物 obstacles0 = create_obstacles(20, 29) obstacles1 = create_obstacles(10, 19) obstaclesflag = 0 obstacles = AddObstacles(obstacles0, obstacles1) # 分?jǐn)?shù) font = pygame.font.Font(None, 50) score = 0 score_text = font.render("Score: "+str(score), 1, (0, 0, 0)) # 速度 speed = [0, 6] Show_Start_Interface(screen, 640, 640) ''' 主循環(huán) ''' # 更新屏幕 def update(): screen.fill([255, 255, 255]) pygame.display.update(obstacles.draw(screen)) screen.blit(skier.person, skier.rect) screen.blit(score_text, [10, 10]) pygame.display.flip() while True: # 左右鍵控制人物方向 for event in pygame.event.get(): if event.type == 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 = 1 obstacles0 = create_obstacles(20, 29) obstacles = AddObstacles(obstacles0, obstacles1) if distance >= 1280 and obstaclesflag == 1: obstaclesflag = 0 distance -= 1280 for obstacle in obstacles0: obstacle.location[1] = obstacle.location[1] - 1280 obstacles1 = create_obstacles(10, 19) obstacles = AddObstacles(obstacles0, obstacles1) # 用于碰撞檢測(cè) for obstacle in obstacles: obstacle.move(distance) # 碰撞檢測(cè) is_hit = pygame.sprite.spritecollide(skier, obstacles, False) if is_hit: if is_hit[0].attribute == "tree" and not is_hit[0].passed: score -= 50 skier.person = pygame.image.load("./images/skier_fall.png") update() # 摔倒后暫停一會(huì)再站起來(lái) pygame.time.delay(1000) skier.person = pygame.image.load("./images/skier_forward.png") skier.direction = 0 speed = [0, 6] is_hit[0].passed = True elif is_hit[0].attribute == "flag" and not is_hit[0].passed: score += 10 obstacles.remove(is_hit[0]) score_text = font.render("Score: "+str(score), 1, (0, 0, 0)) update() clock.tick(40) if __name__ == '__main__': main()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
django項(xiàng)目中使用手機(jī)號(hào)登錄的實(shí)例代碼
這篇文章主要介紹了django項(xiàng)目中使用手機(jī)號(hào)登錄的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08利用Python實(shí)現(xiàn)快捷操作文件和文件夾
shutil是Python標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,提供了許多用于文件和文件夾操作的高級(jí)接口,本文主要詳細(xì)介紹了Python如何使用shutil實(shí)現(xiàn)快捷操作文件和文件夾,需要的可以參考下2024-02-02Python實(shí)現(xiàn)特定場(chǎng)景去除高光算法詳解
這篇文章主要介紹了如何利用Python+OpenCV實(shí)現(xiàn)特定場(chǎng)景去除高光算法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2021-12-12Python利用GDAL模塊實(shí)現(xiàn)讀取柵格數(shù)據(jù)并對(duì)指定數(shù)據(jù)加以篩選掩膜
這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言中g(shù)dal模塊,對(duì)遙感影像數(shù)據(jù)進(jìn)行柵格讀取與計(jì)算,同時(shí)基于QA波段對(duì)像元加以篩選、掩膜的操作,需要的可以參考一下2023-02-02