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中MySQLdb模块用法实例
Nov 10 Python
使用python3实现操作串口详解
Jan 01 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
分享PyCharm的几个使用技巧
Nov 10 Python
从numpy数组中取出满足条件的元素示例
Nov 26 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
Python计算IV值的示例讲解
Feb 28 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 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
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
babel基本使用详解
2017/02/17 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
python pygame实现球球大作战
2019/11/25 Python
Python hashlib模块实例使用详解
2019/12/24 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
电大自我鉴定范文
2013/10/01 职场文书
教育系毕业生中文求职信范文
2013/10/06 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
医德医风演讲稿
2014/05/20 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
员工2014年度工作总结
2014/12/09 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python