python实现滑雪游戏


Posted in Python onFebruary 22, 2020

本文实例为大家分享了python实现滑雪游戏的具体代码,供大家参考,具体内容如下

# 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]
 # 改变滑雪者的朝向
 # 负数为向左,正数为向右,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
 # 移动滑雪者
 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
 # 移动
 def move(self, num):
 self.rect.centery = self.location[1] - num
 
 
# 创建障碍物
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
 
 
# 显示游戏开始界面
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'按任意键开始游戏', 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('滑雪游戏-公众号:Charles的皮卡丘')
 # 主频
 clock = pygame.time.Clock()
 # 滑雪者
 skier = SkierClass()
 # 记录滑雪的距离
 distance = 0
 # 创建障碍物
 obstacles0 = create_obstacles(20, 29)
 obstacles1 = create_obstacles(10, 19)
 obstaclesflag = 0
 obstacles = AddObstacles(obstacles0, obstacles1)
 # 分数
 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)
 '''
 主循环
 '''
 # 更新屏幕
 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)
 # 用于碰撞检测
 for obstacle in obstacles:
 obstacle.move(distance)
 # 碰撞检测
 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()
 # 摔倒后暂停一会再站起来
 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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python魔法方法-属性访问控制详解
Jul 25 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Django admin美化插件suit使用示例
Dec 12 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
如何基于python操作json文件获取内容
Dec 24 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
Python深度学习之Pytorch初步使用
May 20 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 #Python
Python栈的实现方法示例【列表、单链表】
Feb 22 #Python
python实现滑雪者小游戏
Feb 22 #Python
python实现拼图小游戏
Feb 22 #Python
Python双链表原理与实现方法详解
Feb 22 #Python
Python单链表原理与实现方法详解
Feb 22 #Python
python函数enumerate,operator和Counter使用技巧实例小结
Feb 22 #Python
You might like
实用函数2
2007/11/08 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP实现懒加载的方法
2015/03/07 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
sina的lightbox效果。
2007/01/09 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python实现tail -f 功能
2020/01/17 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
Python常用断言函数实例汇总
2020/11/30 Python
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
软件测试笔试题
2012/10/25 面试题
家具厂厂长岗位职责
2014/01/01 职场文书
房地产广告策划方案
2014/05/15 职场文书
5s标语大全
2014/06/23 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
本溪水洞导游词
2015/02/11 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers