REBOL[Title: "Yahtzee"] random/seed now num: 0 roll: func["Roll a die" dienum [word!] "die number" /local die][ die: get to-word :dienum if die/edge/color <> red [ img: rejoin["dice" (random 6) ".jpg"] die/image: load to-file img show die ]] swap: func["Swap the colors" dienum [word!] "die number" /local die][ die: get to-word :dienum if num > 0 [either die/edge/color = red [die/edge/color: 110.120.130][die/edge/color: red] show die] ] view layout/size [ ;backdrop %yahtzee.jpg effect [aspect] backdrop 239.235.222 space 4x4 across style lab text 100 black white style fld field 40 white "0" style bx box 144x1 black origin 10x10 lab "Roll Number:" rn: lab 40 "0" pad 21 lab "Turns Left" turns: lab 40 "13"return d1: button %"dice1.jpg" 55x55 [swap 'd1] d2: button %"dice2.jpg" 55x55 [swap 'd2] d3: button %"dice3.jpg" 55x55 [swap 'd3] d4: button %"dice4.jpg" 55x55 [swap 'd4] d5: button %"dice5.jpg" 55x55 [swap 'd5] return ;below b: button "Roll" 75[ if num < 3[ rn/text: num: num + 1 show rn roll 'd1 roll 'd2 roll 'd3 roll 'd4 roll 'd5 ]] button "Next Turn" 70[ d1/edge/color: d2/edge/color: d3/edge/color: d4/edge/color: d5/edge/color: 110.120.130 show d1 show d2 show d3 show d4 show d5 either (to-integer turns/text) > 0 [ rn/text: num: 0 show rn turns/text: ((to-integer turns/text) - 1) show turns ][turns/color: 255.0.0 show turns] ] button "Score" 75[ u_ts/text: 0 if (length? f1/text) > 0 [u_ts/text: (to-integer u_ts/text) + (to-integer f1/text)] if (length? f2/text) > 0 [u_ts/text: (to-integer u_ts/text) + (to-integer f2/text)] if (length? f3/text) > 0 [u_ts/text: (to-integer u_ts/text) + (to-integer f3/text)] if (length? f4/text) > 0 [u_ts/text: (to-integer u_ts/text) + (to-integer f4/text)] if (length? f5/text) > 0 [u_ts/text: (to-integer u_ts/text) + (to-integer f5/text)] if (length? f6/text) > 0 [u_ts/text: (to-integer u_ts/text) + (to-integer f6/text)] show u_ts either (to-integer u_ts/text) > 63 [u_bonus/text: 35][u_bonus/text: 0] upper_total/text: u_total/text: ((to-integer u_ts/text) + (to-integer u_bonus/text)) show u_bonus show u_total show upper_total lower_total/text: 0 if (length? tok/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer tok/text)] if (length? fok/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer fok/text)] if (length? fh/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer fh/text)] if (length? ss/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer ss/text)] if (length? ls/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer ls/text)] if (length? y/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer y/text)] if (length? c/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer c/text)] if (length? yb/text) > 0 [lower_total/text: (to-integer lower_total/text) + (to-integer yb/text)] show lower_total grand_total/text: ((to-integer upper_total/text) + (to-integer lower_total/text)) show grand_total ] button "New Game" 75[ f1/text: f2/text: f3/text: f4/text: f5/text: f6/text: u_ts/text: u_bonus/text: u_total/text: tok/text: fok/text: fh/text: ss/text: ls/text: y/text: c/text: yb/text: lower_total/text: upper_total/text: grand_total/text: "0" show f1 show f2 show f3 show f4 show f5 show f6 show u_ts show u_bonus show u_total show tok show fok show fh show ss show ls show y show c show yb show lower_total show upper_total show grand_total rn/text: num: 0 show rn turns/text: "13" turns/color: 255.255.255 show turns ] return bx 310 origin 10x130 lab "UPPER SECTION" 144 return bx return lab "Aces" f1: fld return lab "Twos" f2: fld return lab "Threes" f3: fld return lab "Fours" f4: fld return lab "Fives" f5: fld return lab "Sixes" f6: fld return bx return lab "TOTAL SCORE" u_ts: lab "0" 40 return lab "BONUS (35) (If TS>63)" u_bonus: lab "0" 40 return lab "TOTAL" u_total: lab "0" 40 return origin 175x130 lab "LOWER SECTION" 144 return bx return lab "3 of a kind (All)" tok: fld return lab "4 of a kind (All)" fok: fld return lab "Full House (25)" fh: fld return lab "Sm. Straight (30)" ss: fld return lab "Lg. Straight (40)" ls: fld return lab "YAHTZEE (50)" y: fld return lab "Chance (All)" c: fld return lab "YAHTZEE BONUS (100+)" yb: fld return bx return lab "TOTAL(LOWER)" lower_total: lab "0" 40 return lab "TOTAL(UPPER)" upper_total: lab "0" 40 return lab "GRAND TOTAL" grand_total: lab "0" 40 return ] 330x490