brentman Posted March 25, 2014 Share Posted March 25, 2014 (edited) I am trying to program a variant of a dice game called cee-lo. User rolls three dice... best to worst listed below.... 4,5,6 - automatic win three 6's three 5's three 4's three 3's three 2's three 1's any pair and 6 any pair and 5 any pair and 4 any pair and 3 any pair and 2 any pair and 1 1,2,3 - automatic loss Any non matching to these which would reroll. They are compared to the banker who wins in a tie. How can i program this without a GIANT if/else nightmare? or is that whats required? a little guidance in the logic of this would be appreciated. Edited March 25, 2014 by brentman Quote Link to comment Share on other sites More sharing options...
requinix Posted March 25, 2014 Share Posted March 25, 2014 (edited) In no particular order, 1. Check for 4,5,6 2. Check that array_count_values() returns 1 item and rank accordingly (the one with 3 quantity, sum / 3, only item in the array, etc.) 3. Check that array_count_values() returns 2 items and rank according to the one with the most instances (ie, 2) 4. Check for 1,2,3 Otherwise reroll. Edited March 25, 2014 by requinix Quote Link to comment Share on other sites More sharing options...
Solution DavidAM Posted March 25, 2014 Solution Share Posted March 25, 2014 Assign a "score" value to each of your "possible" rolls. Then calculate the "score" of each roll and compare. Hint: The "scores" do not have to be incremental, just sequential. /* calcScore($paRoll) - returns int score Calculates a "score" for the Dice. $paRoll - An array of 3 die values Score: 100 4,5,6 - automatic win 60 three 6's 50 three 5's 40 three 4's 30 three 3's 20 three 2's 10 three 1's 6 any pair and 6 5 any pair and 5 4 any pair and 4 3 any pair and 3 2 any pair and 2 1 any pair and 1 -1 1,2,3 - automatic loss 0 Any non matching to these which would reroll. */ function calcScore($paRoll) { // For the "Automatic" scores, we need them in sequence - does not affect other checks sort($paRoll); // Automatic WIN or Automatic LOOSE $check = implode(',', $paRoll); if ($check == '4,5,6') return 100; elseif ($check == '1,2,3') return -1; // Three of a kind - score one die times 10 if ( ($paRoll[0] == $paRoll[1]) and ($paRoll[1] == $paRoll[2])) return ($paRoll[0] * 10); // One Pair - score the matched die value if ($paRoll[0] == $paRoll[1]) return $paRoll[0]; if ($paRoll[1] == $paRoll[2]) return $paRoll[1]; if ($paRoll[0] == $paRoll[2]) return $paRoll[2]; // Nothing return 0; } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.