Python3.xTkinter-如何在画布上随机复制相同的精灵?

Python3.xTkinter-如何在画布上随机复制相同的精灵?,python,canvas,tkinter,tkinter-canvas,Python,Canvas,Tkinter,Tkinter Canvas,在我的代码中(将在详细描述的末尾),我制作了一个tkinter画布游戏。到目前为止,画布上名为“玩家”的精灵向鼠标移动。当精灵“玩家”的坐标与精灵“食物”的坐标足够接近时,食物将从画布上删除,然后在另一个随机位置再次创建。这也会将精灵“玩家”的大小增加1(通过向x1和y1坐标添加1) 但我的问题是,如果没有一些非常奇怪的结果,我似乎无法创建任何超过1个稳定的“食物”精灵。理想情况下,我希望能够无限复制,直到我的CPU过热。。。但我会满足于10个精灵(但需要完全相同)。这是为了让“玩家”精灵有更多

在我的代码中(将在详细描述的末尾),我制作了一个tkinter画布游戏。到目前为止,画布上名为“玩家”的精灵向鼠标移动。当精灵“玩家”的坐标与精灵“食物”的坐标足够接近时,食物将从画布上删除,然后在另一个随机位置再次创建。这也会将精灵“玩家”的大小增加1(通过向x1和y1坐标添加1)

但我的问题是,如果没有一些非常奇怪的结果,我似乎无法创建任何超过1个稳定的“食物”精灵。理想情况下,我希望能够无限复制,直到我的CPU过热。。。但我会满足于10个精灵(但需要完全相同)。这是为了让“玩家”精灵有更多的食物吃

import random
from tkinter import *
import math
import time

class Cells():

    def __init__(self):
        #Variables
        self.master = Tk()
        self.canvas = Canvas(self.master, width=1000,height=800)
        self.canvas.pack()
        self.player_colours = ['blue','red','orange','green','purple','yellow']
        self.random_int = random.randint(0,5)
        self.random_colour = self.player_colours[self.random_int]
        self.random_food_int = random.randint(0,5)
        self.random_food_colour = self.player_colours[self.random_food_int]
        self.tick_intervals = 10
        #Coords
        self.x0 = 500
        self.y0 = 400
        self.x1 = 530 
        self.y1 = 430
        self.rx0 = random.randint(100,900)
        self.ry0 = random.randint(100,700)
        self.rx1 = self.rx0 + 20
        self.ry1 = self.ry0 + 20
        self.rx0_2 = random.randint(100,900)
        self.ry0_2 = random.randint(100,700)
        self.rx1_2 = self.rx0_2 + 20
        self.ry1_2 = self.ry0_2 + 20
        self.player_size = self.x1 - self.x0
        self.player_coords = [self.x0, ",", self.y0]
        #Sprites
        self.speed = (self.x0 - self.x1) / 10
        self.reverse = self.speed - self.speed - self.speed
        self.food = self.canvas.create_oval(self.rx0,self.ry0,self.rx1,self.ry1,fill=self.random_food_colour)
        self.player = self.canvas.create_oval(self.x0,self.y0,self.x1,self.y1, fill=self.random_colour)
        self.player_coords_text_x = self.canvas.create_text(50,10,text=self.x0)
        self.player_coords_text_y = self.canvas.create_text(100,10,text=self.y0)
        self.food_coords_text_x = self.canvas.create_text(50,10,text=self.rx0_2)
        self.food_coords_text_y = self.canvas.create_text(100,10,text=self.ry0_2)
        self.player_text = self.canvas.create_text(self.x0,self.y0,text=self.player_size)
        self.food_count = 1
        self.move()
        self.master.mainloop()
    def move(self):
        self.canvas.delete(self.player_coords_text_x)
        self.canvas.delete(self.player_coords_text_y)
        self.player_coords_text_x = self.canvas.create_text(50,10,text=self.x0)
        self.player_coords_text_y = self.canvas.create_text(100,10,text=self.y0)

        self.canvas.delete(self.food_coords_text_x)
        self.canvas.delete(self.food_coords_text_y)
        self.food_coords_text_x = self.canvas.create_text(50,50,text=self.rx0_2)
        self.food_coords_text_y = self.canvas.create_text(100,50,text=self.ry0_2)


        self.is_food = True
        #mouse variables
        x = self.canvas.winfo_pointerx()-self.canvas.winfo_rootx()
        y = self.canvas.winfo_pointery()-self.canvas.winfo_rooty()
        self.mousex0 = x - 10
        self.mousey0 = y - 10
        self.mousex1 = x + 10
        self.mousey1 = y + 10
        #sprite variables
        self.player_center_x = self.x0 + ((self.x1 - self.x0) / 3)
        self.player_center_y = self.y0 + ((self.x1 - self.x0) / 3)

        self.canvas.delete(self.player_text)
        self.player_text = self.canvas.create_text(self.player_center_x,self.player_center_y,text=self.player_size)
        #bounderies
        if self.player_center_x < 20:
            self.x0 -=self.speed
            self.x1 -=self.speed
        elif self.player_center_x > 980:
            self.x0 += self.speed
            self.x1 += self.speed
        if self.player_center_y < 20:
            self.y0 -= self.speed
            self.y1 -= self.speed
        elif self.player_center_y > 780:
            self.y0 += self.speed
            self.y1 += self.speed
        #following the mouse
        if self.player_center_x < self.mousex0:
            self.x0 -= self.speed
            self.x1 -= self.speed
        elif self.player_center_x > self.mousex0:
            self.x0 += self.speed
            self.x1 += self.speed
        if self.player_center_y < self.mousey0:
            self.y0 -= self.speed
            self.y1 -= self.speed
        elif self.player_center_y > self.mousey0:
            self.y0 += self.speed
            self.y1 += self.speed
        #eating the food
        if self.is_food == True:
            if self.x0 < self.rx0 and (self.rx0 - self.x0) <= self.player_size:
                if self.y0 < self.ry0 and (self.ry0 - self.y0) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False
            if self.x0 > self.rx0 and (self.x0 - self.rx0) <= self.player_size:
                if self.y0 < self.ry0 and (self.ry0 - self.y0) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False
            if self.x0 > self.rx0 and (self.x0 - self.rx0) <= self.player_size:
                if self.y0 > self.ry0 and (self.y0 - self.ry0) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False
            if self.x0 < self.rx0 and (self.rx0 - self.x0) <= self.player_size:
                if self.y0 > self.ry0 and (self.y0 - self.ry0) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False
        if self.is_food == True:
            if self.player_center_x < self.rx0_2 and (self.rx0_2 - self.player_center_x) <= self.player_size:
                if self.player_center_y < self.ry0_2 and (self.ry0_2 - self.player_center_y) <= self.player_size:
                   self.canvas.delete(self.food)
                   self.player_size += 1
                   self.x1 += 1
                   self.y1 += 1
                    self.is_food = False
            elif self.player_center_x > self.rx0_2 and (self.player_center_x - self.rx0_2) <= self.player_size:
               if self.player_center_y < self.ry0_2 and (self.ry0_2 - self.player_center_y) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False
            elif self.player_center_x > self.rx0_2 and (self.player_center_x - self.rx0_2) <= self.player_size:
                if self.player_center_y > self.ry0_2 and (self.ry0_2 + self.player_center_y) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False
            elif self.player_center_x < self.rx0_2 and (self.player_center_x + self.rx0_2) <= self.player_size:
                if self.player_center_y > self.ry0_2 and (self.ry0_2 + self.player_center_y) <= self.player_size:
                    self.canvas.delete(self.food)
                    self.player_size += 1
                    self.x1 += 1
                    self.y1 += 1
                    self.is_food = False

        if self.is_food == False:
            self.rx0_2 = random.randint(100,900)
            self.ry0_2 = random.randint(100,700)
            self.rx1_2 = self.rx0_2 + 20
            self.ry1_2 = self.ry0_2 + 20
            self.food = self.canvas.create_oval(self.rx0_2,self.ry0_2,self.rx1_2,self.ry1_2,fill=self.random_food_colour)
            self.is_food = True
随机导入
从tkinter进口*
输入数学
导入时间
类单元格():
定义初始化(自):
#变数
self.master=Tk()
self.canvas=canvas(self.master,宽度=1000,高度=800)
self.canvas.pack()
self.player_颜色=[“蓝色”、“红色”、“橙色”、“绿色”、“紫色”、“黄色”]
self.random_int=random.randint(0,5)
self.random\u color=self.player\u colors[self.random\u int]
self.random\u food\u int=random.randint(0,5)
self.random\u food\u color=self.player\u colors[self.random\u food\u int]
self.tick_间隔=10
#库德
self.x0=500
self.y0=400
self.x1=530
self.y1=430
self.rx0=random.randint(100900)
self.ry0=random.randint(100700)
self.rx1=self.rx0+20
self.ry1=self.ry0+20
self.rx0_2=random.randint(100900)
self.ry0_2=random.randint(100700)
self.rx1_2=self.rx0_2+20
self.ry1_2=self.ry0_2+20
self.player_size=self.x1-self.x0
self.player_coords=[self.x0,”,“,self.y0]
#精灵
self.speed=(self.x0-self.x1)/10
self.reverse=self.speed-self.speed-self.speed
self.food=self.canvas.create_oval(self.rx0,self.ry0,self.rx1,self.ry1,fill=self.random_food\u color)
self.player=self.canvas.create_oval(self.x0,self.y0,self.x1,self.y1,fill=self.random_color)
self.player\u coords\u text\u x=self.canvas.create\u text(50,10,text=self.x0)
self.player\u coords\u text\u y=self.canvas.create\u text(100,10,text=self.y0)
self.food\u coords\u text\u x=self.canvas.create\u text(50,10,text=self.rx0\u 2)
self.food\u coords\u text\u y=self.canvas.create\u text(100,10,text=self.ry0\u 2)
self.player\u text=self.canvas.create\u text(self.x0,self.y0,text=self.player\u size)
自我食物计数=1
self.move()
self.master.mainloop()
def移动(自我):
self.canvas.delete(self.player\u coords\u text\u x)
self.canvas.delete(self.player\u coords\u text\y)
self.player\u coords\u text\u x=self.canvas.create\u text(50,10,text=self.x0)
self.player\u coords\u text\u y=self.canvas.create\u text(100,10,text=self.y0)
self.canvas.delete(self.food\u coords\u text\u x)
self.canvas.delete(self.food\u coords\u text\y)
self.food\u coords\u text\u x=self.canvas.create\u text(50,50,text=self.rx0\u 2)
self.food\u coords\u text\u y=self.canvas.create\u text(100,50,text=self.ry0\u 2)
self.is_food=真的吗
#鼠标变量
x=self.canvas.winfo_pointerx()-self.canvas.winfo_rootx()
y=self.canvas.winfo_pointery()-self.canvas.winfo_rooty()
self.mousex0=x-10
self.mousey0=y-10
self.mousex1=x+10
self.mousey1=y+10
#精灵变量
self.player\u center\u x=self.x0+((self.x1-self.x0)/3)
self.player\u center\u y=self.y0+((self.x1-self.x0)/3)
self.canvas.delete(self.player\u文本)
self.player\u text=self.canvas.create\u text(self.player\u center\u x,self.player\u center\u y,text=self.player\u size)
#边界
如果self.player\u center\u x<20:
self.x0-=自速度
self.x1-=自速度
elif self.player_center_x>980:
self.x0+=自速度
self.x1+=自速度
如果self.player\u center\u y<20:
self.y0-=自速度
self.y1-=自速度
elif self.player_center_y>780:
self.y0+=自速度
self.y1+=自速度
#跟踪鼠标
如果self.player\u center\u xself.mousex0:
self.x0+=自速度
self.x1+=自速度
如果self.player\u center\u yself.mousey0:
self.y0+=自速度
self.y1+=自速度
#吃食物
如果self.is_food==真:

如果self.x0
from tkinter import *
import random

class App:
    def __init__(self, root):
        self.root = root
        self.label = []
        self.text = []
        self.root.geometry("500x500")
        self.canvas = Canvas(root, width=500, height=500)
        self.button = Button(self.canvas, text="Ok", command=self.random)
        self.canvas.pack(expand=True, fill="both")
        self.button.pack()
    def random(self):
        self.label.append(Label(self.canvas, text="text"))
        for i in self.label:
            self.text.append(self.canvas.create_window(random.randrange(500), random.randrange(500), window=i))

root = Tk()
App(root)
root.mainloop()
在上面我们创建了两个
列表
s
标签
文本

每次按下
按钮
,我们都会创建一个新的
标签
,并将其存储在列表
标签
中。然后,我们迭代
列表
标签
,并为列表中的每个元素创建一个新的
画布
窗口,将这些窗口存储在
文本
中以备日后使用

这将允许您继续生成食物对象,直到CPU过热


作为旁注,我建议您回顾以下内容:

您提供了太多不相关的代码,您的问题归结为“如何在画布中随机化多个对象的位置?”但您已经包含了玩家角色的全部逻辑

from tkinter import *
import random

class App:
    def __init__(self, root):
        self.root = root
        self.label = []
        self.text = []
        self.root.geometry("500x500")
        self.canvas = Canvas(root, width=500, height=500)
        self.button = Button(self.canvas, text="Ok", command=self.random)
        self.canvas.pack(expand=True, fill="both")
        self.button.pack()
    def random(self):
        self.label.append(Label(self.canvas, text="text"))
        for i in self.label:
            self.text.append(self.canvas.create_window(random.randrange(500), random.randrange(500), window=i))

root = Tk()
App(root)
root.mainloop()