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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。