Release 2012.11.28.00

 
#11

@irobot58 you could pre-assign strings with variables that correspond within the numerical range that you set in the GetRandomUnique()

I was playing around with different spoken words and phrases before this new command... that worked fine, and now it is even better Smile

Here is a simple example... My coding abilities are 30+ years out of date Tongue

Code:


# Randomly choose 10 numbers
# and say numbers out loud.
#-------------------------------

$y = 0

:Start
$y = ($y + 1)

$x = GetRandomUnique(1, 10)

Print ($x)

if ($x = 1)
Say("One")

if ($x = 2)
Say("two")

if ($x = 3)
Say("Three")

if ($x = 4)
Say("Four")

if ($x = 5)
Say("Five")

if ($x = 6)
Say("Six")

if ($x = 7)
Say("Seven")

if ($x = 8)
Say("Eight")

if ($x = 9)
Say("Nine")

if ($x = 10)
Say("Ten")

If ($y = 10)
Goto(end)

Goto (Start)

:End

#12

Oh that's a good one gunner. I expanded on your example with this Smile

Project File: Example-Script-RandomSpeech.EZB

Code:


$nounInt = GetRandom(1, 6)
$adjInt = GetRandom(1, 6)
$verbInt = GetRandom(1, 6)

if ($nounInt = 1)
$noun = "resistors"
if ($nounInt = 2)
$noun = "transistors"
if ($nounInt = 3)
$noun = "microchips"
if ($nounInt = 4)
$noun = "diodes"
if ($nounInt = 5)
$noun = "circuits"

if ($adjInt = 1)
$adj = "burnt"
if ($adjInt = 2)
$adj = "brand new"
if ($adjInt = 3)
$adj = "solid state"
if ($adjInt = 4)
$adj = "high resistance"
if ($adjInt = 5)
$adj = "low resistance"

if ($verbInt = 1)
$verb = "eat"
if ($verbInt = 2)
$verb = "hate"
if ($verbInt = 3)
$verb = "love"
if ($verbInt = 4)
$verb = "destroy"
if ($verbInt = 5)
$verb = "use"

speakStop()
say("I $verb $adj $noun")
print("I $verb $adj $noun")

#13

I like it Smile Funny and much better use of variables and code layout... I'll relearn eventually Tongue

#14

@DJ, I just tried the SendSerial tonight with the latest release, it's working without locking up, and I can now send complete sentences without any problems.

You must of done something or is it me?


Thanks

#15

@charleybot nothing was changed. glad to hear it works for what ever magical reason Smile

#16

Those sneaky little Roboticist elves working away at night again Winky

#17

Hi all,

Yep after 4 years I'm finally getting to the point where I'm working in random routine responses into my robot. I ran into an odd occurrence with my scripting so I dug up this old thread talking about this function.

Anyway, I've written a script that will randomly choose a sound clip from a randomly chosen actor. In the actual script, each actor is divided into their own subsection. In this actor's section are commands to play sound files that will be randomly chosen. Clear as mud? Smile

The problem is if I have a list of choices the last on in the list will never get picked. This happens with either the GetRandomUnique() or the GetRandom() command.

For example if I've written $response = GetRandomUnique(1,4) the 4th number will never generate.

I just had a thought; Is it the way I'm starting my numbering system? Do I need to start with 0?

Here's my code so far. Works pretty good except I can never get the last choice on the list to get picked. Any ideas? Thanks.

Code:


# Choose a random actor and speak a phrase before going to their subsection.
$response = GetRandomUnique(1,3)

# Response depending on random number
if ($response = 1)
ControlCommand("Soundboard v4", Track_61)
Sleep(2000)
Goto(Dr_Smith)
ELSEif ($response = 2)
ControlCommand("Soundboard v4", Track_72)
Sleep(2000)
Goto(R2D2)
ELSEif ($response = 3)
ControlCommand("Soundboard v4", Track_77)
Sleep(2000)
Goto(Will)
endif

# -----------------------------------------
:Dr_Smith
# Speak a random phrase from 1 to 10
$DRresponse = GetRandomUnique(1,10)

# Response depending on random number
if ($DRresponse = 1)
ControlCommand("Soundboard v4", Track_62)
ELSEif ($DRresponse = 2)
ControlCommand("Soundboard v4", Track_63)
ELSEif ($DRresponse = 3)
ControlCommand("Soundboard v4", Track_64)
ELSEif ($DRresponse = 4)
ControlCommand("Soundboard v4", Track_65)
ELSEif ($DRresponse = 5)
ControlCommand("Soundboard v4", Track_66)
ELSEif ($DRresponse = 6)
ControlCommand("Soundboard v4", Track_67)
ELSEif ($DRresponse = 7)
ControlCommand("Soundboard v4", Track_68)
ELSEif ($DRresponse = 8)
ControlCommand("Soundboard v4", Track_69)
ELSEif ($DRresponse = 9)
ControlCommand("Soundboard v4", Track_70)
ELSEif ($DRresponse = 10)
ControlCommand("Soundboard v4", Track_71)
endif
Halt()
#------------------------------------------------------------------

:R2D2
# Speak a random phrase from 1 to 4
$SWresponse = GetRandomUnique(1,4)

# Response depending on random number
if ($SWresponse = 1)
ControlCommand("Soundboard v4", Track_73)
ELSEif ($SWresponse = 2)
ControlCommand("Soundboard v4", Track_74)
ELSEif ($SWresponse = 3)
ControlCommand("Soundboard v4", Track_75)
ELSEif ($SWresponse = 4)
ControlCommand("Soundboard v4", Track_76)
endif
Halt()
#------------------------------------------------------------------

:Will
ControlCommand("Soundboard v4", Track_78)
Halt()

#18

As per Random() functions in programming of all languages that I am aware of, the range of return values includes minValue but not maxValue.

So, to randomly get a number between 1 and 4, you would use GetRandomUnique(1,5)

Code:


# Choose a random actor and speak a phrase before going to their subsection.
$response = GetRandomUnique(1,4)

# Response depending on random number
if ($response = 1)
ControlCommand("Soundboard v4", Track_61)
Sleep(2000)
Goto(Dr_Smith)
ELSEif ($response = 2)
ControlCommand("Soundboard v4", Track_72)
Sleep(2000)
Goto(R2D2)
ELSEif ($response = 3)
ControlCommand("Soundboard v4", Track_77)
Sleep(2000)
Goto(Will)
endif

# -----------------------------------------
:Dr_Smith
# Speak a random phrase from 1 to 10
$DRresponse = GetRandomUnique(1,11)

# Response depending on random number
if ($DRresponse = 1)
ControlCommand("Soundboard v4", Track_62)
ELSEif ($DRresponse = 2)
ControlCommand("Soundboard v4", Track_63)
ELSEif ($DRresponse = 3)
ControlCommand("Soundboard v4", Track_64)
ELSEif ($DRresponse = 4)
ControlCommand("Soundboard v4", Track_65)
ELSEif ($DRresponse = 5)
ControlCommand("Soundboard v4", Track_66)
ELSEif ($DRresponse = 6)
ControlCommand("Soundboard v4", Track_67)
ELSEif ($DRresponse = 7)
ControlCommand("Soundboard v4", Track_68)
ELSEif ($DRresponse = 8)
ControlCommand("Soundboard v4", Track_69)
ELSEif ($DRresponse = 9)
ControlCommand("Soundboard v4", Track_70)
ELSEif ($DRresponse = 10)
ControlCommand("Soundboard v4", Track_71)
endif
Halt()
#------------------------------------------------------------------

:R2D2
# Speak a random phrase from 1 to 4
$SWresponse = GetRandomUnique(1,5)

# Response depending on random number
if ($SWresponse = 1)
ControlCommand("Soundboard v4", Track_73)
ELSEif ($SWresponse = 2)
ControlCommand("Soundboard v4", Track_74)
ELSEif ($SWresponse = 3)
ControlCommand("Soundboard v4", Track_75)
ELSEif ($SWresponse = 4)
ControlCommand("Soundboard v4", Track_76)
endif
Halt()
#------------------------------------------------------------------

:Will
ControlCommand("Soundboard v4", Track_78)
Halt()

#19

Outstanding! Simple solution! Thanks so much. Grin