Rock-paper-scissors: Difference between revisions

→‎{{header|Lasso}}: Rewritten to use correct Lasso 9 code, and optimized. Added win record tracking and display.
(Added an implementation of Rock Paper Scissors in Lasso. Requires a web server, checks for query-string parameters.)
(→‎{{header|Lasso}}: Rewritten to use correct Lasso 9 code, and optimized. Added win record tracking and display.)
Line 1,716:
 
=={{header|Lasso}}==
Notes: This implementation uses the default session handling in Lasso, and assumes it's running on a web server. User choices are passed in via HTTP as GET query parameters.
<lang Lasso>[
<lang Lasso> session_start('user')
encode_set(-encodenone);
session_startsession_addvar('user', 'historic_choices');
session_addvar('user', 'win_record')
session_addvar('user', 'plays')
var(historic_choices)->isNotA(::map) ? var(historic_choices = map('rock'=0, 'paper'=0, 'scissors'=0))
var(plays)->isNotA(::integer) ? var(plays = 0)
var(win_record)->isNotA(::array) ? var(win_record = array)
define br => '<br>'
define winner(c::string,p::string) => {
if(#c == $superior->find(#p)) => {
$win_record->insert('lasso')
return 'Lasso'
else(#p == $superior->find(#c))
$win_record->insert('user')
return 'User'
else
$win_record->insert('tie')
return 'Nobody'
}
}
var(
choice = web_request->param('choice')->asString,
lookup = array('rock', 'paper', 'scissors'),
computer_choice = $lookup->get(math_random(3,1)),
superior = map('rock'='paper', 'paper'='scissors', 'scissors'='rock'),
controls = '<a href=?choice=rock>Rock</a> <a href=?choice=paper>Paper</a> <a href=?choice=scissors>Scissors</a> <a href=?choice=quit>Quit</a><br/>'
)
if($choice == 'quit') => {^
'See ya. <a href=?>Start over</a>'
session_end('user')
$historic_choices = map('rock'=0, 'paper'=0, 'scissors'=0)
$plays = 0
$win_record = array
else(array('rock','paper','scissors') >> $choice)
$controls
if($plays != 0) => {
local('possibilities') = array
with i in $lookup do => {
loop($historic_choices->find(#i)) => { #possibilities->insert(#i) }
}
$computer_choice = $superior->find(#possibilities->get(math_random($plays,1)))
}
'User chose ' + $choice + br
'Lasso chose ' + $computer_choice + br
winner($computer_choice->asString, $choice) + ' wins!'
$historic_choices->find($choice) = $historic_choices->find($choice)+1
$plays += 1
else($choice->size == 0)
$controls
else
'Invalid Choice.'+ br + $controls
^}
if($win_record->size) => {^
br
br
'Win record: '+br
'Lasso: '+($win_record->find('lasso')->size)+br
'User: '+($win_record->find('user')->size)+br
'Tie: '+($win_record->find('tie')->size)+br
^}</lang>
{{out}}
<pre>Rock Paper Scissors Quit (<- as links)
User chose paper
Lasso chose rock
User wins!
 
Win record:
define_tag("winner", -required="c", -type="string", -required="p", -type="string");
Lasso: 2
if(#c == $superior->find(#p));
User: 1
return("Lasso");
Tie: 3</pre>
else(#p == $superior->find(#c));
return("User");
else;
return("Nobody");
/if;
/define_tag;
 
var("choice") = action_param("choice");
var("computer_choice") = "";
var("lookup") = map("rock"=1, "paper"=2, "scissors"=3);
var("superior") = map("rock"="paper", "paper"="scissors", "scissors"="rock");
var("controls") = "<a href=?choice=rock>Rock</a> <a href=?choice=paper>Paper</a> <a href=?choice=scissors>Scissors</a> <a href=?choice=quit>Quit</a><br/>";
 
if(string($choice) == "quit");
output("See ya. <a href=?>Start over</a>");
session_end('user');
 
else(array("rock","paper","scissors") >> $choice);
 
output($controls);
 
if(!var_defined("historic_choices"));
var("historic_choices") = map("rock"=0, "paper"=0, "scissors"=0);
var("plays") = 0;
session_addvar("user", "historic_choices");
session_addvar("user", "plays");
$computer_choice = $lookup->get(math_random(-lower=1, -upper=4))->first;
/if;
 
if($plays != 0);
local("possibilities") = array();
iterate($lookup, local("i"));
loop($historic_choices->find(#i->first)); #possibilities->insert(#i->first); /loop;
/iterate;
$computer_choice = $superior->find(#possibilities->get(math_random(-lower=1, -upper=($plays))));
/if;
 
output("User chose " + $choice + "<br/>");
output("Lasso chose " + $computer_choice + "<br/>");
output(winner(string(($computer_choice)), $choice) + " wins!");
 
$historic_choices->find($choice) = $historic_choices->find($choice)+1;
$plays = $plays+1;
session_addvar("user", "historic_choices");
session_addvar("user", "plays");
 
 
else($choice->size == 0);
output($controls);
 
else;
output("Invalid Choice.<br/>" + $controls);
/if;
 
/encode_set;
]
</lang>
<pre>Notes: This implementation uses the default session handling in Lasso, and assumes it's running on a web server. User choices are passed in via HTTP as query parameters.</pre>
 
=={{header|Liberty BASIC}}==
140

edits