失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【小游戏合集】之用Python制作一个滑雪小游戏~太适合上班摸鱼玩了。

【小游戏合集】之用Python制作一个滑雪小游戏~太适合上班摸鱼玩了。

时间:2020-08-18 03:28:29

相关推荐

【小游戏合集】之用Python制作一个滑雪小游戏~太适合上班摸鱼玩了。

导语:

哈喽铁汁们前几天不是许多城市都下起了鹅毛大雪嘛~(在湖南的小编真的时隔几年看到这么大的雪不要太激动了)不知道幸运的友友萌有好好玩雪了吗?雪仗跟雪人wo都是耍了的~😜😜

滑雪倒是没实现所以这期小编就想给大家整一个滑雪小游戏,让我们愉快的开始吧👇👇

想领取更多完整源码跟python学习资料可私信我或点击这行字体

正文:

开发工具

Python版本:3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

游戏预览:

原理介绍

游戏规则:

玩家通过“AD”键或者“←→”操控前进中的滑雪者,努力避开路上的树,尽量捡到路上的小旗。

如果碰到树,则得分减50,如果捡到小旗子,则得分加10。

逐步实现:

Step1:定义精灵类

由于游戏涉及到碰撞检测(滑雪者与树和小旗之间的碰撞),因此我们定义两个精灵类,分别用于代表滑雪者和障碍物(即树和小旗):

其中,滑雪者在前进过程中应当拥有向左,向右偏移的能力,并且在偏移时滑雪者向前的速度应当减慢才更加合乎常理,这样才能供玩家操作。同时,滑雪者应当拥有不同的姿态来表现自己滑行时的状态:

直线:

左偏一点:

左偏很多:

右偏一点:

右偏很多:

另外,尽管滑雪者的左右移动通过移动滑雪者本身实现,但是滑雪者的向前移动是通过移动障碍物实现的。

Step2:随机创建障碍物

现在我们需要定义一个随机创建障碍物的函数,以便在游戏主循环中调用:

Step3:游戏主循环

首先我们初始化一些参数:

其中障碍物创建两次的目的是便于画面衔接。

然后我们就可以定义主循环了:

主循环的内容包括:

事件监听、障碍物的更新、碰撞检测以及分数的展示等内容,总之还是很容易实现的。

Step4:其他

开始、结束界面这些,就靠大家自己发挥了,我就写了一个简单的开始界面:

效果:

附源码:

import pygame,sys,randomskier_images= ["skier_down.png","skier_right1.png","skier_right2.png","skier_left1.png","skier_left2.png"]class SkierClass(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("skier_down.png")self.rect = self.image.get_rect()self.rect.center = [320,100]self.angle = 0# 创建滑雪者def turn(self,direction):self.angle = self.angle + directionif self.angle < -2 :self.angle = -2if self.angle > 2 :self.angle = 2center = self.rect.centerself.image = pygame.image.load(skier_images[self.angle])self.rect = self.image.get_rect()self.rect.center = centerspeed = [self.angle , 6-abs(self.angle) * 2]return speed# 滑雪者转向方法def move(self,speed):self.rect.centerx = self.rect.centerx + speed[0]if self.rect.centerx <20 :self.rect.centerx = 20if self.rect.centerx >620:self.rect.centerx = 620# 滑雪者移动方法class ObstacleClass(pygame.sprite.Sprite):def __init__(self,image_file,location,type):pygame.sprite.Sprite.__init__(self)self.image_file = image_fileself.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.center = locationself.type = typeself.passed = False# 创建树和小旗子def update(self):global speedself.rect.centery -= speed[1] # 屏幕向上滚动if self.rect.centery <-32:self.kill() # 删除从屏幕上方滚下的障碍物def create_map():global obstacleslocations = []for i in range(10):row = random.randint(0,9)col = random.randint(0,9)location = [col *64 +20,row*64+20+640]if not (location in locations):locations.append(location)type = random.choice(["tree","flag"])if type == "tree":img = "skier_tree.png"elif type == "flag":img = "skier_flag.png"obstacle = ObstacleClass(img,location,type)obstacles.add(obstacle)# 创建窗口,并包含树与小旗子def animate():screen.fill([255,255,255])obstacles.draw(screen)screen.blit(skier.image,skier.rect)screen.blit(score_text,[10,10])pygame.display.flip()# 重新绘制画面pygame.init()screen = pygame.display.set_mode([640,640])clock = pygame.time.Clock()skier = SkierClass()speed = [0,6]obstacles = pygame.sprite.Group()map_position = 0points = 0create_map()font = pygame.font.Font(None,50)# 准备画面running = Truewhile running: # 主循环clock.tick(30) # 每秒更新30次图形for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:speed = skier.turn(-1)elif event.key == pygame.K_RIGHT:speed = skier.turn(1)# 检索用户输入skier.move(speed) # 移动滑雪者map_position += speed[1] # 滚动场景if map_position >= 640 :create_map()map_position = 0# 创建新场景hit = pygame.sprite.spritecollide(skier,obstacles,False)if hit:if hit[0].type == "tree" and not hit[0].passed:points -=100skier.image = pygame.image.load("skier_crash.png")score_text = font.render("Score:" +str(points),1,(0,0,0))pygame.time.delay(100)skier.iamge = pygame.image.load("skier_down.png")skier.angle = 0speed = [0,6]hit[0].passed = Trueelif hit[0].type == "flag" and not hit[0].passed:points +=10hit[0].kill()# 检测是否碰到树或者小旗子obstacles.update()score_text = font.render("Score:" +str(points),1,(0,0,0)) # 显示得分animate()pygame.quit()

执行效果:

end

这期滑雪小游戏就分享到这了结束了喜欢的铁汁们记得三连噢!家人们的支持是小编更新最大的动力💪💪

如果觉得《【小游戏合集】之用Python制作一个滑雪小游戏~太适合上班摸鱼玩了。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。