当前位置:首页 > JavaScript

js实现填字

2026-02-02 06:06:36JavaScript

实现填字游戏的JavaScript方法

创建HTML结构

在HTML中设置一个容器用于放置填字游戏的格子,可以使用<table><div>网格布局。每个格子用<input>元素表示,方便用户输入字母。

<div id="crossword-container"></div>

初始化游戏数据

定义填字游戏的布局和单词数据,包括横向和纵向单词的位置、提示信息等。可以使用二维数组表示游戏板。

const crosswordData = {
  board: [
    [1, 0, 0, 1, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 1, 0, 0],
    [1, 0, 0, 0, 1],
    [0, 0, 0, 0, 0]
  ],
  words: [
    { id: 1, clue: "横向1", answer: "HELLO", start: [0, 0], direction: "across" },
    { id: 2, clue: "纵向1", answer: "WORLD", start: [0, 3], direction: "down" }
  ]
};

渲染游戏板

使用JavaScript动态生成填字游戏的界面,根据数据创建输入框和编号。

function renderCrossword() {
  const container = document.getElementById('crossword-container');
  const board = crosswordData.board;

  for (let i = 0; i < board.length; i++) {
    const row = document.createElement('div');
    row.className = 'crossword-row';

    for (let j = 0; j < board[i].length; j++) {
      const cell = document.createElement('input');
      cell.type = 'text';
      cell.maxLength = 1;
      cell.className = 'crossword-cell';

      if (board[i][j] === 0) {
        cell.style.visibility = 'hidden';
      } else {
        // 检查是否需要显示编号
        if (isStartOfWord(i, j)) {
          const number = document.createElement('span');
          number.className = 'cell-number';
          number.textContent = board[i][j];
          cell.appendChild(number);
        }
      }

      row.appendChild(cell);
    }

    container.appendChild(row);
  }
}

添加交互逻辑

实现用户输入验证、自动跳转和答案检查功能。

function setupInputHandlers() {
  const cells = document.querySelectorAll('.crossword-cell');

  cells.forEach(cell => {
    cell.addEventListener('input', (e) => {
      if (e.target.value) {
        // 自动跳转到下一个单元格
        const nextCell = findNextCell(e.target);
        if (nextCell) nextCell.focus();
      }
    });

    cell.addEventListener('keydown', (e) => {
      // 处理方向键导航
      if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {
        e.preventDefault();
        const newCell = navigateWithArrowKeys(e.target, e.key);
        if (newCell) newCell.focus();
      }
    });
  });
}

样式设计

添加CSS样式美化填字游戏界面,包括单元格大小、边框和编号样式。

.crossword-container {
  display: inline-block;
  border: 2px solid #333;
}

.crossword-row {
  display: flex;
}

.crossword-cell {
  width: 40px;
  height: 40px;
  text-align: center;
  font-size: 20px;
  border: 1px solid #ccc;
  position: relative;
}

.cell-number {
  position: absolute;
  top: 2px;
  left: 2px;
  font-size: 10px;
}

游戏逻辑完善

实现单词检查、游戏完成判断和提示功能。

function checkAnswers() {
  const cells = document.querySelectorAll('.crossword-cell');
  let allCorrect = true;

  crosswordData.words.forEach(word => {
    const userAnswer = getCurrentAnswer(word);
    if (userAnswer !== word.answer) {
      allCorrect = false;
      highlightIncorrect(word);
    }
  });

  if (allCorrect) {
    alert('恭喜!所有答案都正确!');
  }
}

function getCurrentAnswer(word) {
  let answer = '';
  let [row, col] = word.start;

  for (let i = 0; i < word.answer.length; i++) {
    const cell = document.querySelector(`.crossword-cell:nth-child(${col + 1})`, 
      `.crossword-row:nth-child(${row + 1})`);
    answer += cell.value || ' ';

    if (word.direction === 'across') col++;
    else row++;
  }

  return answer.trim().toUpperCase();
}

初始化游戏

在页面加载完成后调用初始化函数。

js实现填字

document.addEventListener('DOMContentLoaded', () => {
  renderCrossword();
  setupInputHandlers();
});

这个实现提供了填字游戏的基本功能,包括动态生成游戏板、用户输入处理、答案验证和简单的界面交互。可以根据需要扩展更多功能,如计时器、保存进度或生成随机填字游戏等。

标签: js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…