Advertisement
Python253

RPS_demo

Apr 16th, 2019
565
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 8.98 KB | None | 0 0
  1.  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  3. <!-- saved from url=(0044)http://users.etown.edu/m/mcdevittt/play.html -->
  4. <HTML lang=en-US xml:lang="en-US"
  5. xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>RPS</TITLE>
  6. <META content="A study in Rock Paper Scissors" name=description>
  7. <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
  8. <SCRIPT type=text/javascript>
  9.        
  10.         // setting these two to rock is a hack to always make it throw paper first
  11.         var lastThrow = 'rock';
  12.         var twoThrowsAgo = 'rock';
  13.        
  14.         var count=0;
  15.         var wins = 0;
  16.         var losses = 0;
  17.         var ties = 0;
  18.         var allThrows = "";
  19.        
  20.         // initialize matrix
  21.         // we do this here, instead of a servlet, so it's easier to track and learn from
  22.         // an individual person
  23.        
  24.         var AIMatrix;
  25.        
  26.         function init(){
  27.             AIMatrix = new Object();
  28.            
  29.         // -------ROCK first---------
  30.             AIMatrix.RR = new Object();
  31.             AIMatrix.RR.R = 68;
  32.             AIMatrix.RR.P = 21;
  33.             AIMatrix.RR.S = 11;
  34.            
  35.             AIMatrix.RP = new Object();
  36.             AIMatrix.RP.R = 23;
  37.             AIMatrix.RP.P = 32;
  38.             AIMatrix.RP.S = 45;
  39.            
  40.             AIMatrix.RS = new Object();
  41.             AIMatrix.RS.R = 18;
  42.             AIMatrix.RS.P = 62;
  43.             AIMatrix.RS.S = 20;
  44.            
  45.         // -----PAPER first-------------
  46.             AIMatrix.PR = new Object();
  47.             AIMatrix.PR.R = 24;
  48.             AIMatrix.PR.P = 38;
  49.             AIMatrix.PR.S = 38;
  50.            
  51.             AIMatrix.PP = new Object();
  52.             AIMatrix.PP.R = 21;
  53.             AIMatrix.PP.P = 59;
  54.             AIMatrix.PP.S = 20;
  55.            
  56.             AIMatrix.PS = new Object();
  57.             AIMatrix.PS.R = 36;
  58.             AIMatrix.PS.P = 33;
  59.             AIMatrix.PS.S = 31;
  60.            
  61.            
  62.         // -----SCISSORS first-------------
  63.             AIMatrix.SR = new Object();
  64.             AIMatrix.SR.R = 24;
  65.             AIMatrix.SR.P = 65;
  66.             AIMatrix.SR.S = 11;
  67.            
  68.             AIMatrix.SP = new Object();
  69.             AIMatrix.SP.R = 46;
  70.             AIMatrix.SP.P = 29;
  71.             AIMatrix.SP.S = 25;
  72.            
  73.             AIMatrix.SS = new Object();
  74.             AIMatrix.SS.R = 08;
  75.             AIMatrix.SS.P = 18;
  76.             AIMatrix.SS.S = 74;
  77.            
  78.        
  79.        
  80.         }
  81.        
  82.  
  83.         //given an array of throw probabilities, find response with greatest expected return
  84.         function bestThrow(throwArray){
  85.             // deteremine expected return for each possible throw
  86.             var rReturn = (throwArray.R * 0) + (throwArray.P * -1) + (throwArray.S * 1);
  87.             var pReturn = (throwArray.R * 1) + (throwArray.P * 0) + (throwArray.S * -1);
  88.             var sReturn = (throwArray.R * -1) + (throwArray.P * 1) + (throwArray.S * 0);
  89.            
  90.            
  91.                 // find best throw
  92.                 if((rReturn > pReturn) && (rReturn > sReturn)){
  93.                     return 'rock';
  94.                 }
  95.                 if((pReturn > rReturn) && (pReturn > sReturn)){
  96.                     return 'paper';
  97.                 }
  98.                 if((sReturn > rReturn) && (sReturn > pReturn)){
  99.                     return 'scissors';
  100.                 }
  101.                
  102.                 // if we get to here, there should be a tie, arbitarily create difference
  103.                 // if it's a three way tie, all will be increased twice
  104.                 var rinc = 0;
  105.                 var pinc = 0;
  106.                 var sinc = 0;
  107.                 if(rReturn == pReturn){
  108.                     rinc += (Math.Random() * 5);
  109.                     pinc += (Math.Random() * 5);
  110.                 }
  111.                 if(pReturn == sReturn){
  112.                     pinc += (Math.Random() * 5);
  113.                     sinc += (Math.Random() * 5);
  114.                 }
  115.                 if(sReturn == rReturn){
  116.                     sinc += (Math.Random() * 5);
  117.                     rinc += (Math.Random() * 5);
  118.                 }
  119.                
  120.                 rReturn += rinc;
  121.                 pReturn += pinc;
  122.                 sReturn += sinc;
  123.  
  124.                 // try to find best throw again
  125.                 if((rReturn > pReturn) && (rReturn > sReturn)){
  126.                     return 'rock';
  127.                 }
  128.                 if((pReturn > rReturn) && (pReturn > sReturn)){
  129.                     return 'paper';
  130.                 }
  131.                 if((sReturn > rReturn) && (sReturn > pReturn)){
  132.                     return 'scissors';
  133.                 }
  134.  
  135.            
  136.             // if we get to here, something is wrong, so throw rock arbitrarily(actually, should be random)
  137.             return 'rock';
  138.         }
  139.        
  140.        
  141.         function resolveTurn(playerThrow)
  142.         {
  143.             if (count >= 50){
  144.                 return;
  145.             }
  146.             // determine AI throw here
  147.             var letters = getLetter(twoThrowsAgo) + getLetter(lastThrow);
  148.             //document.getElementById("debug").innerHTML = ("letters are "+letters);
  149.             var throwArray = AIMatrix[letters];
  150.            
  151.             var AIThrow = bestThrow(throwArray);
  152.            
  153.             //resolve round here
  154.             document.getElementById("playerThrow").innerHTML = playerThrow;
  155.             document.getElementById("AIThrow").innerHTML = AIThrow;
  156.            
  157.             //determine winner here
  158.             count++;
  159.             if(playerThrow.match('rock')){
  160.                 if(AIThrow.match('rock')){
  161.                     ties++;
  162.                 }else if(AIThrow.match('paper')){
  163.                     losses++;
  164.                 }else if(AIThrow.match('scissors')){
  165.                     wins++;
  166.                 }else{
  167.                     document.getElementById("debug").innerHTML += ("<br /> couldn't resolve AIThrow in 'rock'");
  168.                 }
  169.             } else if(playerThrow.match('paper')){
  170.                 if(AIThrow.match('rock')){
  171.                     wins++;
  172.                 }else if(AIThrow.match('paper')){
  173.                     ties++;
  174.                 }else if(AIThrow.match('scissors')){
  175.                     losses++;
  176.                 }else{
  177.                     document.getElementById("debug").innerHTML += ("<br /> couldn't resolve AIThrow in 'paper'");
  178.                 }
  179.             } else if(playerThrow.match('scissors')){
  180.                 if(AIThrow.match('rock')){
  181.                     losses++;
  182.                 }else if(AIThrow.match('paper')){
  183.                     wins++;
  184.                 }else if(AIThrow.match( 'scissors')){
  185.                     ties++;
  186.                 }else{
  187.                     document.getElementById("debug").innerHTML += ("<br /> couldn't resolve AIThrow in 'scissors'");
  188.                 }
  189.             } else{
  190.                 document.getElementById("debug").innerHTML += ("<br /> couldn't resolve playerThrow");
  191.             }
  192.              
  193.  
  194.             //update matrix
  195.             var playerLetter = getLetter(playerThrow);
  196.             //document.getElementById("debug").innerHTML = ("letter is "+playerLetter);
  197.             AIMatrix[letters][playerLetter]+= 10;
  198.            
  199.            
  200.             // update throws state
  201.             twoThrowsAgo = lastThrow;
  202.             lastThrow = playerThrow;
  203.             allThrows += getLetter(playerThrow);
  204.            
  205.  
  206.             document.getElementById("wins").innerHTML = wins;
  207.             document.getElementById("ties").innerHTML = ties;
  208.             document.getElementById("losses").innerHTML = losses;
  209.             document.getElementById("gamesLeft").innerHTML = 50-count;
  210.            
  211.             document.getElementById("debug").innerHTML = allThrows;
  212.             if(count >= 50){
  213.                 saveResults();
  214.             }
  215.            
  216.            
  217.            
  218.         }
  219.        
  220.         function getName(letter){
  221.             if(letter.match('R')) return 'rock';
  222.             if(letter.match('P')) return 'paper';
  223.             if(letter.match('S')) return 'scissors';       
  224.            
  225.             //default
  226.             return 'unknown';
  227.         }
  228.  
  229.         function getLetter(name){
  230.             if(name.match('rock')) return 'R';
  231.             if(name.match('paper')) return 'P';
  232.             if(name.match('scissors')) return 'S';     
  233.            
  234.             //default
  235.             return 'U';
  236.         }
  237.  
  238.         // I tried naming the variable throw, but it's a reserved word in JS
  239.  
  240.         // EDIT: Tim is no longer saving results so the contents of this function are being commented out
  241.         function saveResults()
  242.         {
  243.             // var url=("/rps/AIServlet?playerId=${id}&wins="+wins+"&losses="+losses+"&ties="+ties+"&allThrows="+allThrows);
  244.             // document.getElementById("debug").innerHTML = url;
  245.            
  246.             // var ajax = new AJAXInteraction(url);
  247.            
  248.             // ajax.send();
  249.            
  250.         }
  251.        
  252.         function postProcess(xml)
  253.         {
  254.             //parse ajax respone here
  255.             var response = xml.getElementsByTagName("response")[0].childNodes[0].nodeValue;
  256.             if(response.match('success')){
  257.                 document.getElementById("debug").innerHTML = "Thank you for playing! Your score has been recorded.";
  258.                    
  259.             }
  260.            
  261.            
  262.         }
  263.  
  264.         function AJAXInteraction(url) {
  265.             this.url = url;
  266.             var req = init();
  267.             req.onreadystatechange = processRequest;
  268.                
  269.             function init() {
  270.               if (window.XMLHttpRequest) {
  271.                 return new XMLHttpRequest();
  272.               } else if (window.ActiveXObject) {
  273.                 isIE = true;
  274.                 return new ActiveXObject("Microsoft.XMLHTTP");
  275.               }
  276.             }
  277.            
  278.             function processRequest () {
  279.               if (req.readyState == 4) {
  280.                 if (req.status == 200) {
  281.                   postProcess(req.responseXML);
  282.                 }
  283.               }
  284.             }
  285.        
  286.             this.send = function() {
  287.                 req.open("GET", url, true);
  288.                 req.send(null);
  289.             }
  290.         }
  291.        
  292.  
  293.  
  294.        
  295.        
  296.     </SCRIPT>
  297.  
  298. <META content="MSHTML 6.00.6000.16674" name=GENERATOR></HEAD>
  299. <BODY onload=init();><!--${id} -->
  300. <H2>You think you got what it takes?</H2><SPAN id=debug></SPAN>
  301. <P>This is my kung fu, and it is strong. </P>Wins: <SPAN id=wins>0</SPAN>
  302. Losses: <SPAN id=losses>0</SPAN> Ties: <SPAN id=ties>0</SPAN> <BR><BR>Games
  303. left: <SPAN id=gamesLeft>50</SPAN> <BR>You threw: <SPAN id=playerThrow>nothing
  304. </SPAN><BR>Comp threw: <SPAN id=AIThrow>nothing </SPAN><BR>
  305. <H3><SPAN id=outcome></SPAN></H3><BR>
  306. <TABLE>
  307.   <TBODY>
  308.   <TR>
  309.     <TD><IMG alt=ROCK src="rock.jpg" width=65> </TD>
  310.     <TD><IMG alt=PAPER src="paper.jpg" width=72> </TD>
  311.     <TD><IMG alt=SCISSORS src="scissors.jpg" width=55> </TD></TR>
  312.   <TR>
  313.     <TD><INPUT onclick="resolveTurn('rock')" type=button value=ROCK name=rock>
  314.     </TD>
  315.     <TD><INPUT onclick="resolveTurn('paper')" type=button value=PAPER name=paper>
  316.     </TD>
  317.     <TD><INPUT onclick="resolveTurn('scissors')" type=button value=SCISSORS name=scissors>
  318.     </TD></TR></TBODY></TABLE></BODY></HTML>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement