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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
python实现在windows下操作word的方法
Apr 28 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python 查看文件的编码格式方法
Dec 21 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
flask框架视图函数用法示例
Jul 19 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
Python lambda表达式原理及用法解析
Aug 18 Python
python多线程和多进程关系详解
Dec 14 Python
pytorch 如何使用float64训练
May 24 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
第九节 绑定 [9]
2006/10/09 PHP
给多个地址发邮件的类
2006/10/09 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python 错误和异常小结
2013/10/09 Python
python实现的简单抽奖系统实例
2015/05/22 Python
Python中的with...as用法介绍
2015/05/28 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
销售主管岗位职责
2014/02/08 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
走群众路线学习笔记
2014/11/06 职场文书
财务部岗位职责
2015/02/03 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
关于分班的感言
2015/08/04 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript