范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆附带源码

  开发工具
  Python版本: 3.6.4
  相关模块:
  pygame模块;
  以及一些Python自带的模块。环境搭建
  安装Python并添加到环境变量,pip安装需要的相关模块即可。原理简介
  贪吃蛇的游戏规则应该不需要我多做介绍了吧T_T。写个贪吃蛇游戏其实还是很简单的。首先,我们进行一下游戏初始化:pygame.init() screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.display.set_caption("Greedy Snake —— 微信公众号:Charles的皮卡丘") clock = pygame.time.Clock() 复制代码
  然后定义一个贪吃蛇类:"""贪吃蛇类""" class Snake(pygame.sprite.Sprite):   def __init__(self, cfg, **kwargs):     pygame.sprite.Sprite.__init__(self)     self.cfg = cfg     self.head_coord = [random.randint(5, cfg.GAME_MATRIX_SIZE[0]-6), random.randint(5, cfg.GAME_MATRIX_SIZE[1]-6)]     self.tail_coords = []     for i in range(1, 3):       self.tail_coords.append([self.head_coord[0]-i, self.head_coord[1]])     self.direction = "right"     self.head_colors = [(0, 80, 255), (0, 255, 255)]     self.tail_colors = [(0, 155, 0), (0, 255, 0)] 复制代码
  其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过 键来控制贪吃蛇的行动:# --按键检测 for event in pygame.event.get():   if event.type == pygame.QUIT:     pygame.quit()     sys.exit()   elif event.type == pygame.KEYDOWN:     if event.key in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:       snake.setDirection({pygame.K_UP: "up", pygame.K_DOWN: "down", pygame.K_LEFT: "left", pygame.K_RIGHT: "right"}[event.key]) 复制代码
  需要注意的是,贪吃蛇不能180 大拐弯,只能90 地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:"""设置方向""" def setDirection(self, direction):   assert direction in ["up", "down", "right", "left"]   if direction == "up":     if self.head_coord[1]-1 != self.tail_coords[0][1]:       self.direction = direction   elif direction == "down":     if self.head_coord[1]+1 != self.tail_coords[0][1]:       self.direction = direction   elif direction == "left":     if self.head_coord[0]-1 != self.tail_coords[0][0]:       self.direction = direction   elif direction == "right":     if self.head_coord[0]+1 != self.tail_coords[0][0]:       self.direction = direction 复制代码
  然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:"""食物类""" class Apple(pygame.sprite.Sprite):   def __init__(self, cfg, snake_coords, **kwargs):     pygame.sprite.Sprite.__init__(self)     self.cfg = cfg     while True:       self.coord = [random.randint(0, cfg.GAME_MATRIX_SIZE[0]-1), random.randint(0, cfg.GAME_MATRIX_SIZE[1]-1)]       if self.coord not in snake_coords:         break     self.color = (255, 0, 0)   """画到屏幕上"""   def draw(self, screen):     cx, cy = int((self.coord[0] + 0.5) * self.cfg.BLOCK_SIZE), int((self.coord[1] + 0.5) * self.cfg.BLOCK_SIZE)     pygame.draw.circle(screen, self.color, (cx, cy), self.cfg.BLOCK_SIZE//2-2) # 随机生成一个食物 apple = Apple(cfg, snake.coords) 复制代码
  在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:"""更新贪吃蛇""" def update(self, apple):   # 根据指定的方向运动   self.tail_coords.insert(0, copy.deepcopy(self.head_coord))   if self.direction == "up":     self.head_coord[1] -= 1   elif self.direction == "down":     self.head_coord[1] += 1   elif self.direction == "left":     self.head_coord[0] -= 1   elif self.direction == "right":     self.head_coord[0] += 1   # 判断是否吃到了食物   if self.head_coord == apple.coord:     return True   else:     self.tail_coords = self.tail_coords[:-1]     return False 复制代码
  同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:apple = Apple(cfg, snake.coords) 复制代码
  最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时,游戏结束:"""判断游戏是否结束""" @property def isgameover(self):   if (self.head_coord[0] < 0) or (self.head_coord[1] < 0) or       (self.head_coord[0] >= self.cfg.GAME_MATRIX_SIZE[0]) or       (self.head_coord[1] >= self.cfg.GAME_MATRIX_SIZE[1]):     return True   if self.head_coord in self.tail_coords:     return True   return False 复制代码
  并显示一下游戏结束界面:endInterface(screen, cfg) 复制代码效果展示需要项完整目源的也可以点赞+关注私信【源码】
  经典吃豆豆小游戏原理简介效果展示
  游戏简介:
  玩家通过 键控制游戏的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。
  若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则游戏胜利,否则游戏失败。
  逐步实现:
  Step1:定义游戏精灵类
  首先,让我们先来明确一下该游戏需要哪些游戏精灵类。
  ① 墙类
  ② 食物类(即豆豆)
  ③ 角色类
  角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。
  显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:
  Step2:设计游戏地图
  利用Step1中定义的游戏精灵类,我们就可以开始设计游戏地图了。由于时间有限,我只写了一个关卡的游戏地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。游戏地图的设计包括以下四方面内容:
  ① 创建墙
  ② 创建门(一开始关幽灵用的)
  image.gif
  ③ 创建角色
  ④ 创建食物
  因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计游戏地图,要先创建完墙、门以及角色后再创建食物:
  Step3:设计游戏主循环
  接下来开始设计游戏主循环。首先是初始化:
  然后定义主函数:
  其中startLevelGame函数用于开始某一关游戏,其源代码如下:
  showText函数用于在游戏结束或关卡切换时在游戏界面中显示提示性文字,其源代码如下:
  文章到这里就结束了,感谢你的观看,记得点赞关注下篇文章分享消消乐小游戏为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,需要项目源的也可以点赞关注私信【源码】回馈每一个读者,希望能帮到你。

从科学角度,宇宙万物来源于中微子宇宙的初始存在,只有一种物就是中微子,只有中徽子才表现中性,所以,宇宙既不是一片黑暗,也不是一片光明,它只是灰蒙蒙的混沌。中徽子中包含了量子(能量粒子),中微子是正负量子的纽带。所科学家发现彼此距离最远的棕矮双星天文学家发现一对棕矮双星,是迄今为止所发现彼此距离最远的棕矮双星!这对名为CWISEJ014611的棕矮双星,相距约129天文单位,是冥王星与太阳距离的三倍远。由于棕矮星质量较小,揭示复杂量子材料中意想不到的性质一项新的研究描述了复杂量子材料中先前意想不到的性质。利用宾夕法尼亚大学开发的一项新技术,这些发现对未来量子器件和应用的发展具有启示意义。来源宾夕法尼亚大学一项新的研究描述了一种被称20W充电头怎么选?四款热门产品对比体验给你答案前言随着苹果手机相继取消原装充电器,同时新的快充总算到了20W,使用iPhone的小伙伴想要体验舒服的充电,选择一款快充头就十分必要了。原装的苹果20W表现中规中矩,同时149元的台积电代工的骁龙8Plus曝光,良率远超三星版骁龙8,背后原因?被卢伟冰在发布会上称为破芯片的骁龙8Gen1终于换工艺了,躺平的高通终于坐不住了。看着天玑样品机表现太抢眼,功耗发热更低,能效比吊打自家的旗舰骁龙8Gen1,终于想到换工艺了。拉跨5G时代下小米6的屹立2017年4月19日,小米6正式发布,它是当时国内首款搭载高通骁龙835处理器的手机。时隔五年,仍有超200万的用户在使用。在5G当代的今天,我们应该反思一下米六为什么依然能够屹立2022男孩取名虎年福上加福的男宝宝名字大全人们都说男孩要顶天立地,一个有福气的名字足以显示出家长们对男孩的深切期望。每对父母都希望男孩能一生幸福,好运相伴,那么最有福气的男孩都有哪些呢?和小编一起来看看吧!虎年福上加福的男2月国宝级美景!不输瑞士的神秘净土,最早绽放的万亩花海二月的寒潮还不肯走,连广东都过了个10年来最冷春节。但有些国宝级的美景,恰好在这个青黄不接的二月悄然上演。比婺源更神秘,四亿年才成型的万座山岭间,万亩花海正旺不输瑞士,最后的香格里没药的妙用小编导读乳香没药为临床常用的具有活血散瘀消肿止痛功效的药对,现代药理研究也证明两药均有良好的抗菌抗真菌作用,且抗菌谱广泛。之前已经介绍过乳香,今天小编为大家具体介绍一下没药。药用没咳嗽痰多?咳嗽,痰多,或者既咳嗽又痰多,如何化痰止咳呢?介绍三味中药。01半夏中药半夏可以说是祛湿化痰的好药,辛温,适合寒痰,湿痰。燥湿化痰,特别是五脏六腑中有湿痰。半夏有多种炮制品,其中姜长期抽烟但坚持喝茶的人,身体会怎样?喝茶会抵消吸烟的伤害吗在中国吸烟危害健康报告2020的报告中显示,我国吸烟人数超过3亿,15岁及以上人群吸烟率为26。6其中男性概率高达50。5,烟草每年会夺走我国100万人的生命茶究竟能给我们身体带来
高铁上到底能不能吃泡面?能吃,但不建议吃,你知道是为什么吗?这里是刘小顺的旅行和生活研究所。现在,高铁在我国已经变得越来越普及,大家出去旅游或者出差,很多时候都会选择乘坐高铁出行,相信大家应该都很熟悉高铁了。那么,很多人不知道,在高铁上到底德国科隆的靓丽风景德国科隆大教堂流经德国科隆的莱茵河2018年10月29日,我来到德国重工业城市科隆,德国科隆建有独树一帜的科隆大教堂,有风光秀丽的莱茵河等,同时,科隆还是我旅欧观光行程的最后一站。门头沟区军庄镇北四地区村内风景抓拍北四社区居委会标识牌社区村口标志性的渡桥引水渠萧瑟的村子空旷的路面寂静的山村初春时节,这是一个周日上午,风和日丽。可以看到干净的街道,湛蓝的天空下配合萧瑟的村庄街道,几乎没有什么过德国风景!开启新的一年,每个人都有着自己的仪式,吃一顿大餐换款好看的发型立个flag不管选择哪种,都是在跟过去告别,期待美好的未来。新的云游德国正式启程,让我们把绝美德国带给你,用美景装扮你北京心中有梦北京莫斯科我那超越了9288公里的国际列车之旅(5)7月15日,一行人相约北京站,要出发啦。虽然在国内国外已经走过了许多地方。国际列车圆梦北京莫斯科一直是我最想要的。k19为何明十三陵对外开放的景区很少,清朝皇陵却几乎全部对外开放?明朝和清朝作为中国历史上最后的两个封建王朝,这两个王朝的皇陵也成为了现代的热门旅游景点,但是如果去过清东陵和清西陵以及明十三陵的人都会发现那就清东陵和清西陵景区开放很多,而明十三陵为何越来越多的中国百年老店陷入没落?去北京不吃全聚德,去天津不吃狗不理现在仿佛已经成为了旅游消费者心中无形当中的一种共识。这些承载积淀着无数历史与回忆的百年老店已经失去了往日的荣光,跌落神坛,甚至令人厌弃。纵观我国现北京微旅行路线老北京街区童话森林养生咖啡店,来这些网红打卡地感受城市新活力北京微旅行线路一场世纪疫情起伏反复,出入境旅游全面停滞,跨省游团队游也受到很多限制。2021年,北京市文化和旅游局积极适应疫情防控催生的消费业态变化,策划开展了大北京新场景微旅行只中国最偏僻的2个国际机场,离市区70公里,坐车一小时以上作为旅游爱好者,每年会走很多地方,也会去很多地方,而乘坐飞机就是家常便饭,经常在外每年坐飞机也会花费很多钱,而机场的交通便捷也成了出行首先要考虑的问题,本来一些国际机场都是在城市周在你的旅行中有没有遇见过,不去后悔,去了更后悔的地方?在你的旅行中有没有遇见过不去后悔,去了更后悔的地方?相信有不少人都遇到过其实,旅行不必去追逐景区有几个A不必为了打卡而打卡旅行,应该是追寻一份你在平常的生活中未曾感受到的一切国内3雷殿生成为自唐朝以来首次走出罗布泊的人,后把经历出书获大卖在中国新疆的东南部,有一个湖泊,他的形状很像一个人的耳朵,因此也被成为地球之耳,这就是罗布泊。罗布泊自古就闻名遐迩,山海经对其也曾有过描写。在古时候,罗布泊地理位置优越,湖水众多,