Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 3
1

Random корректно работает только когда ему дают "одуматься"

30.07.2014, 15:07. Показов 1000. Ответов 5
Метки нет (Все метки)

Доброго времени суток!

При написании тестового приложения возникла проблема : есть класс circ в котором определяется круг, путем задания прямоугольника и заливки. еще есть метод Draw, который рисует его на определенный экземпляр Graphics, и еще один: Move, в котором координаты прямоугольника смещаются на рандомные значение от -10 до 10. так вот, в основном классе объявлено 2 экземпляра этого класса, и по таймеру у обоих происходит вызов move, после чего, по логике, оба круга должны сдвинуться в разные направления..но..оба экземпляра сдвигаются параллельно относительно друг друга,т.е. сдвиг координат о обоих экземпляров одинаков. вопрос: как быть?


TestClasses.rar

заранее спасибо
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2014, 15:07
Ответы с готовыми решениями:

В чем ошибка? Когда печатаю "а" или "б" все работает, а когда "А" или "Б" то он не меняет "А" на "Б"
{Программа заменяет буквы "а" на буквы "б" в введенном тексте} var stroka : string; i :...

Создать программу такую, что пользователь вводит число, а мы ему выдаём "-лет" или "-год" "-года"
4)Создать программу такую, что пользователь вводит число, а мы ему выдаём "-лет" или "-год" "-года".

Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать
Программа сначала считывает данные с файла, потом сортирует их и сохраняет. Мне нужно было сделать...

Зачем перегружать операторы "++", "<<", ">>" и что они дают?
Здравствуйте. Я хотел спросить зачем перегружать оператор &quot;++&quot;, &quot;&lt;&lt;&quot;, &quot;&gt;&gt;&quot; и что они нам дают?

5
287 / 268 / 107
Регистрация: 10.06.2011
Сообщений: 696
30.07.2014, 15:36 2
потому что нету Randomize()
0
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 3
30.07.2014, 16:02  [ТС] 3
Где он должен быть? и какой в нем смысл, если я использую класс Random?
P.S. Если запускать программу по шагам, то все работает и без рандомайза. Не работает, когда просто запускаешь программу

Добавлено через 23 минуты
это первоначальная версия без всяких лишних методов.

VB.NET
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
Public Class Form1
    Dim g As Graphics
    Dim c1, c2 As circ
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        g = Panel1.CreateGraphics()
        c1 = New circ(New Point(200, 100), New Size(5, 5))
        c2 = New circ(New Point(100, 100), New Size(5, 5))
        c1.draw(g)
        c2.draw(g)
    End Sub
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        c1.move()
        c2.move()
        c1.draw(g)
        c2.draw(g)
    End Sub
End Class
 
Public Class circ
    Private r As Rectangle
    Private c As Brush
    Sub New(point As Point, size As Size)
        r = New Rectangle(point, size)
        c = New SolidBrush(Color.Red)
    End Sub
    Sub draw(gr As Graphics)
        gr.FillEllipse(c, r)
    End Sub
    Public Function getloc() As Point
        Return r.Location
    End Function
    Public Sub setLoc(newloc As Point)
        r.Location = newloc
    End Sub
    Public Function getsize() As Size
        Return r.Size
    End Function
    Public Sub move()
        Dim x, y As Integer
        Dim rnd As New Random
        x = rnd.Next(-10, 11)
        y = rnd.Next(-10, 11)
        r.X += x
        r.Y += y
    End Sub
End Class
0
200 / 216 / 87
Регистрация: 21.04.2013
Сообщений: 404
30.07.2014, 17:01 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Может это не (совсем) правильно, но попробуйте объявить rnd не на уровне процедуры, а на уровне класса:
VB.NET
1
Shared rnd As New Random
У меня работает.
1
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 3
30.07.2014, 17:06  [ТС] 5
Однако, действительно работает. Но тогда КАК ЭТО РАБОТЕТ??
Не хочется просто тыкать пальцем в небо при написании, а знать, как и почему оно так делает.
спасибо.
0
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
30.07.2014, 18:40 6
Цитата Сообщение от AlexMath Посмотреть сообщение
оба экземпляра сдвигаются параллельно относительно друг друга,т.е. сдвиг координат о обоих экземпляров одинаков
Получается что класс Random формирует две идентичных случайных последовательности (бог знает почему). Можно обойтись без класса Random:
VB.NET
1
2
3
4
5
6
Dim b1, b2 As Integer
b1 = -10 : b2 = 11
Application.DoEvents()
Randomize()
x = b1 + (b2 - b1)*Rnd(1)
y = b1 + (b2 - b1)*Rnd(1)
Вот вам аналог вихря Мерсена))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2014, 18:40

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Не корректно работает допустимый диапазон для double [Range(typeof(double), "0,00", "49,99")]
Здравствуйте. Имеется простой класс: public class AutoPart { public...

При запросе "Where id = 1" все работает нормально. Но как только "Where id = h", то выдает ошибку
При запросе из таблицы БД MySQL &quot;Where id = 1&quot; все работает нормально. Но как только &quot;Where id =...

Учимся писать грамотно: правописание местоимений - когда пишется "вы", а когда "Вы"?
Ну, слово &quot;неправильно&quot; вы точно пишете неправильно!

Random не правильно работает в игре "угадай число"
Я написал мини-игру отгадай число от 1 до 20. Но когда я ее тестировал, заметил, что если...

Удвоить в строке буквы "ю", "ъ", "ф", "э", а между словами оставить только по одному пробелу
Пользователь заполняет символьную строку русскими буквами. Буквы ю, ъ, ф, э в ней нужно удвоить, а...

пользователь вводит название животного (например, "кот"), а в ответ ему выдается "мяу"
Всем привет! Требуется следующая помощь. Есть готовая задача &quot;Калькулятор&quot;, нужно переделать ее...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.