Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/examples/adding_up_to_10_canvas/js/lesson.js
diff options
context:
space:
mode:
Diffstat (limited to 'examples/adding_up_to_10_canvas/js/lesson.js')
-rwxr-xr-xexamples/adding_up_to_10_canvas/js/lesson.js300
1 files changed, 300 insertions, 0 deletions
diff --git a/examples/adding_up_to_10_canvas/js/lesson.js b/examples/adding_up_to_10_canvas/js/lesson.js
new file mode 100755
index 0000000..efabd88
--- /dev/null
+++ b/examples/adding_up_to_10_canvas/js/lesson.js
@@ -0,0 +1,300 @@
+$(document).ready(
+ function(){
+
+ var k = Karma({
+ image: [
+ {name: "ball", file: "ball37px.png"},
+ {name: "balloon", file: "balloon37px.png"},
+ {name: "banana", file: "banana37px.png"},
+ {name: "chilli", file: "chilli.png"},
+ {name: "fish" , file: "fish64px.png"},
+ {name: "flower", file: "flower37px.png"},
+ {name: "normalChimp", file: "normalChimp_120x125.png"},
+ {name: "happyChimp", file: "happyChimp_120x125.png"},
+ {name: "sadChimp", file: "sadChimp_120x125.png"}
+ ]
+ ,
+ audio: [
+ {name: "correct", file: "correct.ogg"},
+ {name: "incorrect", file: "incorrect.ogg"},
+ {name: "trigger", file: "trigger.ogg"}
+ ],
+ canvas: [
+ {name:"topLt", domId:"topLtCanvas"},
+ {name:"topRt", domId:"topRtCanvas"},
+ {name:"bottomLt", domId:"bottomLtCanvas"},
+ {name:"bottomMd", domId:"bottomMdCanvas"},
+ {name:"bottomRt", domId:"bottomRtCanvas"},
+ {name:"timer", domId:"timerCanvas"},
+ {name:"scorebox", domId:"scoreboxCanvas"},
+ {name:"chimp", domId:"chimpCanvas"}
+ ]
+ });
+
+
+ k.ready(function() {
+ var imgNames = ["ball", "banana", "balloon","chilli", "fish", "flower"];
+ //game logic
+ var total, level=0, time, n0, n1, correct;
+ var maskd=200;
+ var d=160;
+ var choices=[];
+ var score = 0;
+ var speed = 2000;
+ var playerCorrect = 0;
+ var endTimerX = 80;
+ var startTimerY = 10;
+ var endTimerY = 100;
+ var offsetTimerY = 5;
+ var timerId;
+ var isGameRunning = false;
+
+ var timerFn = function () {
+ k.canvas['timer'].clear();
+
+ if ( startTimerY >= endTimerY ){
+ //you didn't answer in time
+ k.audio["trigger"].play();
+ answer(false, true);
+ game();
+ }
+ else {
+ k.canvas['timer'].clear();
+ startTimerY = startTimerY + offsetTimerY;
+ k.canvas['timer'].fillStyle("#ffffff").
+ fillRect(10, startTimerY, endTimerX, 20);
+ }
+ };
+
+ function game () {
+ $.each(k.canvas, function () {
+ if (this.name != "chimp"){
+ this.clear();
+ }
+ });
+
+
+ writeScore();
+ total = Karma.rand( 2, 10 ); //the total
+ n0 = total - Karma.rand(1, total - 1 ); //first number
+ n1 = total - n0; //second number
+
+ //chose one option (the correct option)
+ //and then put the correct value into it
+ correct = Karma.rand( 0, 2 );
+ choices[ correct ] = total;
+
+ for (var i=0; i<3; i++) {
+ //generate the two other options
+ if ( choices[i] === total) {
+ continue;
+ } else {
+ // generate the other options
+ choices[ i ] = Karma.rand( 2, 10 );
+ for (var j = 0; j < i; j++){
+ if (choices[i] === choices[j]) {
+ choices[ i ] = Karma.rand( 2, 10 );
+ }
+ }
+ }
+ }
+
+ var imgId = imgNames[ level ] ;
+
+
+ var card = function (canvas, n, minx, miny, d ) {
+ canvas.save();
+ var pos = [];
+ var x, y, flag;
+
+
+ for (var i=0; i<n; i++) {
+ do {
+ flag = false;
+ x = Karma.rand( 0, d );
+ y = Karma.rand( 0, d );
+ for ( var j=0; j<pos.length; j++) {
+ if ( Karma.distance2( pos[j],
+ {"x": x, "y": y} ) < 120 ) {
+ flag = true;
+ break;
+ }
+ }
+
+ }while ( flag === true );
+ pos.push( { "x":x, "y": y } );
+ //k.image[ imgId ].draw(canvas, x, y )
+ canvas.drawImage(k.image[imgId].media, x, y);
+ }
+
+
+
+ canvas.restore();
+ };
+
+
+ //put the cards
+ card(k.canvas["topLt"], n0 , 0, 0, d);
+ card(k.canvas["topRt"], n1 , 0, 0, d);
+ card(k.canvas["bottomLt"], choices[ 0 ] , 0, 0, d);
+ card(k.canvas["bottomMd"], choices[ 1 ] , 0, 0, d);
+ card(k.canvas["bottomRt"], choices[ 2 ] , 0, 0, d);
+
+ }
+
+ var writeScore = function (){
+ k.canvas["scorebox"].save().
+ clear().
+ font("bold 50px sans-serif white").
+ fillStyle("#fff").
+ textBaseline("middle").
+ fillText("" + score, 30, 100).
+ restore();
+ };
+
+ var answer = function (correct, tooSlow) {
+
+ if ( correct === false) {
+ //answer was incorrect or took too long
+ score = score - 1;
+ playerCorrect = playerCorrect - 1;
+ writeScore();
+ if (tooSlow === true) {
+ k.audio[ "trigger" ].play();
+ } else {
+ k.audio[ "incorrect" ].play();
+ }
+ animateChimp(false);
+
+ } else {
+ score = score + 1;
+ playerCorrect = playerCorrect + 1;
+ writeScore();
+ k.audio[ "correct" ].play();
+ animateChimp(true);
+ if (playerCorrect === 5){
+ level = (level+1)% imgNames.length;
+ speed = speed - 300;
+ playerCorrect = 0;
+ }
+ }
+
+ changeTimer('start');
+
+ };
+
+ var animateChimp = function (answer) {
+ var timerChimp;
+ k.canvas["chimp"].clear();
+ if( answer === true){
+ k.canvas["chimp"].drawImage(
+ k.image["happyChimp"].media, 0, 0);
+ } else {
+ k.canvas["chimp"].drawImage(
+ k.image["sadChimp"].media, 0, 0);
+ }
+
+ var restoreChimp = function () {
+ k.canvas["chimp"].clear();
+ k.canvas["chimp"].drawImage(
+ k.image["normalChimp"].media, 0, 0);
+ };
+
+ timerChimp = setTimeout(restoreChimp, 800);
+
+
+ };
+
+ var changeTimer = function (status){
+ startTimerY = 10;
+ k.canvas["timer"].clear();
+ clearInterval(timerId);
+
+ if (status === 'start'){
+ timerId = setInterval(timerFn, speed);
+ }
+
+ };
+
+ var startStop = function (start) {
+ score = level = 0;
+ startTimerY = 10;
+ isGameRunning = true;
+
+ $.each(k.canvas, function () {
+ if (this.name != "chimp"){
+ this.clear();
+ }
+ });
+
+ changeTimer('start');
+ game();
+
+
+ };
+
+ var start = function () {
+ startStop(true);
+ };
+
+
+ var stop = function () {
+ isGameRunning = false;
+
+ changeTimer('stop');
+ $.each(k.canvas, function () {
+ if (this.name != "chimp"){
+ this.clear();
+ }
+ });
+ };
+
+ var reset = function () {
+ startStop(true);
+ };
+
+
+
+
+
+ //put the buttons
+ var buttons=[];
+ buttons[ 0 ] = { "canvas": k.canvas["bottomLt"], "id": 0};
+ buttons[ 1 ] = { "canvas": k.canvas["bottomMd"], "id": 1};
+ buttons[ 2 ] = { "canvas": k.canvas["bottomRt"], "id": 2};
+
+
+
+ $.each(buttons, function( key, item ) {
+ item.canvas.node
+ .addEventListener('click',
+ function ( ev ) {
+ if(isGameRunning === true){
+ if ( choices[ item.id ] === total){
+ answer(true);
+ game();
+ }else {
+ answer(false);
+ game();
+ }
+ }
+ }, false);
+ });
+
+ document.getElementById('start').
+ addEventListener('click', start, false);
+
+
+ document.getElementById('stop').
+ addEventListener('click', stop, false);
+
+ document.getElementById('reset').
+ addEventListener('click', reset, false);
+
+ k.canvas["chimp"].drawImage(
+ k.image["normalChimp"].media, 0, 0);
+
+ });
+
+
+ }); \ No newline at end of file