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的另外几种语言实现
Jan 29 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
python+opencv实现动态物体追踪
Jan 09 Python
python在每个字符后添加空格的实例
May 07 Python
Python工厂函数用法实例分析
May 14 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python中如何导入类示例详解
Apr 17 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
linux中nohup和后台运行进程查看及终止
Jun 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
工程部经理岗位职责
2013/12/08 职场文书
通信生自我鉴定
2014/01/18 职场文书
本科应届生求职信
2014/08/05 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python