
-----------------------------------
sci23
Sat Nov 24, 2007 9:46 pm

help with Rand.Int if statements
-----------------------------------
i need help on my program...the if statements for the Rand.Int don't work(the numbers get screwed up)....so how can i make them work


colour(blue)
put "Welcome to the game Dice"
colour(black)
procedure die1
drawbox(300,50,200,150,7)
drawfilloval(250,100,10,10,7)
end die1

procedure die2
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
end die2


procedure die3
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(250,100,10,10,7)
end die3

procedure die4
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(285,65,10,10,7)
drawfilloval(215,135,10,10,7)
end die4

procedure die5
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(285,65,10,10,7)
drawfilloval(215,135,10,10,7)
drawfilloval(250,100,10,10,7)
end die5

procedure die6
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(285,65,10,10,7)
drawfilloval(215,135,10,10,7)
drawfilloval(215,100,10,10,7)
drawfilloval(285,100,10,10,7)
end die6

procedure d1
drawbox(480,50,380,150,7)
drawfilloval(430,100,10,10,7)
end d1

procedure d2
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
end d2

procedure d3
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(430,100,10,10,7)
end d3

procedure d4
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(465,65,10,10,7)
drawfilloval(395,135,10,10,7)
end d4

procedure d5
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(465,65,10,10,7)
drawfilloval(395,135,10,10,7)
drawfilloval(430,100,10,10,7)
end d5

procedure d6
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(465,65,10,10,7)
drawfilloval(395,135,10,10,7)
drawfilloval(395,100,10,10,7)
drawfilloval(465,100,10,10,7)
end d6

var die : array 1 .. 6 of procedure dice 
var p:int

die (1) := die1 
die (2) := die2 
die (3) := die3 
die (4) := die4
die (5) := die5
die (6) := die6
die (Rand.Int (1, 6))

if die(Rand.Int (1, 6))=die1 then
p:=1
elsif 
die(Rand.Int (1, 6))=die2 then
p:=2
elsif
die(Rand.Int (1, 6))=die3 then
p:=3
elsif
die(Rand.Int (1, 6))=die4 then
p:=4
elsif
die(Rand.Int (1, 6))= die5 then
p:=5
elsif
die(Rand.Int (1, 6))=die6 then
p:=6
end if
put p

var d : array 1..6 of procedure dice
var c:int
d(1):= d1
d(2):= d2
d(3):= d3
d(4):= d4
d(5):= d5
d(6):= d6
d (Rand.Int (1, 6))

if d(Rand.Int (1, 6))=d1 then
c:=1
elsif 
d(Rand.Int (1, 6))=d2 then
c:=2
elsif
d(Rand.Int (1, 6))=d3 then
c:=3
elsif
d(Rand.Int (1, 6))=d4 then
c:=4
elsif
d(Rand.Int (1, 6))=d5 then
c:=5
elsif
d(Rand.Int (1, 6))=d6 then
c:=6
end if
put c


-----------------------------------
Saad
Sat Nov 24, 2007 10:03 pm

RE:help with Rand.Int if statements
-----------------------------------
2 things:
1: You could specify the location of the error
2: When using variables like c, it helps to tell in comments what it is.

But anyway, looking through the code I think the error is in the if statements. Everytime you goto an if-statement a new random number is generated, you should probably store it in a variable

-----------------------------------
HeavenAgain
Sat Nov 24, 2007 10:13 pm

RE:help with Rand.Int if statements
-----------------------------------
loop
var myRandomNumber : int := Rand.Int(1,6)
put "you rolled ",myRandomNumber
end loop

you dont need an array, and you dont have to make a variable for 1 to 6, one variable to keep track of the random is enough
and the if statement is not necessary

-----------------------------------
Wolf_Destiny
Sun Nov 25, 2007 11:00 pm

Re: RE:help with Rand.Int if statements
-----------------------------------
But anyway, looking through the code I think the error is in the if statements. Everytime you goto an if-statement a new random number is generated, you should probably store it in a variable
That is in fact the exact error in your program. Now I do agree with HeavenAgain that you don't need an array, however you should probably get it working and discover the problem before optimizing your code. So in order to fix your problem, before the line "die(Rand.Int(1,6))" add a variable and define its value as Rand.Int(1,6). Then replace each instance of die(Rand.Int(1,6)) with die(YOUR_VAR_NAME_HERE)

Doing the same with d you'll get a bit of code much like the following which runs without error.
colour(blue)
put "Welcome to the game Dice"
colour(black)
procedure die1
drawbox(300,50,200,150,7)
drawfilloval(250,100,10,10,7)
end die1

procedure die2
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
end die2


procedure die3
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(250,100,10,10,7)
end die3

procedure die4
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(285,65,10,10,7)
drawfilloval(215,135,10,10,7)
end die4

procedure die5
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(285,65,10,10,7)
drawfilloval(215,135,10,10,7)
drawfilloval(250,100,10,10,7)
end die5

procedure die6
drawbox(300,50,200,150,7)
drawfilloval(285,135,10,10,7)
drawfilloval(215,65,10,10,7)
drawfilloval(285,65,10,10,7)
drawfilloval(215,135,10,10,7)
drawfilloval(215,100,10,10,7)
drawfilloval(285,100,10,10,7)
end die6

procedure d1
drawbox(480,50,380,150,7)
drawfilloval(430,100,10,10,7)
end d1

procedure d2
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
end d2

procedure d3
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(430,100,10,10,7)
end d3

procedure d4
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(465,65,10,10,7)
drawfilloval(395,135,10,10,7)
end d4

procedure d5
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(465,65,10,10,7)
drawfilloval(395,135,10,10,7)
drawfilloval(430,100,10,10,7)
end d5

procedure d6
drawbox(480,50,380,150,7)
drawfilloval(465,135,10,10,7)
drawfilloval(395,65,10,10,7)
drawfilloval(465,65,10,10,7)
drawfilloval(395,135,10,10,7)
drawfilloval(395,100,10,10,7)
drawfilloval(465,100,10,10,7)
end d6

var die : array 1 .. 6 of procedure dice
var p:int

die (1) := die1
die (2) := die2
die (3) := die3
die (4) := die4
die (5) := die5
die (6) := die6

var ROLLED := Rand.Int (1, 6)
die(ROLLED)

if die(ROLLED)=die1 then
p:=1
elsif
die(ROLLED)=die2 then
p:=2
elsif
die(ROLLED)=die3 then
p:=3
elsif
die(ROLLED)=die4 then
p:=4
elsif
die(ROLLED)= die5 then
p:=5
elsif
die(ROLLED)=die6 then
p:=6
end if
put p

var d : array 1..6 of procedure dice
var c:int
d(1):= d1
d(2):= d2
d(3):= d3
d(4):= d4
d(5):= d5
d(6):= d6

var ROLLED2 := Rand.Int (1, 6)
d (ROLLED2)

if d(ROLLED2)=d1 then
c:=1
elsif
d(ROLLED2)=d2 then
c:=2
elsif
d(ROLLED2)=d3 then
c:=3
elsif
d(ROLLED2)=d4 then
c:=4
elsif
d(ROLLED2)=d5 then
c:=5
elsif
d(ROLLED2)=d6 then
c:=6
end if
put c
(Variable names that I used were ROLLED and ROLLED2 to make the changes more obvious)

Hope that helps!

-----------------------------------
Tony
Sun Nov 25, 2007 11:37 pm

RE:help with Rand.Int if statements
-----------------------------------
It should probably be noted that

var ROLLED := Rand.Int (1, 6)
die(ROLLED)

if die(ROLLED)=die1 then
p:=1
elsif
die(ROLLED)=die2 then
p:=2
elsif
die(ROLLED)=die3 then
p:=3
elsif
die(ROLLED)=die4 then
p:=4
elsif
die(ROLLED)= die5 then
p:=5
elsif
die(ROLLED)=die6 then
p:=6
end if
put p 


is equivalent to


var ROLLED := Rand.Int (1, 6)
die(ROLLED)

p := ROLLED

put p

