热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python简单好玩的代码_只需要9步100行Python代码就可以实现一个简单又好玩的弹球游戏...

今天给大家分享一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python写小游戏还是蛮方便的

今天给大家分享一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python写小游戏还是蛮方便的,蛮有意思的~~

需要本文源码:私信回复【源码】即可获取啦

先看一下我们的最终效果图:

76d178511b45

我们分9步来讲解如何写这个小游戏

1.创建游戏的主界面

我们用Python的内置模块Tkinter来完成了,它是Python的标准GUI工具包,可以非常方便在制作GUI小工具,因为是跨平台的,可以方便的在win和linux下运行,我们用Tk里的canvas绘图功能来制作一个小游戏.先来把主界面画出来

76d178511b45

1).创建一个tk的实例

2).然后给这个窗口取一个名字叫game

3).通知窗口管理器调整布局大小,0,0表示不能被拉升

4).创建一个长为400*500的界面,背景色为默认,边框为厚度为0

5).通知窗口管理器注册组件

6).刷新一下界面

2.创建一个Ball球的类

好主界面有了,我们就开始创建球

1)首先我们创建一个Ball的类,这个类的初始化参数有两个:

一个canvas也就是画图用来画一个球,一个是color,表示球的颜色

2)在类的初始化的函数里面

初始化canvas,

画一个实心的球并记录下它的id

创建球的默认在主界面上的位置,我们把它放屏幕中间

然后让球出现在主界面上:

76d178511b45

76d178511b45

3.我们让球向上动起来

刚才在Ball类里面有一个draw函数,我们现在在draw里面加点东西,让球向上运动

76d178511b45

4.让球能回弹

1).第三步我们球能向上运动,现在我们要让它能碰到墙壁反弹

我们刚才是把self.canvas.move(self.id,0,-1)写死0,-1,表示x坐标不动,y坐标不断的-1也就是球在向上运动

现在我们把这两个值设成两个变量self.x,self.y,当我们的球运动到上边界的时候,就把self.y加1,也就向下运行,

当运动到下边界的时候,就把self.y减1,表示向上运行

76d178511b45

2).那么如何判断球已经碰壁了,很简单,我们动态的去球的坐标[x1,y1,x2,y2],

x1,y1 表示top-left 左上角的坐标

x2,y2 表示bottom-right右下角的坐标

获取了球的坐标之后(它是一个list),判断一下pos[1]和pos[3]就可以了

76d178511b45

5.增加球的运行方向

现在我们的球的运动方向是固定的,我们希望每次球的运动方向要随机,不然太low了,怎么做呢,很简单增加一个随机函数就可以了

在__init__()函数里面,我们改一下

76d178511b45

变成:

76d178511b45

6.增加小木板

现在我们的球已经可以在界面上到处乱窜了,我们现在增加一个木板来打弹球

76d178511b45

76d178511b45

7.让木板可以移动

我们通过绑定一些键盘事件,让木板可以移动

增加2个函数,左移和右移,有同学会问evt是啥,不急下面会说.

76d178511b45

在Paddle的初始化函数里面绑定两个键盘事件:

就是按键盘左键就是响应self.turn_left

就是按键盘右键就是响应self.turn_right

evt是向系统注册的事件

76d178511b45

8.增加球和木板的碰撞

现在球也有了,木板也有了,而且可以左右挪动,现在最精彩的部分要上演了,就是增加球碰到木板之后反弹,那么如何判断球碰到木板了,简单我们只要在球的类里面增加一个函数来判断是否碰撞了

76d178511b45

76d178511b45

9.判断当球运动到底部游戏结束

经过上面8步,游戏大体功能已经有了,那么如何判断游戏结束呢,我们设定只要球运动底部的时候(可以认为是球碰到了地面),游戏就失败了,加几行代码就搞定了.

76d178511b45

76d178511b45

源码大概100行实现了简单的功能,其实这个游戏还可以增加很多功能,比如记录分数,增加游戏开始和结束的提示,增加木板和球的种类,增加管卡和难度等等大家可以自己发挥一下, 写完很有成就感~~

欢迎留言评论!



推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
author-avatar
手机用户2502895085
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有