虽然写的不是很好,但 解释权以及版权仍然归13东倍所有!
 <!DOCTYPE HTML>

<html>
<head>
<title>canvas-00</title>
<script>
window.onload=function(){
//alert("coming onload");
alert("游戏说明:在键盘上输入的字符与游戏下落的字符相同时,积分板加分,积分达到一定时,提示进入下一关,若字符落到底部,即游戏结束。点击按钮开始游戏吧!");
var game=new Game();
game.start();
}
function Game(){
//alert("coming Game()");
var
createChar=new Array();
//var scoreBoard=new Array();
var scoreBoard=new CreateScoreBoard();
for(var i=0;i<10;i++){
createChar[i]=new CreateChar();
//scoreBoard[i]=new CreateScoreBoard();
}
 
this.start=function(){
var time=setInterval(function(){
for(var i=0;i<10;i++){
createChar[i].clearContext();
//scoreBoard[i].clearScore();
}

for(var i=0;i<10;i++){

createChar[i].move();
createChar[i].show();
//scoreBoard[i].show();

if(createChar[i].return_y()>490){
clearInterval(time);
for(var i=0;i<10;i++){
createChar[i].clearContext();
}
alert("game over");
break;
}
}

scoreBoard.showScore();
},50);
 
document.onkeydown=keydown;
var jifen=200;
var pass=2;
function keydown(e){
var real=String.fromCharCode(e.which);
//alert(real);
for(var i=0;i<10;i++){
if(real==createChar[i].returnWords()){
//alert("zhong");
//scoreBoard[i].addScores();

scoreBoard.addScores();

//alert("00");
createChar[i].returnTOP();
if(scoreBoard.returnScore()==jifen){
jifen+=200;
alert("恭喜你,点击确定进入第"+(pass++)+"关!");
for(var i=0;i<10;i++){
createChar[i].returnTOP();
createChar[i].speed();
}
}
}
}

}
}
 
}
function CreateChar(){
//alert("coming CreateChar()");
var canvas;
var context;
var char_y=50;
//规定范围内取随机数   *(上限-下限+1)+下限
var char_x;
var words=new Array("A","B","C","D","E","F","G","H","I","J","K","L","N","M","O","P","Q","R","S","T","U","V","W","Z","X","Y");
var num;
var down=1;
function initChar(){
canvas=document.getElementById("myCanvas");
//alert("canvas--"+canvas);
context=canvas.getContext("2d");
//alert("context--"+context);
context.font="20pt 黑体";
num=parseInt(Math.random()*words.length);
char_x=parseInt(Math.random()*(680-20-1)+20);
context.fillText(words[num],char_x,char_y);
}
initChar();
this.move=function(){
char_y+=down;
}
this.show=function(){
context.font="20pt 黑体";
context.fillText(words[num],char_x,char_y);
}
this.clearContext=function(){
//alert("coming clearContext()");
return context.clearRect(0,0,700,500);
}
this.returnWords=function(){
return words[num];
}
this.return_y=function(){
return char_y;
}
this.returnTOP=function(){
char_y=50;
//newChar.style.display="none";
initChar();
}
this.speed=function(){
down++;
}
}
function CreateScoreBoard(){
var canvas;
var context;
var scores=0;
function initScoreBoard(){
//alert("coming initScoreBoard()");
canvas=document.getElementById("myCanvas");
//alert("canvas--"+canvas);
context=canvas.getContext("2d");
//alert("context--"+context);
context.font="20pt 黑体";
//context.fillText("得分:0",400,100);
}
initScoreBoard();

this.showScore=function(){
//context.clearRect(0,0,700,500);
context.font="25pt 黑体";
//context.fillText("",500,30);
context.fillText("得分:"+scores,500,30);
}
this.addScores=function(){
scores+=10;
}
this.clearScore=function(){
//alert("coming clearContext()");
return context.clearRect(0,0,700,500);
}
this.returnScore=function(){
return scores;
}
}
</script>
</head>
<body>
<canvas id="myCanvas" width="700" height="500" style="border:1px solid black"></canvas>
</body>
</html>

键盘游戏之canvas--用OO方式写的更多相关文章

  1. 用OO方式写键盘字母小游戏

    <html>  <head>   <title>0.0</title>   <script>    window.onload=functi ...

  2. HttpWeb服务器之--用OO方式写

    虽然写的不是很好,但 最终解释权以及版权归13东倍所有! package com.web; import java.io.IOException; public class Test { public ...

  3. OO方式下,ALV TREE和ALV GRID的不同之处

    作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...

  4. jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

    地狱的镰刀 bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){ ...

  5. JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

    bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert( ...

  6. Django类方式写view

    问题: Django官方教程中都是通过def函数方式来写view,如何通过类方式写view以及为何要通过类方式写view? 那,如何解决这个问题? 用户访问浏览器,一般两种方式,get获取网页和pos ...

  7. 使用promise方式写settimeout

    //使用promise方式写settimeout, //好处就是用于写动画的时候只需知道后一个的动画在前一个动画结束后多久执行 console.time('settimeout:');//开始计算这段 ...

  8. 代码规范(RL-TOC)用更合理的方式写 JavaScript

    代码可以改变世界 不规范代码可以毁掉世界 只有先学会写规范的代码,才可以走的更远 编程语言之间有很多编程规范都是通用: 命名 不要用语言不明的缩写,不用担心名字过长,名字一定要让别人知道确切的意思; ...

  9. 四种方式写按钮点击事件和Android 中常用的布局

    1.匿名内部类的方式 2.创建一个类实现onClickListener,实现onClick方法,设置控件点击时传一个类的对象 3.让当前类实现onClickListener,设置控件点击事件时传递一个 ...

随机推荐

  1. freemarker报错之八

    1.错误描写叙述 freemarker.core.ParseException: Encountered "string" at line 21, column 21 in typ ...

  2. ListView与DataTable传递数据

    转载自:http://blog.sina.com.cn/s/blog_4b3485000100prhl.html 代码: using System; using System.Collections. ...

  3. c: c代码书写规范

    排版: 较长的语句或函数过程参数(>80字符)要分成多行书写, 长表达式要在低优先级操作符处划分新行,操作符放在新行之首, 划分出的新行要进行适当的缩进,使排版整齐,语句可读 参考: 1. 运算 ...

  4. 在windows下安装mysql5.6.24版本

    链接地址:http://jingyan.baidu.com/article/90bc8fc8615c99f653640cc4.html 工具/原料 官网下载安装包 系统需装net 4.0及以上运行库 ...

  5. Ext.net.DirectMethods

    http://www.ext.net.cn/forum.php?mod=viewthread&tid=1282&highlight=directmethod DirectMethod ...

  6. aop编程 环绕round

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. mockito中两种部分mock的实现,spy、callRealMethod

    什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现). 为什么需要部分mock? A:当需要测试一个 ...

  8. 关于caffe-windows中 compute_image_mean.exe出现的问题

    这两天有兴致装了下caffe.感受下这个框架. 可是在这个过程中遇到非常多问题.我把碰到的问题和解决方式写下,便于后人高速上手. compute_image_mean.exe 编译出来后.运行数据变换 ...

  9. 数据交换工具Kettle

    网上搜集了一些关于开源数据交换工具Kattle的文章,特收藏例如以下: 文章一:ETL和Kettle简单介绍 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.它 ...

  10. android圆形进度条ProgressBar颜色设置

    花样android Progressbar http://www.eoeandroid.com/thread-1081-1-1.html http://www.cnblogs.com/xirihanl ...