0 / 0 / 0
Регистрация: 19.03.2023
Сообщений: 1
1

Игра "4 краски"

19.03.2023, 10:54. Показов 766. Ответов 0

Author24 — интернет-сервис помощи студентам
Передо мной поставили учебную задачу разработать игру, иллюстрирующую теорему о четырех красках. При этом границы рисуют сами игроки. Я разработал игру на Godot Engine, используя GDScript. При закрашивании фигуры определял центр масс и максимальное расстояние от границы до центра масс.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
func fill_by_bucket(position,new_color):
    var target_color = getColorv(position)
    if target_color == new_color: return
    if target_color == Color.black: return
    
    var pos_sum = Vector2(0,0)
    var pos_count = 0
    
    var border_points = []
    var radius = 0
    var stack = [position]
    while not stack.empty():
        var a = stack.pop_back()
        var xLeft = a.x
        while is_inside(xLeft-1,a.y) and getColor(xLeft-1,a.y)==target_color:
            xLeft-=1
            setColor(xLeft,a.y,new_color)
            if getColor(xLeft-1,a.y)!=target_color:
                border_points.append(Vector2(xLeft,a.y))
            pos_sum+=Vector2(xLeft,a.y)
            pos_count+=1
        while is_inside(a.x+1,a.y) and getColor(a.x+1,a.y)==target_color:
            a.x+=1
            setColorv(a,new_color)
            if getColor(a.x+1,a.y)!=target_color:
                border_points.append(a)
            pos_sum+=Vector2(a.x,a.y)
            pos_count+=1
        scan(xLeft,a.x - 1,a.y + 1,stack)
        scan(xLeft,a.x - 1,a.y - 1,stack)
    var center_pos = pos_sum/pos_count
    for point in border_points:
        var temp_radius = center_pos.distance_to(point)
        if temp_radius>radius: radius = temp_radius
    return {"position":center_pos,"color":new_color,"radius":radius}
Центр масс и расстояние использовал для построения графов.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func addVertex(value):
    if value==null: return
    var vertex = {"id":vertices.size(),"value":value}
    for v in vertices: 
        var value1 = vertex["value"]
        var value2 = v["value"]
        var sum_of_radius = value1["radius"]+value2["radius"]
        var distance = value1["position"].distance_to(value2["position"])
        if sum_of_radius>distance:
            edges.append([value1["color"],value2["color"]])
    vertices.append(vertex)
    for edge in edges:
        if edge[0]==edge[1]: return true
    return false
При тестировании выяснилось, что на вогнутых фигурах (вроде полумесяца) программа неправильно определяет соседние области. Я сейчас переделываю, но как поступится к проблеме, не знаю. Посоветуете, пожалуйста.

Заранее напишу, что рассматривал другие решения. Они не подходят, т.к. в них используются заранее подготовленные карты.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2023, 10:54
Ответы с готовыми решениями:

Сколько граммов краски потребуется для покраски стола, если на покраску 1кв.метра требуется x граммов краски?
Помогите пожалуйста задача вроде простая, а сообразить не могу. Сколько граммов краски...

Найти количество красной краски, затем количество масленой краски
4)Создать список имеющейся краски. Описать и ввести массив, содержащий 10 записей следующей...

Найти количество красной краски, затем количество масленой краски
2)Создать список имеющейся краски. Описать и ввести массив, содержащий 10 записей следующей...

Краски
Новый креативный художник Василий создает цифровые рисунки, закрашивая целиком вертикальную или...

0
19.03.2023, 10:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2023, 10:54
Помогаю со студенческими работами здесь

Краски
Новый креативный художник Василий создает цифровые рисунки, закрашивая целиком вертикальную или...

Смешиваем краски
Идея проста, сделать програмку, которая помогла-бы правильно смешать краски человеку не очень в...

датчик толщиномера краски
подскажите кто в курсе. А то гугл только сами приборы выдает. Кто знает какие там датчики стоят?

Расчет краски на лабиринт
Условие задачи тут #include <iostream> using namespace std; void paint(int i, int j) { if...

Рассчитать количество краски
Рассчитать количество краски, необходимое для покраски окон, если известен расход краски на 1кв. м.

Краска (Краски) Эмаль
Нужно ввести в десятку по яндексу (со 100% гарантией) один сайт по словам "Краска" "Краски"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru