Необходимо сделать передвижение круга по рандомным числам матрицы!!!

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Задание прикрепила картинкой!
Вот что мне удалось пока что сделать.
Python:
# Контрольная работа студентки группы 20-ЗИЭ Трофимовой Т.Д.
# Дисциплина - Высокоуровневые технологии программирования
# Вариант № 2-26.
# Контрольная работа №2. Задача №4.

"""На пространстве формы изображена матрица случайных чисел от 0 до 99 размером
7х7. Метка в виде овала исходно находится в начале четвертой строки, а после
запуска циклически движется сначала против часовой стрелки, потом по часовой, по
траектории вида с дискретом времени 0.6 сек. Запуск/остановка движения –
кнопка Checkbutton. Остановка приводит к установке рамки в исходное положение."""

# Начальные координаты для построения интерфейса
from tkinter import *
import time
from random import randint
SX = 5
SY = 5

# Создает контейнер Canvas
def elementСanvasMatrix():
    global elСanvasMatrix
    elСanvasMatrix = Canvas(width=500, height=510, bg="white")
    elСanvasMatrix.place(x=SX, y=SY)

# Создает матрицу
def elementRectangeofMatrix():
    # Координаты первого квадрата матрицы
    # UpLtCr - UpperLeftCorner; LrRtCr - LowerRightCorner
    UpLtCRectangleX = SX
    UpLtCRectangleY = SY
    # Координаты смещения для построения таблицы из квадратов. "X" - столбец, "Y" - строка.
    DeltaX = SX * 7
    DeltaY = SY * 7
      
    for x in range(7):
        x = UpLtCRectangleX + (DeltaX * x)
        for y in range(7):
            y = UpLtCRectangleY + (DeltaY * y)
            #elСanvasMatrix.create_rectangle(x, y, x+70, y+70)
            elСanvasMatrix.create_text(x+35, y+35, text=str(randint(0, 99)))

#Кнопка "Запуск/остановка"
def elementCheckButton():

    elCheckButton = Checkbutton(text = 'Запуск / \n Остановка',
                            font = "Areal 8")
    
    elCheckButton.place(x = SX+200, y = SY+300)

# Создает интерфейс программы
def mainWindowProgram():
    elementСanvasMatrix()
    elementRectangeofMatrix()
    elementCheckButton()
 
# Задает параметры окна программы
def application():
    global root
    root = Tk()
    root.title(
        "20-ЗИЭ КР №2. Задание №4. Вариант 2-26. Трофимова Татьяна Дмитриевна")
    root.geometry("300x350")
    root.resizable(0, 0)
    mainWindowProgram()
    root.mainloop()

application()
 

Вложения

  • Задача 4.JPG
    Задача 4.JPG
    39,6 КБ · Просмотры: 3

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
from tkinter import *
import time
from random import randint
SX = 5
SY = 5
DeltaX = SX * 7
DeltaY = SY * 7
# Создает контейнер Canvas

pos = [0, 3, 0]

def elementСanvasMatrix():
    global elСanvasMatrix
    global cyc
    elСanvasMatrix = Canvas(width=500, height=510, bg="white")
    x = DeltaX * pos[0] + SX
    y = DeltaY * pos[1] + SY
    cyc = elСanvasMatrix.create_oval(x, y, x+DeltaX, y+DeltaY)
    elСanvasMatrix.place(x=SX, y=SY)
# Создает матрицу

def elementRectangeofMatrix():
    # Координаты первого квадрата матрицы
    # UpLtCr - UpperLeftCorner; LrRtCr - LowerRightCorner
    UpLtCRectangleX = SX
    UpLtCRectangleY = SY
    for x in range(7):
        x = UpLtCRectangleX + (DeltaX * x)
        for y in range(7):
            y = UpLtCRectangleY + (DeltaY * y)
            elСanvasMatrix.create_rectangle(x, y, x+DeltaX, y+DeltaY)
            elСanvasMatrix.create_text(
                x+DeltaX/2, y+DeltaY/2, text=str(randint(0, 99)))

def move():
    if not run.get():
        return 0
    # Если овал в углу
    if pos[:-1] in ([0, 0], [0, 6], [6, 0], [6, 6]):
        # Меняем направление (максимум 3)
        pos[-1] = pos[-1] + 1 if pos[-1] < 3 else 0
    
    # Двигаем овал по нужному направлению
    to = ([1, 1], [0, 1], [1, -1], [0, -1])[pos[-1]]
    pos[to[0]] += to[1]
    x = DeltaX * pos[0] + SX
    y = DeltaY * pos[1] + SY
    print(pos, x, y)
    elСanvasMatrix.moveto(cyc, x, y)
    root.after(600, move)
# Кнопка "Запуск/остановка"

def elementCheckButton():
    elCheckButton = Checkbutton(text='Запуск / \n Остановка',
                                font="Areal 8", variable=run, command=move)
    elCheckButton.place(x=SX+200, y=SY+300)
# Создает интерфейс программы

def mainWindowProgram():
    elementСanvasMatrix()
    elementRectangeofMatrix()
    elementCheckButton()
# Задает параметры окна программы

def application():
    global root
    global run
    root = Tk()
    run = BooleanVar(value=False)
    root.title(
        "20-ЗИЭ КР №2. Задание №4. Вариант 2-26. Трофимова Татьяна Дмитриевна")
    root.geometry("300x350")
    root.resizable(0, 0)
    mainWindowProgram()
    root.mainloop()

application()
 
  • Мне нравится
Реакции: ttd2001

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Python:
from tkinter import *
import time
from random import randint
SX = 5
SY = 5
DeltaX = SX * 7
DeltaY = SY * 7
# Создает контейнер Canvas

pos = [0, 3, 0]

def elementСanvasMatrix():
    global elСanvasMatrix
    global cyc
    elСanvasMatrix = Canvas(width=500, height=510, bg="white")
    x = DeltaX * pos[0] + SX
    y = DeltaY * pos[1] + SY
    cyc = elСanvasMatrix.create_oval(x, y, x+DeltaX, y+DeltaY)
    elСanvasMatrix.place(x=SX, y=SY)
# Создает матрицу

def elementRectangeofMatrix():
    # Координаты первого квадрата матрицы
    # UpLtCr - UpperLeftCorner; LrRtCr - LowerRightCorner
    UpLtCRectangleX = SX
    UpLtCRectangleY = SY
    for x in range(7):
        x = UpLtCRectangleX + (DeltaX * x)
        for y in range(7):
            y = UpLtCRectangleY + (DeltaY * y)
            elСanvasMatrix.create_rectangle(x, y, x+DeltaX, y+DeltaY)
            elСanvasMatrix.create_text(
                x+DeltaX/2, y+DeltaY/2, text=str(randint(0, 99)))

def move():
    if not run.get():
        return 0
    # Если овал в углу
    if pos[:-1] in ([0, 0], [0, 6], [6, 0], [6, 6]):
        # Меняем направление (максимум 3)
        pos[-1] = pos[-1] + 1 if pos[-1] < 3 else 0
  
    # Двигаем овал по нужному направлению
    to = ([1, 1], [0, 1], [1, -1], [0, -1])[pos[-1]]
    pos[to[0]] += to[1]
    x = DeltaX * pos[0] + SX
    y = DeltaY * pos[1] + SY
    print(pos, x, y)
    elСanvasMatrix.moveto(cyc, x, y)
    root.after(600, move)
# Кнопка "Запуск/остановка"

def elementCheckButton():
    elCheckButton = Checkbutton(text='Запуск / \n Остановка',
                                font="Areal 8", variable=run, command=move)
    elCheckButton.place(x=SX+200, y=SY+300)
# Создает интерфейс программы

def mainWindowProgram():
    elementСanvasMatrix()
    elementRectangeofMatrix()
    elementCheckButton()
# Задает параметры окна программы

def application():
    global root
    global run
    root = Tk()
    run = BooleanVar(value=False)
    root.title(
        "20-ЗИЭ КР №2. Задание №4. Вариант 2-26. Трофимова Татьяна Дмитриевна")
    root.geometry("300x350")
    root.resizable(0, 0)
    mainWindowProgram()
    root.mainloop()

application()
Спасибо, осталось осталось только сделать в нужном направлении, а то у меня он бегает только против часовой стрелки, а по заданию должен по квадратам через 4 строчку менять направление от против часовой по часовой
 

Форум IT Специалистов