Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 17.03.2019, 18:12   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 132
Репутация: 10
По умолчанию Как рассчиать правильно координаты попадания в дартсе?

Доброго времени суток, уважаемые эксперты. Делаю игру Дартс. Столкнулся с проблемой. Координаты попадания в цель (и как итог - получаемые балы) иногда считает немного не правильно. Помогите найти ошибку или может по какой-то формуле попадания точек с окружность проще считать?

За основу взял центр круга и от него считаю абсолютную разницу координат выстрела и отнимаю центральную точку. В итоге беру наибольших сдвиг по координатам и считаю куда мы попали.

При выстреле еще случайно смещаю дротик, чтобы больше рандома было в точности.

Код и весь проект прилагаю:
Код:

randomize;
  Vistrel.X:=X+(random(200)-100);
  Vistrel.Y:=Y+(random(200)-100);
  if Vistrel.X<0 then Vistrel.X:=0;
  if Vistrel.X>350 then Vistrel.X:=350;
  if Vistrel.Y<0 then Vistrel.Y:=0;
  if Vistrel.Y>350 then Vistrel.Y:=350;

  Current:=3;
  Z:=60;
    //ochki nabrali
    a:=abs(175-Vistrel.X);
    b:=abs(175-Vistrel.Y);

    if a>=b then c:=a else c:=b;
    begin
    if c<=11 then Score1:=Score1+10;
    if (c>11) and (c<=31) then Score1:=Score1+8;
    if (c>31) and (c<=51) then Score1:=Score1+7;
    if (c>51) and (c<=71) then Score1:=Score1+6;
    if (c>71) and (c<=91) then Score1:=Score1+5;
    if (c>91) and (c<=111) then Score1:=Score1+4;
    if (c>111) and (c<=131) then Score1:=Score1+3;
    if (c>131) and (c<=151) then Score1:=Score1+2;
    if (c>151) and (c<=171) then Score1:=Score1+1;
    if (c>171) then Score1:=Score1+0;
    end;

    Stringgrid1.Cells[1,1]:=InttoStr(Score1);

Ссылка на проект:
Скачать Дартс
Armageddets вне форума   Ответить с цитированием
Старый 17.03.2019, 23:30   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,811
Репутация: 5431
По умолчанию

простите, а разве поле в Darts выглядит не так?
375px-Dartboard_diagram.svg.png
вики - https://en.wikipedia.org/wiki/Darts
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 17.03.2019, 23:53   #3
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 132
Репутация: 10
По умолчанию

Классическое - да. Но есть разные варианты и разные правила игры. В данном случае выбрана самая простая мишень.
Armageddets вне форума   Ответить с цитированием
Старый 18.03.2019, 00:57   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,477
Репутация: 6498
По умолчанию

Почему бы расстояние от центра не считать или его квадрат? А то какой-то странный способ оценки положения точки относительно центра окружности. А если усложнить и считать угол, то можно и сектор определить, ну это так, вдруг настоящую мишень дартса захочешь использовать )
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.03.2019 в 01:00.
Аватар на форуме   Ответить с цитированием
Старый 18.03.2019, 11:06   #5
IliaIT
Участник клуба
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 965
Репутация: 508
По умолчанию

По факту, как понял, тебе надо вычислить радиус относительно какого то центра. так и используй формулу круга. (х-а)^2+(y-b)^2=R^2
тебе надо найти R=((x-a)^2+(y-b))^0.5 и потом проверять какой радиус по твоим if. где a-центр по х (175), b-центр по y (175), x координата дротика гризонтальная y координата вертикальная.

да и if лучше заменить на case или использовать else.
__________________
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 18.03.2019 в 11:11.
IliaIT вне форума   Ответить с цитированием
Старый 18.03.2019, 21:06   #6
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 132
Репутация: 10
По умолчанию

Спасибо. Формула круга идеально подошла. Спасибо огромное!
Armageddets вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как пересчитать координаты точки диаграммы в координаты экрана. alex77755 Microsoft Office Excel 3 19.05.2017 14:32
Даны координаты трёх точек, являющихся вершинами некоторого параллелограмма. Найти координаты четвертой вершины. yamato_pm Паскаль 1 18.12.2013 19:42
Как правильно расположить изображение на веб-странице, задав его координаты в CSS? Michael_Ardan HTML и CSS 2 07.02.2013 19:07
Не правильно исчисляются координаты. pastuhdima Помощь студентам 2 17.11.2011 16:09
Как правильно получить координаты по клику на ячейку таблицы? Stilet JavaScript, Ajax 3 26.08.2009 16:19


16:35.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru