Add another experiment: 'Addition Game'

master
srifqi 2014-09-29 20:22:35 +07:00
parent f31e471325
commit 5917eb56fd
3 changed files with 248 additions and 1 deletions

View File

@ -0,0 +1,246 @@
<html>
<head>
<title>Addition Game</title>
<style>
*, td {
font-family: monospace;
font-size: 12px;
text-align: center;
}
#game {
width: 640px;
height: 480px;
}
#game tbody tr td {
width: 160px;
height: 160px;
}
.p1 {
border: none;
background: #33b5e5;
}
.p1:hover {
background: #0099cc;
}
.p2 {
border: none;
background: #99cc00;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
.p2:hover {
background: #669900;
}
.number {
font-size: 150px;
border-radius: 150px;
width: 150px;
height: 150px;
text-align: center;
vertical-align: middle;
}
.control button, .adder button {
height: 30px;
width: 75%;
font-size: 25px;
}
.stat {
padding-top: 5px;
height: 70px;
font-size: 15px;
width: 75%;
}
</style>
</head>
<body>
<div style="font-size: 10px;">
Addition Game<br/>
Fun and makes you smarter!
</div>
<table id="game">
<tbody>
<tr>
<td><div id="p2_right" class="p2 number"></div></td>
<td><div id="p2_control" class="control"></td>
<td><div id="p2_left" class="p2 number"></div></td>
</tr>
<tr>
<td>
<div id="p2_add1" class="adder"></div>
<div id="p1_add2" class="adder"></div>
</td>
<td>
<div id="status1" class="p2 stat"></div>
<div id="status2" class="p1 stat"></div>
</td>
<td>
<div id="p2_add2" class="adder"></div>
<div id="p1_add1" class="adder"></div>
</td>
</tr>
<tr>
<td><div id="p1_left" class="p1 number"></div></td>
<td><div id="p1_control" class="control"></div></td>
<td><div id="p1_right" class="p1 number"></div></td>
</tr>
</tbody>
</table>
<script src="about:blank"></script>
<script>
var $ = function(id){
return document.getElementById(id);
};
var p1 = [1,1];
var p2 = [1,1];
var turn = 0; //p1's turn
var d = {
p1: {
c: $("p1_control"),
r: $("p1_right"),
l: $("p1_left"),
a1: $("p1_add1"),
a2: $("p1_add2"),
s: $("status1")
},
p2: {
c: $("p2_control"),
r: $("p2_right"),
l: $("p2_left"),
a1: $("p2_add1"),
a2: $("p2_add2"),
s: $("status2")
},
};
function log(text){
d.p1.s.innerHTML = d.p2.s.innerHTML = text;
}
function set(player,id,amount){
var lr = ["left","right"];
log(amount+" was added to player"+player+"'s "+lr[id]+" number");
window["p"+player][id] = (window["p"+player][id] + amount)%5;
turn = (turn+1) %2;
update();
}
function setb(player,a,b){
log("player"+player+" swap between two number ("+a+","+b+")");
var p = window["p"+player];
p[0] = a;
p[1] = b;
turn = (turn+1) %2;
update();
}
function get_control(player){
var p = window["p"+player];
var total = p[0]+p[1];
var pairs = [];
for(var i=0;i<5;i++){
if(
total-i<5&&
total-i>=0&&
p[0]!==i&&
p[1]!==total-i
) {
pairs.push([i,total-i]);
}
}
return pairs;
}
function checkwins(){ //check for any wins
if(p1[0] === p1[1] && p1[0] === 0){
return "player2";
} else if(p2[0] === p2[1] && p2[0] === 0){
return "player1";
}
return false;
}
window.onload = function(){
log("Ready, Set, Go!");
update();
};
function update(){
var winner = checkwins();
if(winner!==false){
log(winner+" wins!");
}
//player1
d.p1.l.innerHTML = p1[0];
d.p1.r.innerHTML = p1[1];
d.p1.a1.innerHTML = [
"<button class='p1' onclick='set(2,0,"+p1[0]+")' "+
(p1[0]===0||turn===1||winner!==false?"disabled":"")+
">add "+p1[0]+"</button>",
"<br/>",
"<button class='p1' onclick='set(2,0,"+p1[1]+")' "+
(p1[1]===0||turn===1||winner!==false?"disabled":"")+
">add "+p1[1]+"</button>"
].join("");
d.p1.a2.innerHTML = [
"<button class='p1' onclick='set(2,1,"+p1[0]+")' "+
(p1[0]===0||turn===1||winner!==false?"disabled":"")+
">add "+p1[0]+"</button>",
"<br/>",
"<button class='p1' onclick='set(2,1,"+p1[1]+")' "+
(p1[1]===0||turn===1||winner!==false?"disabled":"")+
">add "+p1[1]+"</button>"
].join("");
d.p1.c.innerHTML = "";
var c1 = get_control(1);
for(var i=0;i<c1.length;i++){
d.p1.c.innerHTML +=
"<button class='p1' onclick='setb(1,"+c1[i][0]+","+c1[i][1]+")'"+
(turn===1||winner!==false?"disabled":"")+
">"+c1[i].join("-")+"</button><br/>";
}
//player2
d.p2.l.innerHTML = p2[0];
d.p2.r.innerHTML = p2[1];
d.p2.a1.innerHTML = [
"<button class='p2' onclick='set(1,0,"+p2[0]+")' "+
(p2[0]===0||turn===0||winner!==false?"disabled":"")+
">add "+p2[0]+"</button>",
"<br/>",
"<button class='p2' onclick='set(1,0,"+p2[1]+")' "+
(p2[1]===0||turn===0||winner!==false?"disabled":"")+
">add "+p2[1]+"</button>"
].join("");
d.p2.a2.innerHTML = [
"<button class='p2' onclick='set(1,1,"+p2[0]+")' "+
(p2[0]===0||turn===0||winner!==false?"disabled":"")+
">add "+p2[0]+"</button>",
"<br/>",
"<button class='p2' onclick='set(1,1,"+p2[1]+")' "+
(p2[1]===0||turn===0||winner!==false?"disabled":"")+
">add "+p2[1]+"</button>"
].join("");
d.p2.c.innerHTML = "";
var c2 = get_control(2);
for(var i=0;i<c2.length;i++){
d.p2.c.innerHTML +=
"<button class='p2' onclick='setb(2,"+c2[i][0]+","+c2[i][1]+")'"+
(turn===0||winner!==false?"disabled":"")+
">"+c2[i].join("-")+"</button><br/>";
}
}
</script>
<script src='../js/nav.js'></script>
</body>
</html>

View File

@ -11,6 +11,7 @@
<li><a href='waterdrop.html' title='2014'>Waterdrop</a></li>
<li><a href='positive_lens.html' title='June 15, 2014'>Positive Lens</a></li>
<li><a href='negative_lens.html' title='June 20, 2014'>Negative Lens</a></li>
<li><a href='addition_game.html' title='September 29, 2014'>Addition Game</a></li>
</ul>
<script src='../js/nav.js'></script>
</body>

View File

@ -18,5 +18,5 @@
<script>
function G(a,b){for(a=a||1,b=b||1,0>a&&(a=-a),0>b&&(b=-b),b>a&&(a=[b,b=a][0]);;){if(a%=b,0==a)return b;if(b%=a,0==b)return a}}function L(a,b){return a/G(a,b)*b}function k(a,b,c,d){var e=L(b,d),f=e/b*a-e/d*c,g=G(e,f);return[f/g,e/g]}for($ in a)a[$[0]+$[$.length>>1]]=a[$];function l(a,b,c,d,e){var f=a*-d+b*c,a=c-a,b=d-b;return(b*e+f)/a}var e=1e3,g=500,i=500,j=250,h=50,s=240,f=120,K=k(1,f,1,s),S=K[1]/K[0],M=Math.abs(S,s),H=h*M;c.width=e;c.height=g;window.onkeydown=function(a){switch(a.keyCode){case 37:i-1>s&&s++;break;case 38:j-1>h&&h++;break;case 39:s>0&&s--;break;case 40:h>0&&h--}d()};function d(){with(K=k(1,f,1,s),S=K[1]/K[0],M=Math.abs(S/s),H=h*M,a)(A=function(x,y){le(x,y);so();bn();}),cr(0,0,e,g),strokeStyle="#00f",bn(),me(0,j),A(e,j),me(i,9),A(i,g),me(i-3,4),A(i+3,4),me(i,1),A(i,7),strokeStyle="#f00",me(i-s,j),A(i-s,j-h),f>s&&setLineDash([4]),me(i+S,j),A(i+S,j-H*(f>=s?1:-1)),f>s&&setLineDash([0]),strokeStyle="#2af",me(i-f,j-5),A(i-f,j+5),me(i+f,j-5),A(i+f,j+5),me(i-2*f,j-5),A(i-2*f,j+5),me(i+2*f,j-5),A(i+2*f,j+5),strokeStyle="#282",me(i-s,j-h),le(i,j-h),A(e,l(i,j-h,i+f,j,e)),(s<=f&&(setLineDash([4]),me(i,j-h),A(0,l(i,j-h,i+f,j,0)),setLineDash([0]))),me(i-s,j-h),A(e,l(i-s,j-h,i,j,e)),(s<=f&&(setLineDash([4]),me(i-s,j-h),A(0,l(i-s,j-h,i,j,0)),setLineDash([0])))}d();
</script>
<script src='../js/nav.js'></script>
<script src='../js/nav.js'></script>
</body></html>