<!DOCTYPE html>
<html lang="en">
<head>
<title>五子棋</title>
<meta charset="utf-8">
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
#chess {
position: relative;
width: 762px;
height: 762px;
margin: 50px auto 0px auto;
background-image: url("imgs/timg.jpg");
background-size: 100% 100%;
}
.grid {
width: 50px;
height: 50px;
position: absolute;
padding: 5px;
box-sizing: border-box;
border-radius: 25px;
background-origin: content-box;
background-size: 100% 100%;
background-repeat: no-repeat;
line-height: 50px;
text-align: center;
color: aqua;
}
</style>
</head>
<body>
<div id="chess"></div>
</body>
<script type="text/javascript">
var chess;//棋盘对象
var grid;//二维数组,记录棋盘点是否有棋子,什么棋子
var chessWidth = 15;//棋盘格数
var count = 0;//棋子数,根据棋子数判定当前该是白棋还是黑棋
var block = false;//点击时间锁
var AI = false;//AI开关
function createGrid(x, y) {//创建棋盘节点div
var temp = document.createElement("div");
temp.classList.add("grid");
temp.style.left = (7 + x * 50 )+ "px";
temp.style.top = (7 + y * 50) + "px";
temp.x = x;
temp.y = y;
temp.value = 0;//0为空位,1为黑子,2为白子
return temp;
}
function checkLine(x, y) {//检查是否横向,纵向,斜上,斜下构成五子
var result1 = 3, result2 = 3, result3 = 3, result4 = 3;
for (var i = 0 ; i < 5 ; i ++) {
//三目元算符
result1 &= y + i > 14 ? 0 : grid[x][y + i].value;//判断横向五子
result2 &= x + i > 14 ? 0 : grid[x + i][y].value;//判断纵向五子
result3 &= x + i > 14 || y - i < 0 ? 0 : grid[x + i][y - i].value;//判断斜上五子
result4 &= x + i > 14 || y + i > 14 ? 0 : grid[x + i][y + i].value;//判断斜下五子
}
return result1 | result2 | result3 | result4;
}
function checkFinish() {//检查是否有获胜的一方
for (var i = 0 ; i < grid.length ; i ++) {
for (var j = 0 ; j < grid[i].length ; j ++) {
if (grid[i][j].value == 0) {
continue;
}
var result = checkLine(i, j);
if (result > 0) {
return result;
}
}
}
return 0;
}
function init() {//初始化方法
grid = new Array(chessWidth);
for (var i = 0 ; i < grid.length ; i ++) {//初始化二维棋盘
grid[i] = new Array(chessWidth);
for (var j = 0 ; j < grid[i].length ; j ++) {
grid[i][j] = createGrid(j, i);
grid[i][j].onclick = function() {//棋盘节点点击事件
if (this.value > 0 || block) {//被锁住时或者已有棋子时直接return
return;
}
block = true;//开启锁
this.style.backgroundImage = "url('imgs/" + (count % 2 + 1) + ".png')";//将节点背景更换,根据count计算当前时白子还是黑子。
this.value = count % 2 + 1;//设置节点的value
count += 1;//棋盘棋子数+1
var result = checkFinish();//检查是否结束
if (result == 0) {//没结束
if (AI && count % 2 == 1) {//判断是否有AI
block = false;//关闭锁
aiAction();//AI落子
}
block = false;//关闭锁
} else {//结束了
setTimeout(function () {
alert(result == 1 ? "黑棋胜" : "白棋胜");//弹出获胜方
}, 200);
}
}
chess.appendChild(grid[i][j]);
}
}
}
window.onload = function () {
chess = document.getElementById("chess");
init();
}
</script>
<!-- AI 是电脑计算棋子的下落 -->
<script type="text/javascript">
AI = true;
var debug = false;
function analysisScore(arr) {
var greater3 = 0;
var equal3 = 0;
var greater2 = 0;
var equal2 = 0;
var greater1 = 0;
var equal1 = 0;
for (var i = 0 ; i < arr.length ; i ++) {
if (arr[i] >= 4) {
return 100;
}else if (arr[i] > 3) {
greater3 += 1;
} else if (arr[i] == 3) {
equal3 += 1;
} else if (arr[i] > 2) {
greater2 += 1;
} else if (arr[i] == 2) {
equal2 += 1;
} else if (arr[i] > 1) {
greater1 += 1;
} else if (arr[i] == 1) {
equal1 += 1;
}
}
if (greater3 + equal3 > 1) {//双四
return 95;
}
if (greater3 > 0) {//活四
return 90;
}
if (equal3 > 0 && greater2 > 0) {//四三,下一手上活四
return 85;
}
if (greater2 > 1) {//双三
return 80;
}
if (equal3 > 0) {//冲四
return 60;
}
if (greater2 > 0 && equal2 > 0) {//活三 + 眠三
return 50;
}
if (greater2 > 0 && greater1 > 0) {//活三,可继续连招
return 30;
}
if (greater2 > 0) {//活三
return 25;
}
if (greater1 > 1) {//活二
return 20;
}
if (greater1 > 0) {//活二
return 15;
}
if (equal2 > 1) {//多眠三
return 10;
}
if (equal2 > 0) {//眠三
return 5;
}
if (equal1 > 1) {//绝地
return -1;
}
if (equal1 > 0) {//勉强连着
return 1;
}
return 0;
}
function getRealScore(leftRow, leftCol, rightRow, rightCol, val) {
if (leftRow < 0 || leftRow > 14 || leftCol < 0 || leftCol > 14 || rightRow < 0 || rightRow > 14 || rightCol < 0 || rightCol > 14) {
return false;
}
if ((grid[leftRow][leftCol].value == 0 || grid[leftRow][leftCol].value == val) && (grid[rightRow][rightCol].value == 0 || grid[rightRow][rightCol].value == val)) {
return true;
} else {
return false;
}
}
function getScore(arr, val) {
var result = 0;
for (var i = 0 ; i < arr.length ; i ++) {
if (arr[i].value == 0) {
continue;
} else if (arr[i].value == val) {
result += 1;
} else {
return 0;
}
}
return result;
}
function analysisObliUpLine(row ,col, val) {//斜上方向分析
var maxScore = 0;
for (var i = 0 ; i < 5 ; i ++) {
if (row + 4 - i > 14 || row + 4 - i < 4 || col - 4 + i < 0 || col - 4 + i > 10) {
continue;
}
var arr = [];
for (var j = 0 ; j < 5 ; j ++) {
arr.push(grid[row + 4 - i - j][col - 4 + i + j]);
}
var score = getScore(arr, val);
var realPower = getRealScore(row + 5 - i, col - 5 + i, row - i + 1, col + i + 1, val);
var total = score * (realPower ?
手写html-五子棋小游戏


**五子棋小游戏**是一种基于HTML的网页版游戏,它利用了HTML、CSS和JavaScript等技术来实现。本文将深入探讨如何使用HTML构建一个五子棋游戏,以及在这个过程中涉及的关键知识点。 HTML(HyperText Markup Language)是网页内容的基础,用于定义页面结构和内容。在创建五子棋游戏时,我们需要使用HTML元素来组织页面,如`<div>`用于创建棋盘格子,`<button>`用于放置棋子,以及`<h1>`、`<p>`等元素来添加标题和说明。 1. **布局设计**:HTML5的`<canvas>`元素可以用来绘制棋盘,通过JavaScript来绘制线条和填充颜色,创建出棋盘的网格效果。同时,HTML的`<style>`标签或者外部CSS文件可以设置样式,使棋盘看起来更加美观。 2. **交互功能**:HTML元素的`onclick`事件监听器允许用户点击棋盘格子进行落子,通过JavaScript处理这些事件并更新棋盘状态。JavaScript也用于检查五子连线,判断游戏是否结束。 3. **棋盘逻辑**:实现五子棋的逻辑需要一定的算法知识。例如,检查行、列、对角线上的连续棋子数量,以及在棋盘上找到所有可能的五子连线,这通常需要用到数组和循环。 4. **用户界面**:利用HTML和CSS可以创建友好的用户界面,包括提示信息、计分板、重置游戏等功能。CSS3的动画效果可以增强用户体验,比如在点击棋盘格子时,棋子的下落过程可以设计为平滑的过渡动画。 5. **响应式设计**:为了让游戏在不同设备上都能良好运行,需要考虑响应式布局。利用媒体查询(`@media`)来调整不同屏幕尺寸下的布局,确保游戏在手机和平板等移动设备上也能正常玩。 6. **JavaScript事件处理**:除了`onclick`,还有`onkeydown`等键盘事件,可以实现快捷键操作,提升游戏的可玩性。此外,`setInterval`或`setTimeout`函数可以用来定期更新游戏状态,例如检查是否有五子连珠。 7. **数据存储与恢复**:为了保存用户的进度,可以使用浏览器的`localStorage`或`sessionStorage`来存储当前棋局的状态。当用户重新加载页面时,可以从存储中恢复游戏。 8. **游戏规则**:五子棋的基本规则需要在JavaScript中实现,包括交替落子、禁止重复落子、判断胜负等。这些规则可以通过编写相应的函数来实现。 9. **优化与调试**:为了提高性能,可以考虑使用事件委托来减少事件监听器的数量,使用缓存来避免不必要的计算。同时,使用开发者工具进行调试,确保代码的正确性和效率。 总结来说,创建五子棋小游戏涉及到HTML结构布局、CSS样式设计、JavaScript交互实现以及一定的算法逻辑。通过这样的项目,不仅可以锻炼HTML和JavaScript的编程能力,还能提升逻辑思维和问题解决技巧。无论你是初学者还是有经验的开发者,这个项目都是一个有趣且富有挑战性的学习实践。




















- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 21
- 资源: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2024年中国省、市、县驻地点位数据.zip
- 2011-2022年 省级-人均拥有公共图书馆藏数量.zip
- 基于MATLAB语音信号去噪实现(含GUI)
- matlab程序代码项目案例:使用 Simulink 进行自适应 MPC 设计
- 完整性访问控制系统-计算机系统安全实验
- 基于PCA算法的人脸识别MATLAB源码
- 大二计算机系统综合(SoC)实验的一些参考资料
- 基于Python+Pytorch的轴承故障分析(含CNN、SVM、KNN算法)
- 一个计算机系统实验课程-流水线CPU的设计
- 基于SIFT算法的图像拼接MATLAB源码(含GUI)
- 2023年 中国环境统计年鉴.zip
- 基于微信小程序的商场电子优惠券系统设计全套代码+数据库
- 2024年 专精特新中小企业基本信息库.zip
- 2000-2023年 上市公司-气候风险总词频、气候风险指数.zip
- 2000-2022年 上市公司-战略性新兴产业企业面板数据及企业名单.zip
- 2008-2023年 上市公司-企业研发操纵数据.zip


