python实现滑雪游戏
本文实例为大家分享了python实现滑雪游戏的具体代码,供大家参考,具体内容如下
#coding:utf-8
#滑雪小游戏
importsys
importpygame
importrandom
frompygame.localsimport*
#滑雪者类
classSkierClass(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为向前
defturn(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]
returnself.speed
#移动滑雪者
defmove(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:障碍物类别属性
classObstacleClass(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
#移动
defmove(self,num):
self.rect.centery=self.location[1]-num
#创建障碍物
defcreate_obstacles(s,e,num=10):
obstacles=pygame.sprite.Group()
locations=[]
foriinrange(num):
row=random.randint(s,e)
col=random.randint(0,9)
location=[col*64+20,row*64+20]
iflocationnotinlocations:
locations.append(location)
attribute=random.choice(["tree","flag"])
img_path='./images/tree.png'ifattribute=="tree"else'./images/flag.png'
obstacle=ObstacleClass(img_path,location,attribute)
obstacles.add(obstacle)
returnobstacles
#合并障碍物
defAddObstacles(obstacles0,obstacles1):
obstacles=pygame.sprite.Group()
forobstacleinobstacles0:
obstacles.add(obstacle)
forobstacleinobstacles1:
obstacles.add(obstacle)
returnobstacles
#显示游戏开始界面
defShow_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()
whileTrue:
foreventinpygame.event.get():
ifevent.type==QUIT:
sys.exit()
elifevent.type==pygame.KEYDOWN:
return
#主程序
defmain():
'''
初始化
'''
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)
'''
主循环
'''
#更新屏幕
defupdate():
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()
whileTrue:
#左右键控制人物方向
foreventinpygame.event.get():
ifevent.type==pygame.QUIT:
sys.exit()
ifevent.type==pygame.KEYDOWN:
ifevent.key==pygame.K_LEFTorevent.key==pygame.K_a:
speed=skier.turn(-1)
elifevent.key==pygame.K_RIGHTorevent.key==pygame.K_d:
speed=skier.turn(1)
skier.move()
distance+=speed[1]
ifdistance>=640andobstaclesflag==0:
obstaclesflag=1
obstacles0=create_obstacles(20,29)
obstacles=AddObstacles(obstacles0,obstacles1)
ifdistance>=1280andobstaclesflag==1:
obstaclesflag=0
distance-=1280
forobstacleinobstacles0:
obstacle.location[1]=obstacle.location[1]-1280
obstacles1=create_obstacles(10,19)
obstacles=AddObstacles(obstacles0,obstacles1)
#用于碰撞检测
forobstacleinobstacles:
obstacle.move(distance)
#碰撞检测
is_hit=pygame.sprite.spritecollide(skier,obstacles,False)
ifis_hit:
ifis_hit[0].attribute=="tree"andnotis_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
elifis_hit[0].attribute=="flag"andnotis_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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。