弹球游戏

[unity] unity学习——弹球游戏 一、学习内容 通过弹球游戏,来熟悉unity的简单操作,以及一些脚本的添加及控制。 弹球游戏:  即只有一个底盘和一个球,控制底盘去接球,球撞到底盘后随机一个角度反弹。没接住球就算结束。 二、弹球游戏的制作 1、打开unity5,新建一个3d工程。 2、在Hierarchy视图框中添加一个cube对象,并命名Plate,作为底盘: 这个对象的Inspector视图的Transfor 阅读详情

原本在这里 finalobject.cn

刚刚开始接触python,在实验室翻到了一本python的书,感觉像是给零基础,甚至可能是小孩看的,名字记不起来了,反正看着很有意思,教你写几个小游戏。花了两天时间follow了两个游戏,一个是这个,另外一个是火柴人。

把自己实现的过程,还有一些对于tkinter和python的理解记录下来。

github:https://github.com/finalObject/hoodle

极其简单的界面

环境问题

一开始写这个代码的时候是可以顺利导入tkinter的,但是能到我想总结一下,写这篇文章的时候,无论是python2还是python3,都无法顺利导入tkinter/Tkinter了。

原因的话应该是我卸载过mac自带的python,然后用homebrew重新安装过,导致环境不一样了。据说tkinter是python自带的,不应该出现这种情况,然后看了官网,有这么一段话

If you are using Python (prior to 3.7) from a python.org 64-bit/32-bit Python installer for macOS 10.6 and later, you should only use IDLE or tkinter with an updated third-party Tcl/Tk 8.5 (not 8.6), like ActiveTcl 8.5 installed.

貌似说新版本python3需要使用第三方TCL/TK才能正常使用。我就是直接安装了这里推荐的activetcl,安装完毕之后python3能够正常导入tkinter了。另外,安装完之后多了一个叫做wish的桌面软件,应该也是这个第三方库自带的一个桌面程序吧。

基本结构

tkinter这个库貌似特别的轻量,很多人并不推荐做大型的桌面程序开发,不过作为入门python图形界面的话我感觉再好不过了,毕竟图形界面编程的思路大致都是相通的。

在tkinter里,可以用Tk()获取一个窗口,然后在初始化一个画布和这个窗口绑定起来,之后再创造画布中使用到的一个个元素,每个元素拥有图形啊坐标啊之类的属性,并且拥有一个draw()函数,更新其在画布上的状态。设置好所有元素的属性和行为之后,只需要在主程序里不断更新画布就可以了。

当然上面这个思路并不是必须的,只不过是相对来讲比较好的一个实现方式。tkinter并不限制你用其他的形式去实现图形界面,本身就只是提供了两个(目前使用到的)输入输出的函数,一个是输入绑定函数,用来检测键盘输入,一个是move函数,在往画布上添加元素的时候,会返回一个id,可以用过id来控制该元素在画布上的显示。

代码实现

项目中是三个py文件,分别是main.py,ball.py以及paddle.py,后面两个文件分别定义了ball和paddle两个类。

main.py:

from tkinter import *
import random
import time
from ball import *
from paddle import *





#初始化窗口 tk = Tk() tk.title("Game") tk.resizable(0,0) tk.wm_attributes("-topmost",1) #添加绑定在这个窗口上的画布 canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) #根据画布内容调整大小 canvas.pack() #更新窗口 tk.update(); #初始化自己定义的两个对象,球拍和球 paddle = Paddle(canvas,'gray') ball = Ball(canvas,'red',paddle) #开始主循环,不断更新 while 1: ball.draw() paddle.draw() tk.update_idletasks() tk.update() time.sleep(0.01)

paddle.py:

from tkinter import *
import random
import time
class Paddle:
    def __init__(self,canvas,color):
        self.canvas = canvas
        #在画布中创建一个矩形,代表球拍,矩形的id返还给球拍类,使得后面能够对其进行空寂
        self.id = canvas.create_rectangle(0,0,100,10,fill=color)
        #设置这个矩形在画布中的初始位置
        self.canvas.move(self.id,200,300)
        #这是球拍水平移动的速度
        self.x=0
        self.canvas_width=self.canvas.winfo_width()
        #按键绑定
        self.canvas.bind_all('<KeyPress-Left>',self.turn_left)
        self.canvas.bind_all('<KeyPress-Right>',self.turn_right)
    #对应的按键绑定函数   
    def turn_left(self,evt):
        #如果按下左键,球拍的速度就变更为-5,也就是往左的速度
        self.x = -5
    def turn_right(self,evt):
        #同理
        self.x = 5
    def draw(self):
        #根据速度更新自己在画布中的位置
        self.canvas.move(self.id,self.x,0)
        #获取其在画布中的位置,pos是一个数组[x1,y1,x2,y2],应该就是左上点和右下点的坐标
        pos = self.canvas.coords(self.id)
        #如果碰触边界,速度变为反方向的1
        if pos[0]<=0:
            self.x=1
        if pos[2]>=self.canvas_width:
            self.x=-1
ball.py:
from tkinter import *
import random
import time

class Ball:
    def __init__(self,canvas,color,paddle):
        self.canvas = canvas
        self.paddle = paddle
        self.id = canvas.create_oval(10,10,25,25,fill=color)
        self.canvas.move(self.id,245,100)
        #这个数组是引入随机数,使得球横向速度是这个数组中的随机一个
        starts=[-3,-2,-1,1,2,3]
        #改变数组的元素的位置,随机的
        random.shuffle(starts)
        self.x = starts[0]
        self.y = -3
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()
        #这个是触底信号,如果小球触底了,那么变成True
        self.hit_bottom = False
    def hit_bon(self):
        #边界触碰检测,这个球的边界触碰仍然使用左上点和右下点(是有一点不科学)
        pos = self.canvas.coords(self.id)
        posP = self.canvas.coords(self.paddle.id)
        #如果触边,对应方向的速度就变成反方向的3
        if pos[1] <= 0:
            self.y = 3
        if pos[3]>=self.canvas_height:
            self.y = -3
            #如果触底,设置标志位,可以作为游戏结束的依据
            self.hit_bottom = True
        if pos[0] <= 0:
            self.x = 3
        if pos[2] >= self.canvas_width:
            self.x = -3
    #和球拍的碰触检测,和边界触碰检测同理,不过这个并不会更新速度,而是吧信号返回
    def hit_paddle(self):
        pos = self.canvas.coords(self.id)
        paddle_pos = self.canvas.coords(self.paddle.id)
        if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]:
            if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]:
                return True
        return False
    def draw(self):
        self.canvas.move(self.id,self.x,self.y)
        self.hit_bon()
        #检测到碰触球拍,修改速度
        if self.hit_paddle()==True:
            self.y = -self.y

有一点点需要讨论的地方就是,ball里面虽然设置了触底信号,但是却没用实际用起来。不过github上应该是用起来了,就是把main.py中(我这个代码插件写上中文注释行号显示貌似就会有问题)

ball.draw()

修改为

if ball.hit_bottom==False:
    ball.draw()

这样的话球一旦触底,就会被粘在底边上啦哈哈。不过就在我写文章的时候我才意识到,这样其实是不太好的,虽然直观得就是球一旦触底就不再更新位置了,但是这个逻辑判断不应该加载主函数里,这个不应该是主函数需要考虑的问题。

这段判断代码应该加载ball自己的draw函数里,如果触底,就不进行移动以及其他的检测。

另外注意到画布里的move函数,发现在两个类初始化的时候,这个move函数里输入的直接就是初始坐标,但是在每次的更新中,move函数输入的却是代表速度的x和y,也就是单位时间的偏移量。其实是这样的,每个元素被创建的时候,默认的位置是(0,0),然后所以第一次调用move函数的时候,输入的是偏移量,但是由于原来的初始位置是(0,0),所以结果就是最终坐标也就是偏移量。

python实现弹球小游戏 跟着趣味开发python一起实现的弹球小游戏 阅读详情

相关推荐

使用Scratch 3.0制作弹球游戏之弹球

之前,我们已经做好了整个游戏的开关(终端控制)。 那么对于其他对象如“弹球”,“挡板”等对象,积木的搭建就要简单的多。 首先,要创建一个弹球造型,这个造型可以在造型库里使用Scratch 提供的,当然也可以自己定义(这不重要)。 再者功能部分: 弹球的启动依赖于终端所发送的指令,我们依然要使用事件触发“游戏状态”,当弹球对象接收到游戏状态的广播时,那么首先要判断游戏状态变量得值是否大于0,如果大于0,证明游戏要启动了,我们可以等待3秒后将弹球启动,(至于为什么要等3秒,在文字提示部分会有讲到)。 之后,重复

weixin_48481372的博客 1604

python打砖块游戏程序设计报告_实现打砖块小游戏.py

#导入模块import pygamefrom pygame.locals import *import sys,random,time,mathclass GameWindow(object):'''创建游戏窗口类'''def __init__(self,*args,**kw):self.window_length = 600self.window_wide = 500#绘制游戏窗口,设置窗口尺...

weixin_39867296的博客 750

Python-弹球游戏增强版

from tkinter import * import time import random tk = Tk() tk.title("Game") tk.resizable(0,0) tk.wm_attributes('-topmost',1) canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) canvas.p

网络二师兄 3223

Python图形化 —— Tkinter库的学习

Python的Tkinter库的学习 Python图形化编程入门,使用的是python自带的Tkinter模块,能够满足大多数的应用场景,使用简单。 创建一个GUI程序 import tkinter # 导入tkinter库 tk = tkinter.Tk() # 创建一个tk对象 tk.title('This is a test!') # 设置图形框名 tk.mainloop() # 进入消息循环,即显示窗口 运行如图 可以使用geometry()方法来设置窗口的大小 tk.geometry("300

weixin_47472573的博客 3555

【Python】弹球小游戏

周末到了,不想给大家太多的压力,今天就给大家分享一个比较简单的弹球小游戏吧。这无聊的周末又有事可以做了,nice…先看一下我们的最终效果图我们分9步来讲解如何写这个小游戏我们用Python的内置模块Tkinter来完成了,它是Python的标准GUI工具包,可以非常方便在制作GUI小工具,因为是跨平台的,可以方便的在win和linux下运行,我们用Tk里的canvas绘图功能来制作一个小游戏.先来把主界面画出来 好主界面有了,我们就开始创建球 •画一个实心的球并记录下它的id•创建球的默认在主界面上的位置,

xff123456_的博客 1285

python小游戏:打砖块完整代码

python小游戏

JustinMars的博客 1313

python中有关tkinter模块的小练习

1,当下小练习: 相关理论知识:基本布局的简单介绍 import tkinter from tkinter import * win=tkinter.Tk() win.title('学生信息') win.geometry('500x250+250+250') L1=Label(win,text='学生信息',font='Helvetical -36 bold') L2=Label(win,text='学号:',font='song -20') L3=Label(win,text='姓名:',font='

帅boy的博客 1181

cocos-master 项目源码 类方块弹珠

cocos-master 项目源码 类方块弹珠 cocos creator项目源码 勿做商用

Tkinter模块学习

Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。 Tkinter 编写的程序,也称为 GUI 程序,GUI (Graphical User Interface)指的是“图形用户界面”,它是计算机图形学(CG)的一门

过期的秋刀鱼 2663

自己用C语言写的弹球游戏——核心代码——最简洁1

自己写的弹球游戏,用C语言,WIN32框架,学习游戏编写思路,核心代码,非常简洁

matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真

:瓷砖抛 光过程 建模与仿真朱 成 就(广 东工业大学 机 电工程 学院, 广东广州 )摘要 :瓷砖的抛磨影响 因素众 多 ,实际磨削加工时容易出现漏抛 、返抛现象 。对陶瓷抛光机磨头进行运动学分析 ,并基于不 同粒度号 的磨 粒在一定压力下的加工深度模型 ,探讨抛光机磨 头转 速 、横梁摆动频率 、传送速度对瓷砖抛光加工表 面均匀性 的影响,然 后结合 磨削机理使 用 对陶瓷抛光过程进行仿真 ...

weixin_36331058的博客 747

python小游戏开发——简单弹球游戏

撸码枯燥,扫码关注 案例介绍 本案例采用 python 实现了一个简单的弹球游戏。该游戏在一个单独的图形窗口中运行。游戏初始化后,在游戏窗口点击鼠标左键开始游戏。玩家通过控制键盘的左、右方向键来控制弹板的移动,弹球和弹板撞击一次,得一分,当弹球触底时,本局游戏结束。玩家一共有四条生命,即可以玩四次游戏,当生命大于等于“ 0 ”时,可以继续游戏,当生命小于“ 0 ”时,游戏结束。 学习目标 本案例...

springhammer的博客 1万+

深入解析Transformer三大注意力机制:自注意力、交叉注意力与因果自注意力

注意力机制是深度学习中的核心概念,它模拟了人类在处理信息时选择性聚焦的能力。其基本原理是通过计算查询与键的相似度,动态地为值分配权重,从而提取关键信息。这一机制解决了传统序列模型(如RNN)难以并行化和捕获长距离依赖的痛点,技术价值在于显著提升了模型的计算效率和表征能力。在自然语言处理、计算机视觉等应用场景中,注意力机制已成为构建强大模型的基石。本文聚焦于Transformer架构中的三种核心注意力变体:自注意力用于建立序列内部的全局关联,交叉注意力连接编码器与解码器的信息,而因果自注意力则确保自回归生成的

weixin_29094775的博客 411

Scratch案例——弹球游戏

游戏介绍: 一个小球在屏幕中移动,碰到边缘反弹回来,下面有一块板在左右移动,接到球之后就反弹,没有接到球的话,则失败。 角色准备 针对这样的一个游戏介绍,我们首先来确定游戏角色:小球、弹板。 角色之弹板的编程 三个角色中,弹板是最简单的,只需要左右移动就可以了,我们首先来针对弹板写一段程序: 1、角色区选中Paddle: 2、脚本区控制弹板,让弹板的X坐标跟随鼠标的X坐标变换。(小贴士:积木块的...

weixin_44602985的博客 2万+

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3217

用 CL_HTTP_CLIENT 正确处理 Cookie,彻底解决 SAP Gateway OData 的 CSRF Token 校验失败

SAP OData 集成中 CSRF Token 校验失败的解决方案 问题现象:使用 Postman 测试 OData 写入成功,但 ABAP 代码调用时出现 CSRF token validation failed 错误。 根本原因:Postman 自动处理 Cookie,而 ABAP 代码仅获取了 CSRF Token 却遗漏了 Cookie 信息。SAP Gateway 要求修改请求必须同时携带 Token 和 Cookie 才能通过校验。 解决方案: 通过 GET 请求同时获取 CSRF Token

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 431

java实现弹球游戏

import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt...

何必低头的博客 4286

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法

Robot_PLC_HMI_Automation 6724

使用Scratch制作打弹球游戏-反弹球

打弹球是FC游戏中的一款经典老游戏,虽然玩法很简单, 但是以前可是非常火爆的。想学习如何制作简单有趣的红白机小游戏吗?今天我们就一起来利用Scratch软件,先做一个简化版的打弹球游戏——反弹球! 一、我们的目标 (1)理解弹珠游戏形成各个原理。 (2)掌握角色坐标与鼠标坐标(或键盘坐标)的关联。 二、我们的任务 1.剧本设计 主题:“会反弹”的小球 舞台:草地 角色:小球、反弹板、草地警戒线 故事:小球和反弹板在草地上玩游戏,小球碰到边缘就会反弹,落向地面时,反弹板会跟随...

qq_35292988的博客 2万+

java技术专家【面试】Java程序员英语面试整个流程

java技术专家【面试】Java程序员英语面试整个流程

大壮 753

基于simulink的BMS系统中电池单体故障隔离与恢复建模

本文介绍了使用Simulink构建BMS电池单体故障诊断与容错控制模型的方法。主要内容包括:1)搭建12串锂电池组模型;2)实现单体故障注入(过压、断线等);3)设计故障诊断与隔离模块(采用Stateflow状态机);4)开发恢复判断逻辑(需满足电压、温度等条件);5)系统监控与仿真设置。文章还提供了工程实践建议,如防环流设计、通信冗余等,并指出进阶方向(多故障处理、AI预警等)。该模型适用于新能源汽车、储能系统的BMS设计,可提高系统可靠性和安全性。

xiaoheshang_123的博客 140

运用Python做弹球小游戏

利用python中的tkinter模块制作弹球小游戏,是由反弹球和球拍构成

weixin_68226434的博客 1640

30. 如何使用 SEGW 的 redefine 功能对 SAP 标准 OData 服务进行扩展

SAP 发布了很多标准的 Fiori 应用,可以通过笔者的文章里提到的进行浏览。比如 My Opportunities 就是 SAP CRM 领域的一个 Fiori 应用:下图是 Opportunity 明细页面的 Info 标签页:假设我们想在这些标准字段的末尾增添一个新字段 Created By,用来维护当前 Opportunity 的创建者。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1171

python编写一个弹球游戏_python 弹球 小游戏源码(亲测可用)

【实例简介】python小游戏【实例截图】【核心代码】# -*- coding: utf-8 -*-import tkinter as tk# 游戏对象的一些通用方法class GameObject(object):def __init__(self, canvas, item):self.canvas = canvasself.item = item# 删除对象def delete(self):...

weixin_39671621的博客 999

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python 弹球小游戏_Python如何实现弹球小游戏

Python如何实现弹球小游戏发布时间:2020-08-01 14:18:54来源:亿速云阅读:78作者:小猪这篇文章主要讲解了Python如何实现弹球小游戏,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。整个游戏实现比较简单,只需在安装python的电脑上即可运行,玩游戏,通过键盘键控制弹球挡板的移动即可。原理不多说,且让我们去看看吧。1、代码运行后,游戏界面如下所示...

weixin_32442555的博客 597

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

js弹球游戏实现

js弹球游戏实现 html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/style.css" type="text/css"/> <link rel="shortcut icon"...

qq_36760873的博客 1859

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

下一篇: 基于激光雷达的人型识别(无人车)
finalObject
博客等级 码龄8年 8粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值