Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 15

Моделирование игры в дартс VB 6.0

16.11.2015, 11:41. Показов 3742. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать игру дартс для двух игроков
Круговая мишень как в дартс, за один бросок можно набрать от 0 до 50 очков. игроки по очереди бросают по три дротика. Каждая сторона начинает со счёта 301. Метод ведения счёта заключается в выитании полученного кол-во оков из оставшихся.
Победителем считается тот, кто сумел свести свой счёт до нуля первым.
Вопрос, как вести итоговую таблицу бросков?
Как программе определить в зависимости от рандомной координаты на поле кол-во выбитых очков?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2015, 11:41
Ответы с готовыми решениями:

Выполнить моделирование игры
В телевикторине участнику предлагают выбрать один из трёх закрытых чёрных ящиков, причём известно, что в одном из них – приз, а в двух...

Моделирование игры в покер
Недавно начал изучать С++,использую книгу Харви М. Детела Как программировать на С++.В конце одной из глав есть упражнение,в котором нужно...

Моделирование игры с помощью линейного программирования
Моделирование игры с помощью линейного программирования: Торговая фирма разроботола несколько вариантов плана продаж письменных...

34
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 15
24.11.2015, 11:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Alex77755 Посмотреть сообщение
выведешь результат
Понял, а скажите, как можно сделать так, чтобы произошёл выстрел, и там появился крест? не совсем понятно.

Цитата Сообщение от gaw Посмотреть сообщение
нашел
без исходника(
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
24.11.2015, 11:13
Просто нарисовать две линии
0
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 15
24.11.2015, 11:15  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
две линии
ну, допустим я знаю, как нарисовать две линии диагональю, а как сделать рандомный выстрел?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
24.11.2015, 11:23
Рандомно назначить координаты выстрела

Добавлено через 17 секунд
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Randomize
r0 = 82
g = 3
d = 9
 tohka.x = Int(2 * r0 * Rnd - r0)
 tohka.y = Int(2 * r0 * Rnd - r0)
 R = (tohka.x ^ 2 + tohka.y ^ 2) ^ 0.5
 
 GameField.DrawWidth = 3
 GameField.Line (tohka.x - g, tohka.y - g)-(tohka.x + g, tohka.y + g), z ' рисуем крестик
 GameField.Line (tohka.x + g, tohka.y - g)-(tohka.x - g, tohka.y + g), z
1
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 15
24.11.2015, 17:58  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
tohka.x = Int(2 * r0 * Rnd - r0)
*tohka.y = Int(2 * r0 * Rnd - r0)
А что это такое, объект?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
24.11.2015, 18:27
функция
Visual Basic
1
Private Function tohka(z) As Point
тип данных описан выше
Visual Basic
1
2
3
4
Private Type Point
        x As Long
        y As Long
End Type
0
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 15
24.11.2015, 19:33  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
функция
Visual BasicВыделить код
1
Private Function tohka(z) As Point
тип данных описан выше

Блин, запутался со структурой программы, функцию надо объявить в модуле?
из скольких частей состоит эта программа?
дальше чем исчезновения дротиков и подсчёта трёх выстрелов(которые не хотят стрелять) не получается даже вставить готовый код -_-
Начинаю ощущать себя полным идиотом.
Спасибо вам, за ваше терпение.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
24.11.2015, 20:06
Private должно было подсказать, что это не в модуле
Впрочем это твоё право выбрать место объявления переменных
0
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 15
25.11.2015, 12:53  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
zena = Split("1,18,4,13,6,10,15,2,17,3,19,7,16, 8,11,14,9,12,5,20", ",")
For i = 0 To 360 Step 18
* * * * * * a = (i + 9) * Pi / 180
* * * * * * If a1 > i + 9 Then
* * * * * * * *If a1 < i + 27 Then
* * * * * * * *n = (i) / 18
* * * * * * * *zn = Val(zena(n))
* * * * * * * *GoTo 2
* * * * * * * *End If
* * * * * * End If
* * * * Next i
2
Я так понял, это массив, а каким образом он находит точку, не совсем понимаю
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
25.11.2015, 15:51
Зачем искать точку? она (её координаты) задаётся рандомно
Координаты нужны только для строительства крестика и определения радиуса (расстояния от центра мишении до точки) и угла от вертикального вверх радиуса мишени до направления на точку.
По радиусу считается к-т (1 или 2) или макс-мин балы без учета секторов (0, 50,...)
А по углу определяестя номер сектора, в который попал бросок.
А баллы за сектор и есть массив. Так что просто определяется индекс сектора. Он же и есть индекс бала в массиве
Миниатюры
Моделирование игры в дартс VB 6.0  
0
133 / 148 / 64
Регистрация: 27.06.2013
Сообщений: 536
27.11.2015, 15:29
Вот мой вариант. Не судите строго, но буду благодарен за любую критику.

2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.11.2015, 16:04
Kapytan, часто выпадает 25 очков.
Центр мишени по нормальным правилам, насколько я помню, 50 очков.
А 25 где? Просто долго соображал, но ничего не понял.
Миниатюры
Моделирование игры в дартс VB 6.0  
0
133 / 148 / 64
Регистрация: 27.06.2013
Сообщений: 536
27.11.2015, 16:22
SoftIce, 25 - если попадание в пределах среднего круга (может быть, это и неправильно).
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
27.11.2015, 18:48
Kapytan, вот здесь явно не правильно!
Visual Basic
1
2
3
4
Else
    If rad < 1100 Then
        bax = 25
        Exit Function
никогда не дойдёт до определения сектора

Добавлено через 1 час 11 минут
И ещё поправочка: каждый сектор делится на 2 зоны.
Во внешней части сектора очки считаются как обычно, а во внутренней умножаются на 2
Примерно так:
Visual Basic
1
  bax = mas(j, 1) * (2 - Round(rad / 1130, 0))
И не отцентрирована мишень
Вот так точнее будет
Visual Basic
1
wd = Picture1.Width - 120: ht = Picture1.Height - 110
ну и центр мишени
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
If rad > 1820 Then
    bax = 0
    Exit Function
Else
    If rad < 25 Then
        bax = 50
        Exit Function
    Else
        If rad < 60 Then
            bax = 25
            Exit Function
        End If
    End If
End If
3
133 / 148 / 64
Регистрация: 27.06.2013
Сообщений: 536
27.11.2015, 22:53
Alex77755, спасибо.Подправил с учетом Ваших замечаний.
Visual Basic
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Option Base 1
Dim a(20, 2) As Single, r As Single, pi As Single, nach As Single, xx As Single, yy As Single
Dim wd As Single, ht As Single, rad As Single, IGROK As Integer
Dim Kol(2) As Integer, k As Integer
 
Private Sub Command1_Click(Index As Integer)
Dim clr As String
If Index = 0 Then
    clr = vbGreen
    Else
    clr = vbBlue
End If
ok = bax(a, xx, yy)
Picture1.Line (wd / 2 + xx - 70, ht / 2 - yy + 70)-(wd / 2 + xx + 70, ht / 2 - yy - 70), clr
Picture1.Line (wd / 2 + xx + 70, ht / 2 - yy + 70)-(wd / 2 + xx - 70, ht / 2 - yy - 70), clr
List1(Index).AddItem (ok)
List1(Index).Selected(List1(Index).NewIndex) = True
Kol(IGROK + 1) = Kol(IGROK + 1) - ok
Label2(Index) = "Количество очков:" & Kol(IGROK + 1)
If Kol(IGROK + 1) <= 0 Then
    Label3 = "Выиграл " & IGROK + 1 & "-й игрок!"
    Command1(0).Enabled = False
    Command1(1).Enabled = False
    Command2.Enabled = True
    Exit Sub
End If
k = k + 1
If k = 3 Then
    Command1(IGROK).Enabled = False
    If IGROK = 0 Then
        IGROK = 1
        Else
        IGROK = 0
    End If
    Command1(IGROK).Enabled = True
    k = 0
End If
End Sub
 
Private Sub Command2_Click()
List1(0).Clear
List1(1).Clear
IGROK = Timer Mod 2
Command1(IGROK).Enabled = True
Kol(1) = 301: Kol(2) = 301
Label2(0) = "Количество очков:" & Kol(1)
Label2(1) = "Количество очков:" & Kol(2)
k = 0
Label3 = ""
Command2.Enabled = False
End Sub
 
Private Sub Command3_Click()
End
End Sub
 
Private Sub Form_Activate()
pi = 3.1415926535
cuts = Split("20,1,18,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5", ",")
 
Picture1.DrawWidth = 3
nach = -2 * (pi / 40)
a(1, 1) = 1
a(1, 2) = nach
For i = 2 To 20
    a(i, 1) = cuts(i - 1)
    nach = nach + 2 * pi / 20
    a(i, 2) = nach
Next i
wd = Picture1.Width - 120: ht = Picture1.Height - 120
End Sub
Function bax(mas, x, y) As Integer
Dim ug As Single, j As Integer, i As Integer
Randomize Timer
x = 3700 * Rnd() - 1850
y = 3700 * Rnd() - 1850
rad = Sqr(x ^ 2 + y ^ 2)
Select Case True
    Case x > 0 And y > 0: ug = Atn(x / y)
    Case x > 0 And y < 0: ug = pi - Atn(x / Abs(y))
    Case x < 0 And y > 0: ug = 2 * pi - Atn(Abs(x) / y)
    Case x < 0 And y < 0: ug = Atn(x / y) + pi
End Select
If rad > 1820 Then
    bax = 0
    Exit Function
    Else
    If rad < 25 Then
        bax = 50
        Exit Function
        Else
        If rad < 60 Then
            bax = 25
            Exit Function
        End If
    End If
End If
mas(1, 2) = -2 * pi / 40
For j = 1 To 20
    If ug >= mas(j, 2) And ug < (mas(j, 2) + 2 * pi / 20) Then
        bax = mas(j, 1) * (2 - Round(rad / 1130, 0))
        Exit Function
    End If
Next j
End Function
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2015, 22:53
Помогаю со студенческими работами здесь

Cобираю компьютер под 3D-моделирование, анимацию, современные игры.
Здравствуйте, Cобираю компьютер с нуля, задачи: 3D-моделирование, анимация, современные игры, минимальный апгрейд в будущем....

С чего начать 3д моделирование персонажей для игры?
Здравствуйте! Не могли бы мне помочь с одним вопросом?Я создаю игру на Unreal Engine 4,и у меня проблема.Мне нужно 2 персонажа,сделать мне...

Дартс
Стандартная мишень для игры в дартс разделена на 20 ячеек с номерами от 1 до 20. В центре расположено «яблочко», попадание в которое...

Дартс на StringGrid
Нужно сделать дартс с помощью StringGrida. Матрицу я сделал, а прицел хочу сделать с помощью 2-х ScrollBar, то есть ScrollBar замкнуты...

Подсчет очков в дартс на C++
Всё остальное сделал , осталось только подсчет очков , посоветуйте как сделать подсчет очков?


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru