写一个网页可视化数独小游戏
时间: 2023-10-03 14:07:03 浏览: 163
好的,我可以为你提供一个简单的数独小游戏的实现代码。这个游戏使用 HTML、CSS 和 JavaScript 编写,采用了随机生成的数独谜题。
首先,HTML 部分,我们需要创建一个九宫格的表格,以及一个按钮用于开始游戏:
```html
<body>
<table>
<tbody>
<tr>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
</tr>
<!-- 其他行省略 -->
</tbody>
</table>
<button id="start-btn">开始游戏</button>
</body>
```
接下来,我们需要编写 CSS 样式,美化表格和按钮:
```css
table {
border-collapse: collapse;
margin: 0 auto;
}
td {
width: 40px;
height: 40px;
text-align: center;
vertical-align: middle;
border: 1px solid #ccc;
}
.cell {
font-size: 24px;
}
#start-btn {
display: block;
margin: 20px auto;
padding: 10px 20px;
font-size: 18px;
background-color: #0088cc;
color: #fff;
border: none;
border-radius: 5px;
}
```
然后,我们需要编写 JavaScript 代码,生成数独谜题并处理用户输入:
```javascript
const table = document.querySelector('table');
const cells = table.querySelectorAll('.cell');
const startBtn = document.querySelector('#start-btn');
let puzzle = null;
// 生成数独谜题
function generatePuzzle() {
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const puzzle = [];
for (let i = 0; i < 9; i++) {
const row = [];
for (let j = 0; j < 9; j++) {
if (i === 0) {
nums.sort(() => Math.random() - 0.5);
}
const col = Math.floor(j / 3) + Math.floor(i / 3) * 3;
const index = nums.findIndex(num => !row.includes(num) && !puzzle.some(r => r[j] === num) && !puzzle.filter((r, k) => Math.floor(k / 3) + Math.floor(i / 3) * 3 === col && k !== i).some(r => r[j] === num));
if (index === -1) {
puzzle.pop();
break;
} else {
row.push(nums.splice(index, 1)[0]);
}
}
puzzle.push(row);
}
return puzzle;
}
// 显示数独谜题
function renderPuzzle() {
puzzle.forEach((row, i) => {
row.forEach((num, j) => {
if (num !== 0) {
cells[i * 9 + j].textContent = num;
} else {
cells[i * 9 + j].textContent = '';
}
});
});
}
// 处理用户输入
function handleInput(e) {
if (e.target.tagName === 'TD') {
const row = Math.floor(Array.from(cells).indexOf(e.target) / 9);
const col = Array.from(cells).indexOf(e.target) % 9;
const num = parseInt(prompt('请输入数字(1~9)', ''));
if (num >= 1 && num <= 9 && puzzle[row][col] === 0) {
puzzle[row][col] = num;
e.target.textContent = num;
if (checkPuzzle()) {
alert('恭喜你,游戏胜利!');
}
}
}
}
// 验证数独谜题是否完成
function checkPuzzle() {
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
if (puzzle[i][j] === 0) {
return false;
}
for (let k = 0; k < 9; k++) {
if (k !== j && puzzle[i][j] === puzzle[i][k]) {
return false;
}
if (k !== i && puzzle[i][j] === puzzle[k][j]) {
return false;
}
const r = Math.floor(i / 3) * 3 + Math.floor(k / 3);
const c = Math.floor(j / 3) * 3 + k % 3;
if (r !== i && c !== j && puzzle[i][j] === puzzle[r][c]) {
return false;
}
}
}
}
return true;
}
// 绑定事件
startBtn.addEventListener('click', () => {
puzzle = generatePuzzle();
renderPuzzle();
table.addEventListener('click', handleInput);
});
```
这样,我们就完成了一个简单的数独小游戏。当用户点击开始游戏按钮时,会生成一个随机生成的数独谜题,并将其显示在九宫格中。当用户点击某个格子并输入数字时,会验证用户输入的数字是否符合数独规则。当用户完成所有格子的填写并符合数独规则时,会弹出一个对话框,告诉用户他已经成功解决了数独谜题。
阅读全文