JavaScript小游戏实例:简单的键盘练习

合集下载

俄罗斯方块小游戏(HTML游戏使用JavaScript开发)

俄罗斯方块小游戏(HTML游戏使用JavaScript开发)

俄罗斯方块小游戏(HTML游戏使用JavaScript开发)俄罗斯方块是一款风靡全球的经典游戏,现在我们将使用JavaScript语言开发一个基于HTML的俄罗斯方块小游戏。

在这篇文章中,我将介绍游戏的设计思路、实现过程以及一些技术细节。

一、游戏设计思路打开游戏页面后,玩家将看到一个空白的游戏区域,该区域由10列和20行方格构成。

方块将从游戏区域的顶部下落,玩家需要控制方块的方向和位置,使其在下落过程中填满一行或多行。

当一行被完全填满时,该行将被消除,并且玩家得到相应的分数。

游戏的难度会逐渐增加,方块下落的速度会逐渐加快,挑战玩家的反应和操作能力。

当方块堆积到游戏区域的顶部时,游戏结束。

玩家可以选择重新开始游戏或退出游戏。

二、游戏实现过程1. 创建HTML结构首先,我们需要创建一个HTML结构,包含游戏区域以及一些控制按钮。

游戏区域可以使用一个div元素进行表示,每个方格可以使用一个span元素表示。

同时,添加开始按钮和重新开始按钮,用于控制游戏的开始和重新开始。

2. CSS样式设计为了使游戏界面美观,我们需要设计一些CSS样式。

通过设置游戏区域的背景颜色、方格的颜色及边框效果,可以使游戏界面更加具有吸引力。

3. 实现游戏逻辑使用JavaScript语言实现游戏的逻辑部分。

我们需要为方块设计一个类,定义方块的形状、位置以及移动的方法。

在游戏的运行过程中,我们需要检测按键事件,根据玩家的操作移动方块的位置。

同时,需要实现方块的下落、旋转和消除行等功能。

4. 添加事件监听为了使玩家能够操作游戏,我们需要为游戏界面添加键盘事件监听。

通过监听键盘的上、下、左、右方向键,可以控制方块的移动和旋转。

5. 计分和游戏结束在游戏进行过程中,我们需要实时更新玩家的分数,并判断游戏是否结束。

当方块堆积到游戏区域的顶部时,游戏结束,弹出游戏结束的提示框,并显示玩家的最终得分。

三、技术细节在实现俄罗斯方块小游戏的过程中,我们使用了以下技术:1. HTML:用于创建游戏界面的结构,包括游戏区域和按钮等元素。

简单打字游戏编程

简单打字游戏编程

简单打字游戏编程字数:1500字随着计算机技术的迅速发展,各种各样的游戏应运而生,其中打字游戏是一类经典且受欢迎的游戏类型。

在这篇文章中,我将介绍一个简单的打字游戏的编程实现,带领读者一起学习如何利用编程语言来开发一个简易的打字游戏。

在开始之前,我们首先需要确定使用的编程语言。

在本篇文章中,我将使用Python语言来进行游戏的开发。

Python是一种易于学习和使用的编程语言,非常适合初学者。

编写打字游戏的代码之前,请确保你已经安装了Python,并且具备基本的编程知识。

首先,我们需要为游戏设计一个基本的界面。

在这个游戏中,我们将在屏幕上显示一个随机的英文单词,并要求玩家尽快输入正确的单词。

为了实现这个功能,我们需要使用Python的一个叫做`random`的模块来生成随机单词。

下面是一个简单的代码示例:```pythonimport randomdef generate_word():words = ['apple', 'banana', 'cat', 'dog', 'elephant'] # 可以根据需要扩展单词列表return random.choice(words)if __name__ == '__main__':word = generate_word()print(word)```在上面的代码中,`generate_word`函数用于生成一个随机的单词。

我们事先定义了一个单词列表`words`,其中包含了一些常见的英文单词。

然后,使用`random.choice`函数从这个列表中随机选择一个单词,并将其返回。

在主程序部分,我们调用`generate_word`函数并打印生成的单词。

接下来,我们需要实现游戏的主循环。

在游戏开始后,程序会不断生成新的单词,并等待玩家输入。

玩家需要尽快输入正确的单词,否则游戏将结束。

键盘指法练习小游戏

键盘指法练习小游戏

键盘指法练习小游戏键盘指法练习是提高打字速度和准确性的重要方法之一。

通过反复练习,我们可以提高手指的灵活性和记忆键位的能力。

为了让练习变得更加有趣和有挑战性,开发了一款键盘指法练习小游戏。

本文将介绍这款小游戏的特点、玩法和如何开始游戏。

游戏特点1.多种难度选择:游戏提供了多种难度选择,包括初级、中级和高级。

不同难度对应不同的练习内容和速度要求。

2.定制练习内容:游戏支持自定义练习内容。

玩家可以根据自己的需要选择练习字母、单词或短语。

3.实时统计和分数排名:游戏会实时统计玩家的击键速度和准确率,并给予相应的分数。

玩家可以与其他玩家的分数进行比较排名,增加竞争和激励。

4.界面简洁友好:游戏界面简洁明了,操作简单方便。

玩家可以直观地了解自己的练习状态和成绩。

游戏玩法1.选择难度和练习内容:进入游戏后,玩家需要选择练习难度和练习内容。

根据自己的水平和需求进行选择。

2.进入练习模式:选择完难度和练习内容后,游戏会进入练习模式。

在屏幕上会显示出一系列需要按下的键位,玩家需要尽快准确地按下相应的按键。

击键的速度和准确率会实时显示在屏幕上。

3.结束练习:练习时间到达限制或玩家选择结束时,游戏会停止练习并显示最终的分数和排名。

玩家可以选择重新开始或退出游戏。

如何开始游戏1.安装游戏:首先,需要下载并安装游戏应用程序。

游戏适用于多种操作系统,如Windows、macOS和Linux。

2.打开游戏:安装完成后,双击游戏图标或在应用程序菜单中找到游戏并打开它。

3.选择难度和练习内容:在游戏界面上,选择适合自己的难度和练习内容。

例如,选择中级难度和练习字母。

4.开始练习:点击“开始练习”按钮开始游戏。

根据提示,在规定时间内尽量按下所有正确的按键。

5.结束游戏:练习时间到达限制或自己决定结束时,点击“结束游戏”按钮。

游戏将显示你的最终分数和排名。

游戏帮助和建议1.多练多熟练:键盘指法需要持续的练习才能得到提高,建议玩家每天坚持一段时间的练习。

javascript练习题推荐

javascript练习题推荐

javascript练习题推荐JavaScript是一种广泛应用于网页开发的脚本语言,通过学习和练习JavaScript,可以提升你的编程能力并构建出更加交互动态的网页。

本文将推荐一些适用于不同水平的JavaScript练习题,帮助你巩固和扩展自己的JavaScript技能。

一、初级练习题1. 简单计算器:编写一个JavaScript函数,实现简单的加减乘除运算。

要求用户输入两个数字和运算符,然后输出计算结果。

2. 奇数偶数判断:编写一个JavaScript函数,判断给定的数字是奇数还是偶数。

要求用户输入一个数字,然后输出结果。

3. 字符串反转:编写一个JavaScript函数,将给定的字符串反转并输出。

要求用户输入一个字符串,然后输出反转后的结果。

二、中级练习题1. 数组去重:编写一个JavaScript函数,实现数组去重。

要求给定一个数组,输出去除重复元素后的新数组。

2. 阶乘计算:编写一个JavaScript函数,计算给定数字的阶乘。

要求用户输入一个数字,然后输出计算结果。

3. 查找最大元素:编写一个JavaScript函数,找出给定数组中的最大元素并输出。

要求给定一个数组,输出最大元素的值。

三、高级练习题1. Todo List:编写一个简单的Todo List应用,实现添加、删除、标记已完成等功能。

要求使用JavaScript构建前端交互,并能够保存和读取用户的Todo List。

2. 时间倒计时:编写一个JavaScript函数,实现倒计时功能。

要求用户输入一个目标日期和时间,然后输出距离目标时间还有多少时间。

3. 图片轮播:编写一个JavaScript函数,实现图片轮播功能。

要求用户输入一组图片地址,并能够在页面上自动切换展示不同的图片。

通过完成以上练习题,你可以逐渐提升自己的JavaScript编程能力。

同时,你也可以根据自己的兴趣和需求,寻找更多的练习题来进行实践。

记住,不断练习是成为一名优秀JavaScript开发者的关键!。

JavaScript模拟实现键盘打字效果

JavaScript模拟实现键盘打字效果

JavaScript模拟实现键盘打字效果$(function () {var input_type = {init:function ($obj) { = $obj.html().split("")this.length = .length;this.i = 0;},pri:function () {var $this = this//在此处只能使⽤闭包,因为windown.settimeout使函数的this指向object windown,⽽⾮原型链的this对象。

⽽此时我需要递归,所以只能将this对象传到闭包内,递归匿名的闭包函数。

return (function () {if ($this.i > $this.length) {window.clearTimeout(Go)return false;}var char = $$(".div1").append(char[$this.i])$this.i++var Go = window.setTimeout(arguments.callee, 100)//在这⾥arguments.callee妙⽤因为是匿名闭包,调⽤函数本⾝。

})}}//建⽴class类function Input_type() {this.init.apply(this, arguments)}Input_type.prototype = input_type//创建实例var p = new Input_type($(".content"))p.pri()()});总结:为了实现每次循环间隔时间,⽤window.settimeout递归的写法。

因为想⽤原型链封装,this冲突,所以递归调⽤匿名的闭包函数。

⽤arguments.callee表⽰匿名函数。

HTML代码:<button id="pri">pri</button><div class="content" style="display: none;"> 我与⽗亲不相见已⼆年余了,我最不能忘记的是他的背影。

使用JavaScript实现简单的小游戏-贪吃蛇

使用JavaScript实现简单的小游戏-贪吃蛇

使⽤JavaScript实现简单的⼩游戏-贪吃蛇最近初学JavaScript,在这⾥分享贪吃蛇⼩游戏的实现过程,希望能看到的前辈们能指出这个程序的不⾜之处。

##⼤致思路- ⾸先要解决的问题 - 随着蛇头的前进,尾巴也要前进。

- ⽤键盘控制蛇的运动⽅向。

- 初始化⾷物的时候不能初始化到蛇的⾝体上。

- 蛇吃⾷物的时候⾝体会变长。

- 蛇头碰到“墙”,或者⾃⼰的⾝体游戏结束 - 不影响游戏的实现但是有关于游戏体验的设计 - 界⾯的美观。

- 分数的设置。

- 等级的设置(随着分数的增加,蛇前进的速度的增加)。

- 暂停与继续的快捷键。

##符号$说明function $(id){ //在⽂件base.js中return document.getElementById(id);}##代码<!DOCTYPE html><html><head><title>Snake</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><style type="text/css" >body{background-color: #eee; font-family: ⼿札体-简;}#page{width: 960px; height: 560px; margin: 30px auto; background-color: #fdf5e6;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),10px 10px 20px rgba(0,0,0,0.2); border-radius: 5px;}#page div{float: left;}#left{width: 710px; height: 560px; }table{margin: 20px 100px;background-color: #9cc;}td{background-color: #cff;}#right{width: 205px; height: 560px;}#right div{float: none;}#score{width: 200px; height: 190px;;background-color: #ffffe0; border-radius: 10px;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),5px 5px 10px rgba(0,0,0,0.2);margin-top: 20px;}#rank{width: 200px; height: 190px; margin-top: 10px;background-color: #ffffe0;border-radius: 10px;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),5px 5px 10px rgba(0,0,0,0.2);}#right .tag{height:30px; width: 200px ;font-size: 40px;color: #9cf;font-weight: bolder; }#score_num{height: 130px; width: 200px; text-align: center;color: #9cf; font-size: 100px;}#rank_num{height: 130px; width: 200px; text-align: center;color: #9cf; font-size: 100px;}#notice{width: 200px;color: #9cf; margin-top: 5px;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),5px 5px 10px rgba(0,0,0,0.2);background-color: #ffffe0; border-radius: 5px;margin-top: 90px;} </style><script type="text/javascript" src="base.js"></script><script type="text/javascript">//全局变量var max_scope = 30;//贪吃蛇的移动范围var unit = 13;//每⼀个单元格的⼤⼩var speed = 300;//贪吃蛇移动速度var direction = 'left';//贪吃蛇移动⽅向var snake_body = null;var interval = null;//计时器var food = null;var score = 0;//分数(每吃⼀次,分数加⼀)var rank = 1;//随着分数的增加,等级逐渐增加,速度逐渐增加//初始化游戏,使⽤表格做贪吃蛇移动的范围function initGame(){snake_body = new Array();for(i = 0 ; i < max_scope; i++){var row = document.createElement("tr");for( j = 0 ; j < max_scope; j++){var cell = document.createElement("td");cell.id = i + "-" + j;cell.width = unit;cell.height = unit;row.appendChild(cell);}$("tbody").appendChild(row);}initSnake();snakeInterval();initFood();}//贪吃蛇⾝体初始化(随机⽣成)function initSnake(){var x = parseInt(Math.random()*(max_scope-2));var y = parseInt(Math.random()*(max_scope-2));var now_position = x + "-" + y;snake_body.push(now_position);setCellState(now_position);}// 贪吃蛇⾝体染⾊function setCellState(id){$(id).style.background = "#000";}// ⾷物染⾊function setFootState(id){$(id).style.background = "#b10000";}// 贪吃蛇尾巴离开位置染⾊function setCellStateBack(id){$(id).style.background = "";}// 获取贪吃蛇坐标function getSnakePos(i){switch(i){case 'x':return snake_body[0].split('-')[0];case 'y':return snake_body[0].split('-')[1];}}// 计时器function snakeInterval(){interval = window.setInterval('snakeMove()',speed);}// 初始化计时器function resetSnakeInterval(){window.clearInterval(interval);interval = window.setInterval('snakeMove()',speed);}// 设置蛇的移动与移动过程中发⽣的事件function snakeMove(){foodx = food.split('-')[0];foody = food.split('-')[1];switch(direction){case 'left':_x = getSnakePos('x');_y = parseInt(getSnakePos('y')) -1;break;case 'right':_x = getSnakePos('x');_y = parseInt(getSnakePos('y')) +1;break;case 'up':_x = parseInt(getSnakePos('x')) -1;_y = getSnakePos('y');break;case 'down':_x = parseInt(getSnakePos('x')) +1;_y = getSnakePos('y');break;default:_x = getSnakePos('x');_y = parseInt(getSnakePos('y')) -1;break;}//撞到墙游戏结束if (_x < 0 || _x >= max_scope|| _y < 0 || _y >= max_scope){ alert("Game Over! Stupid!");window.clearInterval(interval);}//撞到⾃⼰游戏结束else if (eatItself(_x, _y)){alert("Game Over! Stupid!");window.clearInterval(interval);}//蛇吃到⾷物与吃到⾷物以后加⼀分,并设置相应的等级else if (foodx == _x && foody == _y){snake_body.unshift(foodx + '-' + foody);setCellState(snake_body[0]);initFood();score+=1;$('score_num').innerText = score;if (score == 3) {speed = 250;resetSnakeInterval();rank = 2;}if (score == 6) {speed = 200;resetSnakeInterval();rank = 3;}if (score == 10) {speed = 150;resetSnakeInterval();rank = 4;}if (score == 20) {speed = 100;resetSnakeInterval();rank = 5;}if (score == 30) {speed = 70;resetSnakeInterval();rank = 6;}//将等级写到层中$('rank_num').innerText = rank;}//普通的移动else {snake_body.unshift(_x + '-' + _y);setCellState(snake_body[0]);setCellStateBack(snake_body.pop());}}// 判断贪吃蛇头碰到⾝体的函数function eatItself( x,y){var nowpos = x + '-' + y;for (i = 1 ; i < snake_body.length; i++){if (nowpos == snake_body[i])return true;}}// 设置蛇的移动⽅向以及键盘控制暂停与继续function setDirction(){// alert(event.keyCode);if (event.keyCode == 81) window.clearInterval(interval);if (event.keyCode == 82) interval = window.setInterval('snakeMove()',speed); switch (event.keyCode){case 37:if (direction != "right")direction = "left";break;case 38:if (direction != "down")direction = "up";break;case 39:if (direction != "left")direction = "right";break;case 40:if (direction != "up")direction = "down";break;}}// 初始化⾷物function initFood(){var temp = new Array();for (i = 0 ; i < max_scope ; i++){for (j = 0 ; j < max_scope; j++){temp.push(i + '-' + j);}}var addFoodString = temp.join(',')+',';for(k = 0 ; k <snake_body.length; k++){addFoodString = addFoodString.replace(snake_body[k]+',',"")}var food_array = addFoodString.split(',');food = food_array[parseInt(Math.random()*(food_array.length - 1))]setFootState(food);// $('display').innerText = addFoodString;}// function pause(){// if (event.keyCode == 81)// window.clearInterval(interval);// }</script></head><body onload="initGame()" onkeydown="setDirction()" ><div id = "page"><div id = "left"><table><tbody id = "tbody"></tbody></table></div><div id = "right"><div id = "score"><div class = "tag">Score</div><div id = "score_num">0</div></div><div id = "rank"><div class = "tag">Rank</div><div id = "rank_num">1</div></div><div id = "notice">NOTICE:按'Q'暂停,'E'继续</div></div></div><!-- <div id = "display"> </div> --></body></html>以下是效果图: ![](/blog/885599/201708/885599-20170828144621249-460981364.png)。

简单的Javascript实训4

简单的Javascript实训4

简单的Javascript实训4【操作实例】按钮动画<html><head><script type="text/javascript">function mouseOver(){document.b1.src ="/i/eg_mouse.jpg"}function mouseOut(){document.b1.src ="/i/eg_mouse2.jpg"}</script></head><body><a href="/index.html" target="_blank"><img border="0" alt="Visit W3School!" src="/i/eg_mouse2.jpg" name="b1"onmouseover="mouseOver()" onmouseout="mouseOut()" /></a> </body></html>运行结果:【操作实例】简单的计时<html><head><script type="text/javascript">function timedMsg(){var t=setTimeout("alert('5 秒!')",5000)}</script></head><body><form><input type="button" value="显示定时的警告框" onClick = "timedMsg()"></form><p>请点击上面的按钮。

JavaScript键盘事件常见用法实例分析

JavaScript键盘事件常见用法实例分析

JavaScript键盘事件常见⽤法实例分析JavaScript 键盘事件有以下3种keydown键盘按键按下(如果按着不放,会持续触发该事件),可以捕获组合键。

keypress键盘⾮功能按键按下(在keydown之后触发,如果按着不放会持续触发该事件),只能捕获单个键。

keyup键盘按键弹起,可以捕获组合键。

全局事件对象eventevent.ctrlKey功能键”ctrl”键是否按下。

event.altKey功能键”alt”键是否按下。

event.shiftKey功能键”shift”键是否按下。

event.keyCode键盘按键键码。

event.charCode键盘⾮功能按键的ASCII值,可以⽤其区分⼤⼩写。

String.fromCharCode(event.charCode)将ASCII值转化为对应的字符形式。

注意点KeyDown触发后,不⼀定触发KeyUp。

⽐如此时单击⿏标右键。

其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

KeyPress主要⽤来捕获数字(包括Shift+数字的符号)、字母(注意:包括⼤⼩写)、⼩键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和⽅向键外的ANSI字符。

KeyDown 和 KeyUp 的keyCode区分⼩键盘和主键盘的数字字符。

KeyPress 则不区分⼩键盘和主键盘的数字字符。

keyCode key8BackSpace BackSpace9Tab Tab12Clear13Enter16Shift_L17Control_L18Alt_L19Pause20Caps_Lock27Escape Escape 32space space 33Prior34Next35End36Home37Left38Up39Right40Down41Select42Print43Execute45Insert46Delete47Help480 equal braceright49 1 exclam onesuperior50 2 quotedbl twosuperior51 3 section threesuperior52 4 dollar53 5 percent54 6 ampersand557 slash braceleft568 parenleft bracketleft579 parenright bracketright65 a A66 b B67 c C68 d D69 e E EuroSign70 f F71g G72h H73i I74j J75k K76l L77m M mu78n N79o O80p P81q Q at82r R83s S84t T85u U86v V87w W88x X89y Y90z Z96KP_0 KP_0 97KP_1 KP_1 98KP_2 KP_2 99KP_3 KP_3 100KP_4 KP_4 101KP_5 KP_5102KP_6 KP_6 103KP_7 KP_7 104KP_8 KP_8 105KP_9 KP_9106KP_Multiply KP_Multiply107KP_Add KP_Add108KP_Separator KP_Separator109KP_Subtract KP_Subtract109KP_Subtract110KP_Decimal KP_Decimal111KP_Divide KP_Divide 112F1113F2114F3115F4116F5117F6118F7119F8120F9121F10122F11123F12124F13125F14126F15127F16128F17129F18130F19131F20132F21133F22134F23135F24136Num_Lock137Scroll_Lock187acute grave188comma semicolon 189minus underscore 190period colon192numbersign apostrophe210plusminus hyphen macron211212copyright registered213guillemotleft guillemotright214masculine ordfeminine 215ae AE216cent yen217questiondown exclamdown218onequarter onehalf threequarters220less greater bar221plus asterisk asciitilde 227multiply division228acircumflex Acircumflex229ecircumflex Ecircumflex230icircumflex Icircumflex231ocircumflex OcircumflexOcircumflex232ucircumflex Ucircumflex233ntilde Ntilde 234yacute Yacute 235oslash Ooblique 236aring Aring237ccedilla Ccedilla 238thorn THORN 239eth ETH240diaeresis cedilla currency241agrave Agrave atilde Atilde242egrave Egrave 243igrave Igrave244ograve Ograve otilde Otilde245ugrave Ugrave246adiaeresis Adiaeresis 247ediaeresis Ediaeresis 248idiaeresis Idiaeresis 249odiaeresis Odiaeresis 250udiaeresis Udiaeresis251ssharp question backslash252asciicircum degree 253 3 sterling254Mode_switch测试范例12345 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31<html><body><script type="text/javascript">function appendText(str) {document.body.innerHTML += (str+"<br/>");}document.onkeydown = function(){//如果长按的话,会持续触发keydown和keypress(如果有该事件的话)appendText("onkeydown");if(event.ctrlKey) {appendText("ctrlKey");}if(event.altKey) {appendText("altKey");}if(event.shiftKey) {appendText("shiftKey");}//⽆charCode属性,只有keypress才有该属性if(event.charCode) {appendText(String.fromCharCode(event.charCode));}if(event.keyCode) {appendText(event.keyCode);}//该语句只对chrome和edge有效,可以屏蔽keypress(只对chrome和edge浏览器有效) //event.returnValue = false;};document.onkeypress = function() {//keypress⽆法监听到组合键appendText("onkeypress");if(event.ctrlKey) {31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 if(event.ctrlKey) {appendText("ctrlKey");}if(event.altKey) {appendText("altKey");}if(event.shiftKey) {appendText("shiftKey");}//charCode是字母的Unicode值if(event.charCode) {appendText(String.fromCharCode(event.charCode)); }}document.onkeyup = function() {appendText("onkeyup");}</script></body></html>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
var bubble = bubbles[i];
var dist = Math.sqrt(Math.pow(bubble.x-x,2)+ Math.pow(bubble.y- y,2));
if (dist<= bubble.radius)
{
var mx = bubble.x;
var my = bubble.y;
</script>
</body>
</html>
2.
有了上面的基础,我们可以编写一个简单的键盘练习小游戏,大小写字母出现在游戏面板中,按键盘某个字母键后,对应的字母消失。游戏过程如图2所示。
图2键盘练习小游戏
在Bubbles对象类中增加一个属性letter,表示气泡中显示的字母。
为Windows添加键盘按下keypress事件监听,处理键盘按键。
{
minibubbles.splice(i, 1);
}
}
timer++;
if (timer==spawnRate)
{
bubbles.push(new Bubbles());
timer=0;
spawnRate = rand(50, 100);
}
}
canvas.addEventListener('mousedown', function(){
canvas.height = innerHeight;
canvas.width = innerWidth;
var str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var cnt1=0;
var cnt2=0;
var cnt3=0;
this.gravity = 0.01;
}
Bubbles对象类定义2个方法:绘制气泡的方法draw()、气泡上升时坐标改变方法update()。
miniBubbles对象类定义8个属性:表示小气泡圆心的坐标(x,y)、小气泡半径radius、散开时水平和垂直方向的位移改变量xSpeed和ySpeed、小气泡的填充color、小气泡的减速度gravity、小气泡的存活时间timeToLive。具体定义如下:
function animate()
{
requestAnimationFrame(animate);
ctx.fillStyle = backgroundGradient;
ctx.fillRect(0, 0, canvas.width, canvas.height);
for (var i=bubbles.length-1;i>=0;i--)
}
Bubbles.prototype.draw = function ()
{
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
ctx.fillStyle = this.color;
ctx.fill();
完整的HTML代码如下。
<html>
<head>
<title>刺破气泡小游戏</title>
</head>
<body>
<canvas id="myCanvas"></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
JavaScript
键盘是一种常用的输入设备,灵活熟练地使用键盘进行输入是计算机用户需掌握的一门基本功。下面我们编写一个简单的键盘练习游戏。
1
在编写简单的键盘练习游戏之前,先设计一个简单地刺破气泡交互式小动画。
在面板底部逐个上升一些气泡,用鼠标在某个气泡上单击,该气泡被刺破,刺破后的小气泡逐渐消散在面板中。交互式效果如图1所示。
ctx.fillStyle = this.color;
ctx.fill();
ctx.closePath();
}
miniBubbles.prototype.update = function () {
if (this.y - this.radius > 0)
this.ySpeed += this.gravity;
var mr = rand(2,5);
bubbles.splice(i, 1)
for (var k = 0; k < bubble.radius/mr; k++)
{
minibubbles.push(new miniBubbles(mx,my, mr));
}
return;
}
}
});
animate();
定义两个数组var bubbles = [];和var minibubbles = [];分别存储未刺破的大气泡对象和大气泡刺破后散开的小气泡。
为画布添加鼠标按下事件监控canvas.addEventListener('mousedown', function(){});,在事件处理函数中查找鼠标单击的气泡,然后将该气泡从bubbles数组中删除,向minibubbles数组中添加若干个散开的小气泡。
this.radius = 20;
this.color ='rgba(255, 255, 255, 0.75)';
this.ySpeed= Math.random() * 2;
this.gravity = 0.01;
this.letter=str.charAt(rand(0,str.length-1));
backgroundGradient.addColorStop(0, '#009cff')
backgroundGradient.addColorStop(1, '#007bff')
var bubbles = [];
var minibubbles = [];
var timer = 0;
var spawnRate = 70;
完整的HTML代码如下。
<html>
<head>
<title>简单键盘练习</title>
</head>
<body>
<canvas id="myCanvas"></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
this.x += this.xSpeed;
this.y += this.ySpeed;
this.timeToLive --;
this.draw();
}
var backgroundGradient = ctx.createLinearGradient(0, 0, 0, canvas.height);
this.gravity = 0.01;
}
Bubbles.prototype.draw = function ()
{
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
ctx.fillStyle = t Nhomakorabeais.color;
function rand(min, max)
{
return Math.floor(Math.random() * (max - min + 1) + min);
}
function Bubbles()
{
this.x = rand(30,canvas.width - 30);
this.y = canvas.height;
var x = event.pageX - canvas.getBoundingClientRect().left;
var y = event.pageY - canvas.getBoundingClientRect().top;
//查找被单击的气泡
for (var i=bubbles.length-1; i>=0; i--)
this.ySpeed=(Math.random() - 1) * 0.5;
this.gravity = -0.03;
this.timeToLive = 100;
}
miniBubbles对象类定义2个方法:绘制小气泡的方法draw()、小气泡位置改变改变方法update()。小气泡每次改变位置后,timeToLive减1,当timeToLive值等于0时,从小气泡数组中删除该小气泡,表示该小气泡已消亡。
function Bubbles()
{
this.x = rand(30,canvas.width - 30);
this.y = canvas.height;
this.radius = rand(15, 30);
this.color ='rgba(255, 255, 255, 0.75)';
相关文档
最新文档