【Python】爱不释手的弹球小游戏

前言

周末到了,不想给大家太多的压力,今天就给大家分享一个比较简单的弹球小游戏吧。这无聊的周末又有事可以做了,nice…

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

在这里插入图片描述

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

1.创建游戏的主界面

我们用Python的内置模块Tkinter来完成了,它是Python的标准GUI工具包,可以非常方便在制作GUI小工具,因为是跨平台的,可以方便的在

win和linux下运行,我们用Tk里的canvas绘图功能来制作一个小游戏.先来把主界面画出来

在这里插入图片描述

Python源码\素材\插件加Q群:906715085###
1).创建一个tk的实例

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

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

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

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

6).刷新一下界面

 

在这里插入图片描述

2.创建一个Ball球的类

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

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

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

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

•初始化canvas,

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

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

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

在这里插入图片描述

在这里插入图片描述

3.我们让球向上动起来

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

在这里插入图片描述

4.让球能回弹

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

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

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

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

在这里插入图片描述

在这里插入图片描述

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

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

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

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

5.增加球的运行方向

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

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

self.x = 0

self.y = -1
变成:

 starts=[-3,-2,-1,1,1,2,3]

    random.shuffle(starts)

    self.x=starts[0]#从list里面随机取一个

    self.y=-3#-3表示y轴运动的速度

 

6.增加小木板

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

在这里插入图片描述

在这里插入图片描述

7.让木板可以移动

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

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

def turn_left(self, evt):

    self.x = -2

def turn_right(self, evt):

    self.x = 2

 

在这里插入图片描述

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

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

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

•evt是向系统注册的事件

在这里插入图片描述

8.增加球和木板的碰撞

现在球也有了,木板也有了,而且可以左右挪动,现在最精彩的部分要上演了,就是增加球碰到木板之后反弹,那么如何判断球碰到木板

了,简单我们只要在球的类里面增加一个函数来判断是否碰撞了

def draw(self):

    --snip--

    if self.hit_paddle(pos) == True:

        self.y = -3

    --snip--

 

在这里插入图片描述

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

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

了,加几行代码就搞定了.

class Ball():

    def __init__(self,canvas,paddle,color):

        --snip--


        self.hit_bottom=False

    def draw(self):

        --snip--


        if pos[3]>=self.canvas_height:#判断当球的下沿大于等于主界面的高度

            self.hit_bottom=True

        --snip--
paddle=Paddle(canvas,"blue")

ball=Ball(canvas,paddle,"red")

while 1:

    if ball.hit_bottom==False and ball.paddle.started :

        ball.draw()

        paddle.draw()

    tk.update_idletasks()

    tk.update()

    time.sleep(0.01)

 

在这里插入图片描述

源码大概100行实现了简单的功能,其实这个游戏还可以增加很多功能,比如记录分数,增加游戏开始和结束的提示,增加木板和球的种类,

增加管卡和难度等等大家可以自己发挥一下, 写完很有成就感~~

在这里插入图片描述

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【Python】爱不释手的弹球小游戏 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python 实现校园网自动登录

    背景 我在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了。 但这种登录方式有个缺点:登录状态不会一直保持下去。即过一段时间就会掉线,然后你需要重新登陆才行。这个时间大概是一天。 这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑) 这个时候可以用python脚本解…

    Python开发 2023年4月2日
    00
  • 5 行 Python 代码就能让你的电脑永不息屏,这波逼必须装到…

    前言 首先,必须得承认Python 是一门优雅、易入门的编程语言。往往用很少量的代码,就能帮助你完成一件很漂亮的事儿。这也是我 使用python多年的心里话。比起那些难、麻烦的的软件,python圆了我的程序梦. 最开始学习 Python,不需要太过复杂。只要玩儿的开心就行,慢慢培养兴趣,等你上手后,你会学习的更有信心。 今天我们就来玩玩儿,5 行代码能做啥…

    Python开发 2023年4月2日
    00
  • 【Python+Selenium】 实现对excel文件的读写操作,轻轻松松一步到位

    前言 利用selenium在做自动化测试的时候,经常会用到数据来做批量测试,常用的方式有读取txt文件,xml文件,csv文件以及excel文 件几种。 使用 excel 来做数据管理时,需要利用 xlrd、xlwt 开源包来读写 excel。 1、安装xlrd、xlwt pip install xlrd pip install xlwt   2、对exce…

    Python开发 2023年4月2日
    00
  • 用Python实现股价的简单移动平均值

    前言 最近有没有想要买股票和基金的小伙伴,今天我要教大家一个神奇的东西,如何去计算平均值。没有人不喜欢钱吧… 用Python绘制出股价的5日均线和20日均线。众所周知,5日均线是短线交易的生死线,而20日均线是中长线趋势的分水岭。因此,基于这两 条均线,可以设计出一些简单的交易策略。 下面是我练习的代码: Python学习交流Q群:906715085### …

    Python开发 2023年4月2日
    00
  • Python 周期任务神器,太实用了

    前言 如果你想在Linux服务器上周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点: 1.不方便执行秒级的任务。 2.当需要执行的定时任务有上百个的时候,Crontab的管理就会特别不方便。 另外一个选择是 Celery,但是 Celery 的配置比较麻烦,如果你只是需要一个轻量级的调度工具,…

    Python开发 2023年4月2日
    00
  • Python—-异常处理、断言和路径处理,简单、清晰版

    1.路径处理 1.找模块:sys.path import sys print(sys.path)   – 1.理解 – 1.是python去查找包或模块 – 2.项目开始根目录,python内置的目录 – 3.虽然说python的安装目录下也可以存放我们写的模块,但是不建议(太多了,不大好找) – 4.如果以后你发现模块导入不了了 ,可以使用下sys.pat…

    Python开发 2023年4月2日
    00
  • 上班用Python采集热搜榜,堪称摸鱼神器

    前言 不知道大家在工作无聊时,有没有一种冲动:总想掏出手机,看看微博热搜在讨论什么有趣的话题,但又不方便直接打开微博浏 览,今天就和大家分享一个有趣的小爬虫,定时采集微博热搜榜&热评,下面让我们来看看具体的实现方法。 页面分析 热搜页 热榜首页:https://s.weibo.com/top/summary?cate=realtimehot   热榜…

    Python开发 2023年4月2日
    00
  • 基于 Python 的地理空间绘图(附源码)

    前言 大部分情况下,地理绘图可使用 Arcgis 等工具实现。但正版的 Arcgis 并非所有人可以承受。本文基于 Python 的 cartopy 和 matplotlib 等库,为地理空间绘图的代码实现提供参考。 所有所需库如下: gma、cartopy、matplotlib、numpy   更多内容可转到:地理与气象分析库—-使用指南(点击阅读原文…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部