Доброго дня,
есть код старого "игрового автомата", который захотелось улучшить. Например если статистика выигрыш\проигрыш начинает выходить из расчетного равновесия (проигрышей, например, становится не 72% на 1000 спинов, а не поднимается выше 50%), то в ячейке А1 появляется триггер "1".
И нужно изменить часть кода макроса этого "автомата", ответственную за генерацию случайного числа в каждом из трех Range на листе, чтобы при появлении триггера в ячейке А1 генерирование числа происходило по другому.
Точнее - нужно, чтобы или при появлении "7" происходила вторая попытка генерирования, или, что лучше всего, генерирование происходило в диапазоне 1..6,8..9 (или только в 1...6) избегая 7.
У меня далеко не лучшим образом всегда понимались конструкции Do..Loop и иже с ними.
И как я не вставляю нужное мне а ля например
или что то навроде, то либо vba ругается на всякое, либо все равно генерирование происходит в диапазоне 0...10.
Можно, конечно попробовать, вставить переброс без звуков и таймера в подпрограмму Win, в котороый через If...Then происходит расчет выигрыша-проигрыша, но хотелось бы попробовать научиться заодно правильно понимать циклы.
Вот исходный код:
есть код старого "игрового автомата", который захотелось улучшить. Например если статистика выигрыш\проигрыш начинает выходить из расчетного равновесия (проигрышей, например, становится не 72% на 1000 спинов, а не поднимается выше 50%), то в ячейке А1 появляется триггер "1".
И нужно изменить часть кода макроса этого "автомата", ответственную за генерацию случайного числа в каждом из трех Range на листе, чтобы при появлении триггера в ячейке А1 генерирование числа происходило по другому.
Точнее - нужно, чтобы или при появлении "7" происходила вторая попытка генерирования, или, что лучше всего, генерирование происходило в диапазоне 1..6,8..9 (или только в 1...6) избегая 7.
У меня далеко не лучшим образом всегда понимались конструкции Do..Loop и иже с ними.
И как я не вставляю нужное мне а ля например
Код |
---|
If Range("A1").Value = "1" Then ... Range("_7").Value = CStr(Int(Rnd() * 6)+1) ' для каждого Range End If |
или что то навроде, то либо vba ругается на всякое, либо все равно генерирование происходит в диапазоне 0...10.
Можно, конечно попробовать, вставить переброс без звуков и таймера в подпрограмму Win, в котороый через If...Then происходит расчет выигрыша-проигрыша, но хотелось бы попробовать научиться заодно правильно понимать циклы.
Вот исходный код:
Код |
---|
Sub Rotate() With slots Hide777 Color1 Randomize Dim PauseTime, Start PauseTime = 0.8 Start = Timer PlSound Do While Timer < Start + PauseTime Range("_7").Value = CStr(Int(Rnd() * 10)) Loop Start = Timer PlSound Do While Timer < Start + PauseTime Range("_77").Value = CStr(Int(Rnd() * 10)) Finish = Timer Loop Start = Timer PlSound Do While Timer < Start + PauseTime Range("_777").Value = CStr(Int(Rnd() * 10)) Loop PlSound0 Win Range("Blnc") = Range("Win") - Range("Ls") + Range("Inst") WriteValue Color3 Color2 Color4 End With End Sub |