首页 > 编程语言 >python语言碰撞游戏代码

python语言碰撞游戏代码

时间:2024-11-28 21:58:28浏览次数:7  
标签:winfo 游戏 python random 碰撞 update label place root

import tkinter as tk
import keyboard
import random
import sys

def move_label(event):
global label_b
if event.name == ‘w’:
label.place(y=label.winfo_y() - 10)
root.update() # 每次移动后更新布局,确保位置信息准确
elif event.name == ‘a’:
label.place(x=label.winfo_x() - 10)
root.update()
elif event.name == ‘d’:
label.place(x=label.winfo_x() + 10)
root.update()
elif event.name == ‘s’:
label.place(y=label.winfo_y() + 10)
root.update()

# 判断两个标签是否碰撞
if is_collision(label, label_b):
    print("结束")
    ask_to_continue()  # 结束程序,关闭窗口
else:
    print("继续")

def is_collision(label1, label2):
root.update() # 强制更新窗口布局,确保能获取到正确的place_info

# 获取标签1的坐标和尺寸信息
x1 = int(label1.place_info()['x'])
y1 = int(label1.place_info()['y'])
width1 = label1.winfo_reqwidth()
height1 = label1.winfo_reqheight()

# 获取标签2的坐标和尺寸信息
x2 = int(label2.place_info()['x'])
y2 = int(label2.place_info()['y'])
width2 = label2.winfo_reqwidth()
height2 = label2.winfo_reqheight()


# 碰撞判断条件,考虑两个矩形是否有重叠部分
if (x1 < x2 + width2 and x1 + width1 > x2 and
        y1 < y2 + height2 and y1 + height1 > y2):
    return True
return False

def ask_to_continue():
global label_b
response = input("是否继续游戏?(y/n) ")
if response.lower() == ‘y’:
# 重置标签b的随机位置
window_width = root.winfo_width()
window_height = root.winfo_height()

    random_x = random.randint(0, 600 - label_b.winfo_reqwidth())
    random_y = random.randint(0, 400 - label_b.winfo_reqheight())


    label_b.place(x=random_x, y=random_y)
    root.update()  # 更新窗口布局,确保新位置生效
elif response.lower() == 'n':
    root.destroy()  # 结束程序,关闭窗口
    sys.exit()
else:
    print("无效输入,请重新输入。")
    ask_to_continue()

root = tk.Tk()
root.geometry(“600x400”)

创建绿色标签(字符串标签a)

label = tk.Label(root, text=“a”, bg=“green”, fg=“white”)
label.pack()

创建另一个字符串标签b,并设置随机位置

label_b = tk.Label(root, text=“b”, bg=“red”, fg=“white”)
root.update_idletasks() # 确保窗口大小已确定,以便获取正确的窗口尺寸信息

获取窗口的宽度和高度(此处已设置固定大小,可注释掉这部分代码,因为不再需要动态获取)

window_width = root.winfo_width()

window_height = root.winfo_height()

生成随机位置坐标,确保标签b在窗口内

random_x = random.randint(0, 600 - label_b.winfo_reqwidth())
random_y = random.randint(0, 400 - label_b.winfo_reqheight())
label_b.place(x=random_x, y=random_y)

root.update() # 再次更新,确保place_info可用

绑定键盘事件

keyboard.on_press(move_label)

root.mainloop()

标签:winfo,游戏,python,random,碰撞,update,label,place,root
From: https://blog.csdn.net/qq_32257509/article/details/144120954

相关文章

  • 聪明办法学Python chap 0 chap 1
    Chap0安装一、Conda环境配置:为什么要使用conda,或者说为什么要配环境我之前在贴吧上看到过一个乐子图片:十三合一洗发水相信我,你不会想使用这样的一瓶洗发水1,换源阿里巴巴开源镜像站https://developer.aliyun.com/mirror/清华大学开源软件镜像站:https://help.mirrors.......
  • 聪明办法学python task01&task02
    什么是PythonPython是一种高级编程语言,它具有简洁、易读的语法。其代码风格注重可读性,通过使用缩进来表示代码块,而不是像其他语言(如C、Java)使用大括号。python的安装-抖音视频链接:9.25复制打开抖音,看看【玩转PC的作品】Python的下载与安装#电脑技巧#电脑#...https://v.......
  • python基础学习五
    数学类函数abs()求绝对值n=-12print(abs(n))sum()求和字符串类型的元素不行list1=[11,22,33,44,55]res1=sum(list1)print(res1)divmod()传入两个数值,前一个除以后一个,得到两个值:一个商,一个是余数s,y=divmod(16,5)print(s)print(y)round()......
  • PythonDay5Advance
    PythonDay5Advance函数和模块main函数要有,用户自己选择要做的功能,根据选择调用不同的函数用户注册的信息需要使用一个文件存储,登录需要判断用户是否存在,密码是否正确注册的时候,需要发送邮件内置函数数学类函数abs()求绝对值n=-12print(abs(n))sum()求和......
  • Python讲解(第八篇)
    这篇主要讲解字符串的格式化方式2快速字符串格式化方式目前我们透过学习了%符号占位已经很方便了,还能进行精度控制。可是为了追求效率,能否有更加效率的方式解决问题呢?那当然有,我们可以使用语法f"内容{变量}"的格式来快速格式化在Python中,f{} 是格式化字符串(也称为f......
  • Python机器学习笔记(二、监督学习算法基础)
    一、分类与回归监督机器学习问题主要有两种,分别叫作分类(classification)与回归(regression)。区分分类任务和回归任务有一个简单方法,就是问一个问题:输出是否具有某种连续性。如果在可能的结果之间具有连续性,那么它就是一个回归问题;不存在连续性,则一般是分类问题。二、泛化、......
  • C# 与 Python 代码互相调用的实践
    一、引言在当今的软件开发领域,不同的编程语言都有其独特的优势和适用场景。C#是一种功能强大、面向对象的编程语言,主要应用于Windows平台开发、企业级应用开发以及游戏开发(借助Unity引擎等)等领域;而Python则以其简洁的语法、丰富的库以及在数据科学、机器学习、自动化脚......
  • 大数据学习记录,Python基础(2)
    数据类型字符串概述:由若干个字符组成字符序列,称之为字符串特点:字符串一旦被创建就不能被更改定义一个字符串s1="hello"字符串一旦被创建就不能被更改s1="hello"s1="world"#相当于将新的字符串内存中的地址值赋值给了s1,原本的"hello"的内容没有改变print(......
  • 重生之我在Python中实现猜数字Plus版
    好久不见,甚是想念上次写了一个简易版猜数字,今天上上难度要求实现:利用随机函数random生成一个随机数,根据用户输入的数判断其与系统产生的随机数是否相等,并给出人性化提示引导用户继续猜测。另外,还需要统计猜测的次数,在程序结束前输出统计次数。【重要步骤提示】引入用于生......
  • Python推导式
    列表(list)推导式#带有条件的列表推导式nums=[1,2,3,4,5]print([i*iforiinnumsifi>2])#output:[9,16,25]#嵌套的列表推导式matrix=[[1,2,3],[4,5,6],[7,8,9]]print([jforiinmatrixforjini])#output:[1,2,3,4,5,6,7......