人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

學(xué)會(huì)用Python實(shí)現(xiàn)滑雪小游戲,再也不用去北海道啦

發(fā)布日期:2022-05-24 14:17 | 文章來源:腳本之家

一、效果圖

二、必要工具

Python3.7

pycharm2019

再然后配置它的文件,設(shè)置游戲屏幕的大小,圖片路徑。

代碼如下

'''配置文件'''
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')

三、全部源碼

'''滑雪者類'''
class SkierClass(pygame.sprite.Sprite):
 def __init__(self):
  pygame.sprite.Sprite.__init__(self)
  # 滑雪者的朝向(-2到2)
  self.direction = 0
  self.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]
 '''改變滑雪者的朝向. 負(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.image = pygame.image.load(self.imagepaths[self.direction])
  self.rect = self.image.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)
 '''設(shè)置為摔倒?fàn)顟B(tài)'''
 def setFall(self):
  self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
 '''設(shè)置為站立狀態(tài)'''
 def setForward(self):
  self.direction = 0
  self.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_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 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:
 return
  pygame.display.update()
 
 
'''顯示分?jǐn)?shù)'''
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)
 
 
'''更新當(dāng)前幀的游戲畫面'''
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)
 # 設(shè)置屏幕
 screen = pygame.display.set_mode(cfg.SCREENSIZE)
 pygame.display.set_caption('滑雪游戲 —— 九歌')
 # 游戲開始界面
 ShowStartInterface(screen, cfg.SCREENSIZE)
 # 實(shí)例化游戲精靈
 # --滑雪者
 skier = SkierClass()
 # --創(chuàng)建障礙物
 obstacles0 = createObstacles(20, 29)
 obstacles1 = createObstacles(10, 19)
 obstaclesflag = 0
 obstacles = AddObstacles(obstacles0, obstacles1)
 # 游戲clock
 clock = pygame.time.Clock()
 # 記錄滑雪的距離
 distance = 0
 # 記錄當(dāng)前的分?jǐn)?shù)
 score = 0
 # 記錄當(dāng)前的速度
 speed = [0, 6]
 # 游戲主循環(huán)
 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)
  # --更新當(dāng)前游戲幀的數(shù)據(jù)
  skier.move()
  distance += speed[1]
  if distance >= 640 and obstaclesflag == 0:
obstaclesflag = 1
obstacles0 = createObstacles(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 = 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 -= 50
 skier.setFall()
 updateFrame(screen, obstacles, skier, score)
 pygame.time.delay(1000)
 skier.setForward()
 speed = [0, 6]
 hitted_obstacles[0].passed = True
elif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:
 score += 10
 obstacles.remove(hitted_obstacles[0])
  # --更新屏幕
  updateFrame(screen, obstacles, skier, score)
  clock.tick(cfg.FPS)

到此這篇關(guān)于學(xué)會(huì)用Python實(shí)現(xiàn)滑雪小游戲,再也不用去北海道啦的文章就介紹到這了,更多相關(guān)Python滑雪小游戲內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部