import pygame

import sys

import random

from pygame.locals import *

class SkierClass(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

#滑雪者的朝向

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)

#障碍物类

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):

obstacles = pygame.sprite.Group()

locations = []

for i in range(20):

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'])

if attribute == 'tree':

img_path = './images/tree.png'

else:

img_path = './images/flag.png'

obstacle = ObstacleClass(img_path,location,attribute)

obstacles.add(obstacle)

return obstacles

def AddObstacles(obstacle0,obstacle1):

obstacles = pygame.sprite.Group()

for obstacle in obstacle0:

obstacles.add(obstacle)

for obstacle in obstacle1:

obstacles.add(obstacle)

return obstacles

#显示结束页面

def over(Demo,width,height):

Demo.fill((125,125,125))

vrert = pygame.font.Font('./font/abc.ttf',width//4)

vrerx = vrert.render('游戏结束',True,(255,0,255))

vrerg = vrerx.get_rect()

vrerg.midtop = (width/2,height)

Demo.blit(vrerx,vrerg)

pygame.display.update()

while True:

for event in pygame.event.get():

if event.type == QUIT:

pygame.quit()

sys.exit()

#显示游戏界面

def Show_Start_Interface(Demo,width,height):

tfont = pygame.font.Font('./font/abc.ttf',width//4)

cfont = pygame.font.Font('./font/simkai.ttf',width//20)

title = tfont.render(u'滑雪游戏',True,(255,255,255))

content = cfont.render(u'按任意键开始游戏',True,(255,255,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('滑雪游戏')

#创建时钟对象(控制循环频率)

clock = pygame.time.Clock()

#滑雪者实例化

skier = SkierClass()

#记录滑雪距离

distance = 0

#速度

speed = [0,6]

#分数

font = pygame.font.Font(None ,50)

score = 0

score_text = font.render('Score:' + str(score),True,((0,0,0)))

Show_Start_Interface(screen,640,640)

#创建障碍物

obstacle1 = create_obstacles(0,9)

obstacle2 = create_obstacles(10,19)

obstacles = AddObstacles(obstacle1,obstacle2)

#更新屏幕

def update():

screen.fill([random.randint(0,255),random.randint(0,255),random.randint(0,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:

distance = 0

for obstacle in obstacle2:

obstacle.location[1] -= 640

obstacle1 = obstacle2

obstacle2 = create_obstacles(10,19)

obstacles = AddObstacles(obstacle1,obstacle2)

for obstacle in obstacles:

obstacle.move(distance)

is_hit = pygame.sprite.spritecollide(skier,obstacles,True)

if is_hit:

if is_hit[0].attribute == 'tree':

score -= 50

skier.person = pygame.image.load('./images/skier_fall.png')

update()

pygame.time.delay(1000)

skier.person = pygame.image.load('./images/skier_fall.png')

update()

skier.direction = 0

speed = [0,6]

elif is_hit[0].attribute == 'flag':

score += 10

score_text = font.render('Score:' + str(score),True,(0,0,0))

if score < 0:

over(screen,640,640)

update()

clock.tick(40)

main()

基于pygame的滑雪小游戏相关推荐

  1. 基于pygame的射击小游戏制作(一)让飞船动起来

    基于pygame的射击小游戏制作(一)让飞船动起来 一.文件结构 alien_invasion.py 是整个系统的主文件,用来创建游戏中的一系列对象,ai_settings存储设置.screen存储显 ...

  2. 基于pygame做的小游戏

    最近一边学习pygame模块一边做了个小游戏,完成功能如下: 鼠标右键控制移动 人物跟随鼠标方向转动 鼠标左键控制攻击 动画效果 血量计数效果 画面比较乱入,请自行过滤.直接上代码: # coding ...

  3. 基于Pygame的Python小游戏,《这是一场滑稽与阴险的较量》

    选用贴吧最火的表情包滑稽和阴险表情包,肯定都认得出吧,背景由胡大佬提供,添加了很多细节,一款射击闯关类小游戏,滑稽会不断逼近阴险,在这之前你必须把阴险全部击落,左上角是你的生命,被滑稽撞到则减少一生命 ...

  4. 基于pygame的射击小游戏制作(二)射击子弹

    在本篇文章中,将学习如何创建子弹移动的元素,如何在屏幕中让子弹向上飞驰,如何删除超过屏幕边界的子弹. 1.编程思路 1.1 创建一个子弹 功能描述:玩家将按空格键时发射子弹,子弹在屏幕中向上穿行,抵达 ...

  5. 基于pygame的射击小游戏制作(五)绘制开始按钮

    在本篇文章中,主要学习如何在Pygame中绘制按钮,并点击按钮开始游 一.编程思路 1.1 修改游戏活动状态 在上篇文章中,我们通过game_active标志来控制游戏的进行与停止.我们需要在点击&q ...

  6. 基于pygame的射击小游戏制作(四)击杀外星人

    在本篇文章中,主要学习射击子弹时外星人消失,达到击杀外星人的效果 一.编程思路 1.1击杀 我们需要在碰撞发生后让外星人立即消失,故在更新子弹的位置后检测碰撞.我们创建一个字典,这个字典的每一个键都是 ...

  7. 基于pygame的射击小游戏制作(三)让外星人动起来

    在本篇文章中,将学习如何创建一群外星人,如何使用嵌套循环来创建元素网格,如何移动外星人 1.编程思路 1.1 创建外星人 创建Alien.py 文件,该文件配置与Ship.py类似,每个外星人最初都出 ...

  8. 基于PyGame的乒乓球和滑雪小游戏

    基于PyGame的乒乓球和滑雪游戏 昝道广 概述 前言 乒乓球游戏规则 乒乓球游戏图形界面 乒乓球游戏部分代码 滑雪小游戏图形界面 滑雪小游戏规则 滑雪小游戏部分代码 技术分析 后记 前言 首先阿广确 ...

  9. Python小游戏————滑雪小游戏代码开源

    ♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,励志爬上IT介顶峰,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约 ...

最新文章

  1. 收藏:因为有这篇Sublime Text使用教程,我立即卸载掉了Notepad+...
  2. linux c 报错 multiple definition of ‘xxx’ 解决方法
  3. sfdisk命令的使用技巧
  4. NYOJ 641 摧毁网络
  5. boost::mpl模块实现if相关的测试程序
  6. google mock分享
  7. python二分法查找算法_排序算法和二分法查找
  8. 死锁Demo、线程通信Demo
  9. jdk1.8之lambda表达式
  10. 电子计算机解锁,全电子计算机联锁系统信号解锁模块的研究
  11. nginx配置文件祥解
  12. Oracle统计某一年中的1-12个月的数据总和
  13. Zabbix触发器配置指定生效星期监控CPU使用率
  14. Excel中的常用快捷键
  15. 算法-获取质数(素数)数组
  16. android图片视频图片封装,详解android 视频图片混合轮播实现
  17. 过滤钩子驱动程序一(微软DDK文档,FLASHSKY翻译)
  18. Bp神经网络详解—matlab实现Bp神经网络
  19. 蓝牙的重命名与波特率修改
  20. 武汉工程大学计算机学院吴云韬,周华兵-武汉工程大学计算机科学与工程学院...

热门文章

  1. 如何有效使用项目管理工作流?
  2. 2022 新零售的转折与机会
  3. 硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)
  4. 永磁同步电机的矢量控制策略(十一)一一一弱磁控制
  5. 半导体设备英文缩写_科创市值风云系列:半导体设备龙头——中微公司
  6. 报错:E: Method https has died unexpectedly! E: Sub-process https received signalxs 4.
  7. Windows系统下彻底删除打印机驱动的方法
  8. mathtype 复制粘贴到word中公式显示不全的问题解决方法
  9. 关于代码家(干货集中营)共享知识点汇总系列——瞎推荐
  10. 计算机er应该选择保研还是出国?