古老的五子棋

2023-11-02 07:20
文章标签 五子棋 古老

本文主要是介绍古老的五子棋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

午休忽然想起我奶奶喜欢下的一种古老的五子棋游戏,于是花了半小时开发出来了~

源代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>棋盘图案</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #faf1c0;}canvas {background-color: #DAA520; /* 黄棕色 */border: 1px solid black;}</style>
</head>
<body><canvas id="chessboard" width="600" height="600"></canvas><script>const canvas = document.getElementById('chessboard');const ctx = canvas.getContext('2d');// 棋子信息存储let pieces = [];// 棋盘信息存储let board = { size: canvas.width, margin: canvas.width * 0.05, step: (canvas.width - canvas.width * 0.1) / 4 };board.drawableSize = board.size - 2 * board.margin;// 当前拖拽的棋子let currentPiece = null;function drawPiece(x, y, color, isDragging = false) {const radius = board.size / 28;  // 棋子的半径,可以根据需要调整ctx.beginPath();ctx.arc(x, y, radius, 0, Math.PI * 2);ctx.fillStyle = color;ctx.fill();if (isDragging) {ctx.strokeStyle = 'red';ctx.stroke();}ctx.closePath();return { x, y, radius, color };}function drawChessboard() {ctx.clearRect(0, 0, board.size, board.size);for (let i = 0; i <= 4; i++) {ctx.moveTo(board.margin, board.margin + i * board.step);ctx.lineTo(board.margin + board.drawableSize, board.margin + i * board.step);ctx.moveTo(board.margin + i * board.step, board.margin);ctx.lineTo(board.margin + i * board.step, board.margin + board.drawableSize);}let size = board.sizelet step = board.steplet margin =  board.margin// 画对角线ctx.moveTo(margin, margin);ctx.lineTo(size-margin, size-margin);ctx.moveTo(margin, size-margin);ctx.lineTo(size-margin, margin);ctx.moveTo(margin, 2*step+margin);ctx.lineTo(2 * step+margin, size-margin);ctx.moveTo(2*step+margin, margin);ctx.lineTo(size-margin, 2 * step+margin);ctx.moveTo(margin, 2 * step+margin);ctx.lineTo(2 * step+margin, margin);ctx.moveTo(2*step+margin, size-margin);ctx.lineTo(size-margin, 2*step+margin);ctx.stroke();ctx.stroke();}// 初始化棋子function initPieces() {pieces = [];// 画白色棋子for (let i = 0; i <= 4; i++) {pieces.push(drawPiece(i * board.step + board.margin, board.margin, 'white'));}// 画黑色棋子for (let i = 0; i <= 4; i++) {pieces.push(drawPiece(i * board.step + board.margin, board.size - board.margin, 'black'));}}// 检测坐标是否在棋子上function isPieceUnderCoordinate(x, y, piece) {const distance = Math.sqrt((x - piece.x) ** 2 + (y - piece.y) ** 2);return distance < piece.radius;}// 开始拖拽canvas.onmousedown = function(event) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;for (const piece of pieces) {if (isPieceUnderCoordinate(x, y, piece)) {currentPiece = piece;break;}}};// 拖拽移动canvas.onmousemove = function(event) {if (currentPiece) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;drawChessboard();for (const piece of pieces) {if (piece === currentPiece) {drawPiece(x, y, piece.color, true);} else {drawPiece(piece.x, piece.y, piece.color);}}}};// 放下棋子canvas.onmouseup = function(event) {if (currentPiece) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;// 计算最接近的交点const closestX = Math.round((x - board.margin) / board.step) * board.step + board.margin;const closestY = Math.round((y - board.margin) / board.step) * board.step + board.margin;// 更新棋子位置currentPiece.x = closestX;currentPiece.y = closestY;drawChessboard();for (const piece of pieces) {drawPiece(piece.x, piece.y, piece.color);}}currentPiece = null;};// 双击切换棋子颜色canvas.ondblclick = function(event) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;for (const piece of pieces) {if (isPieceUnderCoordinate(x, y, piece)) {// 切换颜色piece.color = piece.color === 'white' ? 'black' : 'white';// 重新绘制棋盘和棋子drawChessboard();for (const piece of pieces) {drawPiece(piece.x, piece.y, piece.color);}break;}}};drawChessboard();initPieces();</script>
</body>
</html>

效果图:

这篇关于古老的五子棋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329010

相关文章

8阶段项目:五子棋(附带源码)

8阶段项目:五子棋 8.1-技术实现 1.静态变量 静态变量只能定义在类中,不能定义在方法中。静态变量可以在static修饰的方法中使用,也可以在非静态的方法中访问。主要解决在静态方法中不能访问非静态的变量。 2.静态方法 静态方法就相当于一个箱子,只是这个箱子中装的是代码,需要使用这些代码的时候,就把这个箱子放在指定的位置即可。   /*** 静态变量和静态方法*/public cl

[期末]MVC模式写一个Java五子棋(含完整源码及简单AI)

GobangGame 一个下五子棋的java小程序 本程序参考翁恺老师细胞模拟机的控制模式编写 概述及目标 五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用两色的棋子,下在棋盘上,先形成5子连线者获胜。 本程序有命令行界面与图形化界面,用户通过相应方式输入下子位置后与Robot进行对战。 MVC 模式 本小程序尝试使用MVC 模式编写。 MVC 模式代表 M

五子棋游戏中判断胜负的C++源代码

今天在看《精通Windows Sockets 网络开发——基于Visual C++》(孙海民 编著,人民邮电出版社出版)这本书的时候,有一个网络五子棋游戏的实例,个人觉得除了服务器和客户端通信、管理用户列表之外,在每一步中判断黑方和白方哪一方获胜是这个游戏程序的关键。所以将源代码贴在这里,供大家学习参考:         说明:这个程序不能直接运行,只是说明判断胜负的算法。

五子棋理解C++思想

双人五子棋项目目录: class Game {public:Game();void init();bool waitPlayerPutChess(Player* player, int& oldi, int& oldj);void draw();void play();bool isOver(int playerId);public:int whoWin = -1; // 谁赢了(0:白棋

BAT 实现五子棋人机对战

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 引言 嘿,同学们!今天我们来认识一下“BAT”。在我们讨论的这个五子棋人机对战程序里,“BAT”可不是大家熟悉的某个大公司哦,而是指一种特殊的文件类型——批处理文件(Batch File)。 批处理文件呢,就像是一个魔法盒子

【C语言小项目】五子棋游戏

目录 前言 一、游戏规则 1.功能分析 2.玩法分析 3.胜负判定条件 二、游戏实现思路 三、代码实现与函数封装 1.项目文件创建 2.头文件说明 3.函数封装  1)菜单实现  2)进度条实现  3)main函数实现  4)Game函数  5)ShowBoard函数实现 6)PlayerMove函数实现 7)ChessCount函数实现  8)IsOver函数

《浔川 AI 五子棋 v5.0 将延迟上线》——浔川官方

《浔川 AI 五子棋 v5.0 将延迟上线》 亲爱的各位玩家: 大家好! 我们怀着满心的期待与激动,原计划在近期为大家带来全新升级的浔川 AI 五子棋 v5.0 版本。然而,非常抱歉地通知大家,由于在开发过程中遇到了一些不可预见的技术难题和优化需求,浔川 AI 五子棋 v5.0 将延迟上线。 我们深知大家对于新版本的热切期盼,每一次的版本更新都是我们对游戏品质的不懈追求和对玩家体验的高度重

基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)_kaic

摘  要 网络五子棋游戏如今面临着一些新的挑战和机遇。一方面,网络游戏需要考虑到网络延迟和带宽等因素,保证游戏的实时性和稳定性。另一方面,网络游戏需要考虑到游戏的可玩性和趣味性,以吸引更多的玩家参与。本文基于HTML5和Canvas技术,结合Jquery库和JavaScript代码实现了一个五子棋游戏。通过Canvas的绘图功能,实现了棋盘和棋子的绘制,并使用JavaScript代码实现了游戏的逻

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

炫酷五子棋

【题目描述】 五子棋是一个简单的双人游戏。 小希最近在思索一种更好玩的五子棋。她希望胜利不再是谁先五子连珠谁赢,而变成谁落子后,该子与之前的子五子连珠的次数更多才能胜利。 但是如果是在普通的棋盘上,这个游戏又显得不是很有趣,所以她将棋盘扩大至N*N,因为棋盘过大,没有一个程序能将其展示出来,所以如何落子只能凭借记忆。 她希望你能写一个程序,判断每步落子与之前的同色棋子是否能形成五子连珠。 五子连