JavaScript 实现简易打字游戏核心逻辑解析

作者:异步漫步

时间:2026-10-24

浏览:661

本文介绍基于 JavaScript 实现的一个简易打字游戏。通过面向对象的方式封装游戏逻辑,利用 setInterval 控制字母下落,监听 keydown 事件处理用户输入。代码展示了如何动态创建 DOM 元素、随机生成字母属性以及处理游戏开始与停止的状态切换。

文章目录

游戏效果展示

运行效果如上图所示。


游戏效果展示

核心代码实现

以下是实现该游戏的核心代码部分。


具体代码实现如下:

GAME = {
// 随机生成字母
randLetter: function() {
var arrLetter = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
"X",
"Y", "Z");
// 随机生成字母
var index = Math.floor(Math.random() * 26);
return arrLetter[index];
}, 
// 随机字母颜色
randLetterColor: function() {
var arrLetterColor = new Array("Red", "Green", "#555", "Blue", "Black");
var index = Math.floor(Math.random() * 4);
return arrLetterColor[index];
}, 
// 随机字母大小
randLetterSize: function() {
var arrLetterSize = new Array("12px", "16px", "20px", "24px", "28px", "32px", "36px", "40px");
var index = Math.floor(Math.random() * 7);
return arrLetterSize[index];
}, 
// 创建DIV
divCreate: function(width, height, left, top, value) {
this.width = width;
this.height = height;
this.div = document.createElement("div");
this.div.style.width = width;
this.div.style.height = height;
this.div.style.left = left;
this.div.style.top = top;
this.div.innerText = value;
this.div.style.color = this.randLetterColor();
this.div.style.fontSize = this.randLetterSize();
this.div.style.lineHeight = this.div.style.height;
this.div.style.textAlign = "center";
this.div.style.fontWeight = "bold";
//this.div.style.border = "solid red 1px";
this.div.style.position = "relative";
document.getElementById("map").appendChild(this.div);
return this.div;
}, 
// DIV下落
divDown: function() {
var divTop = parseInt(this.div.style.top.slice(0, -2)); // 字母方块的Top
var mapHeight = parseInt(document.getElementById("map").style.height.slice(0, -2));
// 就消失
if (divTop < mapHeight - parseInt(this.height) + 20) {
this.div.style.top = divTop + 30;
// 获取按键的值
document.onkeydown = function() {
// 按键的字母是不是 等于 div的值
if (String.fromCharCode(event.keyCode) == GAME.div.innerText) {
document.getElementById("TextRecord").value = "正确";
GAME.div.style.display = "none";
clearInterval(GAME.timeCreateID);
GAME.divCreate(100, 100, Math.floor(Math.random() * 300), -30, GAME.randLetter());
} 
else {
document.getElementById("TextRecord").value = "错误";
} 
} 
} 
// 到达底线就消失,之后再创建DIV
else {
this.div.style.display = "none";
GAME.divCreate(100, 100, Math.floor(Math.random() * 300), -30, this.randLetter());
} 
}, 
timeCreateID: null,
timeDownID: null,
START: function() {
this.divCreate(100, 100, 200, -40, this.randLetter());
this.timeDownID = setInterval("GAME.divDown();", 1000);
document.getElementById('ButtonStart').disabled = 'disabled';
document.getElementById('ButtonStop').disabled = '';
}, 
STOP: function() {
if (this.timeDownID != null) {
clearInterval(this.timeDownID);
this.div.style.display = "none";
} 
document.getElementById('ButtonStart').disabled = '';
document.getElementById('ButtonStop').disabled = 'disabled';
} 
} 

效果演示与操作说明

效果演示


 Snmon转正题目 - -||| ,题目需求还要复杂100倍。。。 <p>暂时只实现了随机生成字母,已监听键盘,还未计算得分。</p> <div style="border-bottom: blue 1px solid; border-left: blue 1px solid; width: 400px; height: 300px; border-top: blue 1px solid; border-right: blue 1px solid" id="map"></div> <div id="foot">得分:<input id="TextRecord" value="0" type="text" /> </div> <div><input id="ButtonStart" onclick="GAME.START();" value="GAME START" type="button"><input id="ButtonStop" onclick="GAME.STOP();" value="GAME STOP" type="button"> <div></div>

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章