Форум программистов, компьютерный форум CyberForum.ru

Подсчет очков в дартс на C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
17.08.2012, 03:16     Подсчет очков в дартс на C++ #1
Всё остальное сделал , осталось только подсчет очков , посоветуйте как сделать подсчет очков?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
17.08.2012, 04:04     Подсчет очков в дартс на C++ #2
Остальное это что? А для подсчета очков обычно используют +
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
17.08.2012, 04:18  [ТС]     Подсчет очков в дартс на C++ #3
ну я это знаю а как узнать на какой сектор попал дротик? сделать отдельно спрайты? каким методом это делают?
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
17.08.2012, 05:52     Подсчет очков в дартс на C++ #4
Цитата Сообщение от roonet_ Посмотреть сообщение
а как узнать на какой сектор попал дротик
Определить координаты дротика и проверить попадает он в сектор или нет

Цитата Сообщение от roonet_ Посмотреть сообщение
сделать отдельно спрайты?
А сейчас они как?
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
17.08.2012, 05:58     Подсчет очков в дартс на C++ #5
Цитата Сообщение от roonet_ Посмотреть сообщение
ну я это знаю а как узнать на какой сектор попал дротик? сделать отдельно спрайты?
Зачем же? Если мишень круг, то узнать в какой сетор вы попали можно проверив координаты точки попадания. Например, вы попали в точку (x, y) мишень радиуса R (естественно x*x + y*y <= R)
тогда: угол "попадания" a = arccos(x/(x*x + y*y)). если сектор расположен между радиусами r1 и r2, межу лучами, составляющими углы a1 и a2 соответственно с ось Ox то попадание в сектор будет при r1 < x*x + y*y < r2 и a1 < a <a2, а сколько очков за это зачислять решать уже вам
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
17.08.2012, 06:16  [ТС]     Подсчет очков в дартс на C++ #6
можете примерный код выложить?
вот пример моего года, это я сделал в центр мишени попадание временно
C++
1
2
3
4
5
6
7
8
9
10
11
12
TVec3 dartPos = dart->GetDrawSpec().mMatrix[2]; 
    for (std::vector<sBoard*>::iterator it = boardVector.begin();it!=boardVector.end();++it)
    {
        cur = (*it)->id;
        TReal radSqrt = (*it)->radSquared;
        TVec3 vec = center - dartPos;
        if (vec.LengthSquared() < radSqrt)
        {
            totalScore = totalScore + scoreArr[cur];
        }
    }
    totalScoreSprite->SetText(str::getFormatted("<outline color=\"#444444\" size=0>%d</outline>", totalScore));
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
17.08.2012, 06:46     Подсчет очков в дартс на C++ #7
Вы какое приложение пишите: CLR, MFC, WINAPI? Консольное или Оконное?
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
17.08.2012, 07:54  [ТС]     Подсчет очков в дартс на C++ #8
на движке Playground SDK
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
17.08.2012, 08:39     Подсчет очков в дартс на C++ #9
Цитата Сообщение от roonet_ Посмотреть сообщение
на движке Playground SDK
Ясненько Тогда примерный код выложить не смогу (может не подойти).
Могу лишь словами разъяснить что примерно нужно сделать.
Вам нужен список секторов мишени, в котором будет храниться информация о них:
- Границы (углы ограничивающих лучей, радиусы ограничивающих окружностей)
- Количество очков за попадание
Функция, проверяющая попадание в сектор:
- передать в качестве параметров указатель на структуру с данными о секторе и координаты точки попадания
- проверить собственно попали или нет (как выше указано)
- вернуть количество очков за сектор если попали и ноль в противном случае
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
17.08.2012, 08:54  [ТС]     Подсчет очков в дартс на C++ #10
всё равно выложить сможете? под него буду делать.
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
17.08.2012, 12:05     Подсчет очков в дартс на C++ #11
Вот что-то в этом роде (на windows.h не обращайте внимание, мне просто не нравится CLR console):
C++
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <windows.h>
#include <iostream>
#include <math.h>
 
using namespace std;
 
const int R = 100;
const double pi = 3.141592653589;
struct SectorList
{
    double angle1, 
           angle2;
    int    radius1, 
           radius2,
           point;
};
 
int Check(SectorList* Sec,double x,double y)
{
    double z1, z2;
    double angle;
    z1 = pow(x,2.0)+pow(y,2.0);
    z2 = pow(z1,0.5);
    if(z2!=0)
    {
    angle = acos(x/z2);
    if((Sec->angle1 <= angle )&&( angle < Sec->angle2 )&& (Sec->radius1 <= z2) && (z2 < Sec->radius2))
    {
        return Sec->point;
    }
    else {return 0;};
    }
    else
    {
        return Sec->point;
    }
}
 
int main()
{
    int score = 0;
    double x, y;
    SectorList Sectors[10];
    Sectors[0].angle1 = 0.0;
    Sectors[0].angle2 = 2*pi;
    Sectors[0].point = 100;
    Sectors[0].radius1 = 0;
    Sectors[0].radius2 = 10;
    for(int i = 1; i < 10; i++)
    {
        Sectors[i].angle1 = (i-1)*pi/5;
        Sectors[i].angle2 = i*pi/5;
        Sectors[i].point = i*5;
        Sectors[i].radius1 = 10;
        Sectors[i].radius2 = R;
    }
    cin >> x >> y;
    for(int i = 0; i < 10; i++)
    {
        score += Check(&Sectors[i],x,y);
    };
    cout << score << endl;
    system("pause");
    return 0;
}
Если появятся вопросы по коду пишите в личку.
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
20.08.2012, 03:13  [ТС]     Подсчет очков в дартс на C++ #12
ок попробую так сделать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2014, 13:32     Подсчет очков в дартс на C++
Еще ссылки по теме:

Вывести на печать номера участников в порядке возрастания набранных ими очков C++
Подобрать танцоров так, чтобы заработать максимум очков C++
C++ Составьте программу для решения задачи. Испытуемый при тестировании может получить некоторое количество очков

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

Или воспользуйтесь поиском по форуму:
DartsMan
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 1
22.12.2014, 13:32     Подсчет очков в дартс на C++ #13
cmath, можете объяснить откуда ведется отсчет в вашей системе координат? Если с левого верхнего угла, то как сделать начало отсчета по центру? Заранее благодарю.

Не по теме:

Где здесь личка?

Yandex
Объявления
22.12.2014, 13:32     Подсчет очков в дартс на C++
Ответ Создать тему
Опции темы

Текущее время: 21:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru