如何用Python代码实现滑雪小游戏
本篇内容主要讲解“如何用Python代码实现滑雪小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用Python代码实现滑雪小游戏”吧!
必要工具
Python3.7
pycharm2019
再然后配置它的文件,设置游戏屏幕的大小,图片路径。
代码如下
'''配置文件'''importos'''FPS'''FPS=40'''游戏屏幕大小'''SCREENSIZE=(640,640)'''图片路径'''SKIER_IMAGE_PATHS=[os.path.join(os.getcwd(),'resources/images/skier_forward.png'),os.path.join(os.getcwd(),'resources/images/skier_right1.png'),os.path.join(os.getcwd(),'resources/images/skier_right2.png'),os.path.join(os.getcwd(),'resources/images/skier_left2.png'),os.path.join(os.getcwd(),'resources/images/skier_left1.png'),os.path.join(os.getcwd(),'resources/images/skier_fall.png')]OBSTACLE_PATHS={'tree':os.path.join(os.getcwd(),'resources/images/tree.png'),'flag':os.path.join(os.getcwd(),'resources/images/flag.png')}'''背景音乐路径'''BGMPATH=os.path.join(os.getcwd(),'resources/music/bgm.mp3')'''字体路径'''FONTPATH=os.path.join(os.getcwd(),'resources/font/FZSTK.TTF')全部源码
'''滑雪者类'''classSkierClass(pygame.sprite.Sprite):def__init__(self):pygame.sprite.Sprite.__init__(self)#滑雪者的朝向(-2到2)self.direction=0self.imagepaths=cfg.SKIER_IMAGE_PATHS[:-1]self.image=pygame.image.load(self.imagepaths[self.direction])self.rect=self.image.get_rect()self.rect.center=[320,100]self.speed=[self.direction,6-abs(self.direction)*2]'''改变滑雪者的朝向.负数为向左,正数为向右,0为向前'''defturn(self,num):self.direction+=numself.direction=max(-2,self.direction)self.direction=min(2,self.direction)center=self.rect.centerself.image=pygame.image.load(self.imagepaths[self.direction])self.rect=self.image.get_rect()self.rect.center=centerself.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)'''设置为摔倒状态'''defsetFall(self):self.image=pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])'''设置为站立状态'''defsetForward(self):self.direction=0self.image=pygame.image.load(self.imagepaths[self.direction])'''Function:障碍物类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_pathself.image=pygame.image.load(self.img_path)self.location=locationself.rect=self.image.get_rect()self.rect.center=self.locationself.attribute=attributeself.passed=False'''移动'''defmove(self,num):self.rect.centery=self.location[1]-num'''创建障碍物'''defcreateObstacles(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(list(cfg.OBSTACLE_PATHS.keys()))img_path=cfg.OBSTACLE_PATHS[attribute]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'''显示游戏开始界面'''defShowStartInterface(screen,screensize):screen.fill((255,255,255))tfont=pygame.font.Font(cfg.FONTPATH,screensize[0]//5)cfont=pygame.font.Font(cfg.FONTPATH,screensize[0]//20)title=tfont.render(u'滑雪游戏',True,(255,0,0))content=cfont.render(u'按任意键开始游戏',True,(0,0,255))trect=title.get_rect()trect.midtop=(screensize[0]/2,screensize[1]/5)crect=content.get_rect()crect.midtop=(screensize[0]/2,screensize[1]/2)screen.blit(title,trect)screen.blit(content,crect)whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()elifevent.type==pygame.KEYDOWN:returnpygame.display.update()'''显示分数'''defshowScore(screen,score,pos=(10,10)):font=pygame.font.Font(cfg.FONTPATH,30)score_text=font.render("Score:%s"%score,True,(0,0,0))screen.blit(score_text,pos)'''更新当前帧的游戏画面'''defupdateFrame(screen,obstacles,skier,score):screen.fill((255,255,255))obstacles.draw(screen)screen.blit(skier.image,skier.rect)showScore(screen,score)pygame.display.update()'''主程序'''defmain():#游戏初始化pygame.init()pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)#设置屏幕screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('滑雪游戏——九歌')#游戏开始界面ShowStartInterface(screen,cfg.SCREENSIZE)#实例化游戏精灵#--滑雪者skier=SkierClass()#--创建障碍物obstacles0=createObstacles(20,29)obstacles1=createObstacles(10,19)obstaclesflag=0obstacles=AddObstacles(obstacles0,obstacles1)#游戏clockclock=pygame.time.Clock()#记录滑雪的距离distance=0#记录当前的分数score=0#记录当前的速度speed=[0,6]#游戏主循环whileTrue:#--事件捕获foreventinpygame.event.get():ifevent.type==pygame.QUIT: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=1obstacles0=createObstacles(20,29)obstacles=AddObstacles(obstacles0,obstacles1)ifdistance>=1280andobstaclesflag==1:obstaclesflag=0distance-=1280forobstacleinobstacles0:obstacle.location[1]=obstacle.location[1]-1280obstacles1=createObstacles(10,19)obstacles=AddObstacles(obstacles0,obstacles1)forobstacleinobstacles:obstacle.move(distance)#--碰撞检测hitted_obstacles=pygame.sprite.spritecollide(skier,obstacles,False)ifhitted_obstacles:ifhitted_obstacles[0].attribute=="tree"andnothitted_obstacles[0].passed:score-=50skier.setFall()updateFrame(screen,obstacles,skier,score)pygame.time.delay(1000)skier.setForward()speed=[0,6]hitted_obstacles[0].passed=Trueelifhitted_obstacles[0].attribute=="flag"andnothitted_obstacles[0].passed:score+=10obstacles.remove(hitted_obstacles[0])#--更新屏幕updateFrame(screen,obstacles,skier,score)clock.tick(cfg.FPS)
到此,相信大家对“如何用Python代码实现滑雪小游戏”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。