静安广州网站建设做网站的教科书

张小明 2026/1/10 11:44:56
静安广州网站建设,做网站的教科书,环球新军事最新消息,搜索引擎优化关键词创建 Blazor web工程,选Autoimage2. 打开 GitHub Copilot 窗口,输入提示词使用 Blazor 编一个五子棋游戏image3.复制代码测试为了方便调试, 我们先把运行模式由 InteractiveAuto 改为 InteractiveServer打开 App.razor 编辑 两行 rendermodeInteractiveAuto 改为 r…创建 Blazor web工程,选Autoimage2. 打开 GitHub Copilot 窗口,输入提示词使用 Blazor 编一个五子棋游戏image3.复制代码测试为了方便调试, 我们先把运行模式由 InteractiveAuto 改为 InteractiveServer打开 App.razor 编辑 两行 rendermodeInteractiveAuto 改为 rendermodeInteractiveServerimage4.不出意外, 代码出现了意外image无脑使用AI修复一下image结果发现不是这个问题. 是逻辑代码 onclick() PlacePiece(x, y) 问题. 原因是PlacePiece闭包捕获的 x、y 是当前循环的值既然人工发现了问题, 我们继续提醒一下AI, 尝试修复image最后还是没修复成功, 手动处理一下page /PageTitle五子棋/PageTitleh1五子棋游戏/h1div stylemargin-bottom:10px;当前玩家: b(currentPlayer 1 ? 黑子 : 白子)/bif (winner ! 0){span stylecolor:red;margin-left:20px;胜者: (winner 1 ? 黑子 : 白子)/spanbutton classbtn btn-primary stylemargin-left:20px; onclickRestart重新开始/button}/divtable styleborder-collapse:collapse;for (int y 0; y BoardSize; y){trfor (int x 0; x BoardSize; x){int _x x;int _y y;td stylewidth:32px;height:32px;border:1px solid #888;text-align:center;vertical-align:middle;cursor:pointer;background:GetCellBg(x, y);onclick(() PlacePiece(_x, _y))if (board[x, y] 1){span stylefont-size:24px;color:black;●/span}else if (board[x, y] 2){span stylefont-size:24px;color:#eee;text-shadow:0 0 2px #888;●/span}/td}/tr}/tablecode {const int BoardSize 15;int[,] board new int[BoardSize, BoardSize];int currentPlayer 1; // 1: 黑子, 2: 白子int winner 0;void PlacePiece(int x, int y){// 修复增加边界检查防止越界if (x 0 || x BoardSize || y 0 || y BoardSize)return;if (winner ! 0 || board[x, y] ! 0)return;board[x, y] currentPlayer;if (CheckWin(x, y, currentPlayer)){winner currentPlayer;}else{currentPlayer 3 - currentPlayer; // 切换玩家}}bool CheckWin(int x, int y, int player){int[][] directions new int[][]{new int[]{1,0}, // 横new int[]{0,1}, // 竖new int[]{1,1}, // 斜new int[]{1,-1} // 反斜};foreach (var dir in directions){int count 1;count CountDirection(x, y, dir[0], dir[1], player);count CountDirection(x, y, -dir[0], -dir[1], player);if (count 5)return true;}return false;}int CountDirection(int x, int y, int dx, int dy, int player){int count 0;for (int step 1; step 5; step){int nx x dx * step;int ny y dy * step;if (nx 0 || nx BoardSize || ny 0 || ny BoardSize)break;if (board[nx, ny] player)count;elsebreak;}return count;}void Restart(){board new int[BoardSize, BoardSize];currentPlayer 1;winner 0;}string GetCellBg(int x, int y){return (x y) % 2 0 ? #f9d77e : #eac066;}}说明添加 int _x x; int _y y; 确保闭包捕获的 _x、_y 是当前循环的值避免 Blazor 渲染时闭包变量引用错误。在 PlacePiece 方法开头增加边界检查防止非法坐标导致数组越界异常。这样可以彻底修复 PlacePiece 拿到的变量不正确和越界的问题。5. 运行效果image6. 加入显示当前玩家的得分功能你可以为每个玩家增加一个分数变量每次有玩家获胜时将其分数加一并在界面上显示。下面是具体实现方法在 code 区域添加分数字段int blackScore 0;int whiteScore 0;在玩家获胜时更新分数void PlacePiece(int x, int y){if (x 0 || x BoardSize || y 0 || y BoardSize)return;if (winner ! 0 || board[x, y] ! 0)return;board[x, y] currentPlayer;if (CheckWin(x, y, currentPlayer)){winner currentPlayer;if (winner 1)blackScore;else if (winner 2)whiteScore;}else{currentPlayer 3 - currentPlayer; // 切换玩家}}在页面上显示分数比如在标题下方div stylemargin-bottom:10px;当前玩家: b(currentPlayer 1 ? 黑子 : 白子)/bspan stylemargin-left:20px;黑子得分: bblackScore/b/spanspan stylemargin-left:20px;白子得分: bwhiteScore/b/spanif (winner ! 0){span stylecolor:red;margin-left:20px;胜者: (winner 1 ? 黑子 : 白子)/spanbutton classbtn btn-primary stylemargin-left:20px; onclickRestart重新开始/button}/div这样每次有玩家获胜时分数都会自动更新并显示在页面上。image7. 加入重置得分功能你可以在 Restart 方法中增加对分数的重置或者单独添加一个“重置得分”按钮和方法。推荐做法如下添加重置得分方法void ResetScore(){blackScore 0;whiteScore 0;}在页面上添加按钮button classbtn btn-danger stylemargin-left:20px; onclickResetScore重置得分/button建议将此按钮放在分数显示附近例如div stylemargin-bottom:10px;当前玩家: b(currentPlayer 1 ? 黑子 : 白子)/bspan stylemargin-left:20px;黑子得分: bblackScore/b/spanspan stylemargin-left:20px;白子得分: bwhiteScore/b/spanbutton classbtn btn-danger stylemargin-left:20px; onclickResetScore重置得分/buttonif (winner ! 0){span stylecolor:red;margin-left:20px;胜者: (winner 1 ? 黑子 : 白子)/spanbutton classbtn btn-primary stylemargin-left:20px; onclickRestart重新开始/button}/div这样点击“重置得分”按钮即可将分数清零。8. 在这个五子棋游戏中添加 AI 对手功能在你的 Blazor 五子棋游戏中添加 AI 对手功能常见做法是让一方如白子由 AI 自动落子。实现思路如下判断当前玩家是否为 AI如 currentPlayer 2 时自动调用 AI 落子逻辑。实现 AI 落子算法可以先用简单的随机落子后续可扩展为更智能的算法。在玩家落子后自动触发 AI 落子用 StateHasChanged() 刷新界面必要时用 await Task.Delay() 增加落子延迟。下面是具体实现方法以白子为 AIpage /PageTitle五子棋/PageTitleh1五子棋游戏/h1div stylemargin-bottom:10px;当前玩家: b(currentPlayer 1 ? 黑子 : 白子(电脑))/bspan stylemargin-left:20px;黑子得分: bblackScore/b/spanspan stylemargin-left:20px;白子得分: bwhiteScore/b/spanbutton classbtn btn-danger stylemargin-left:20px; onclickResetScore重置得分/buttonif (winner ! 0){span stylecolor:red;margin-left:20px;胜者: (winner 1 ? 黑子 : 白子(电脑))/spanbutton classbtn btn-primary stylemargin-left:20px; onclickRestart重新开始/button}/divtable styleborder-collapse:collapse;for (int y 0; y BoardSize; y){trfor (int x 0; x BoardSize; x){int _x x;int _y y;td stylewidth:32px;height:32px;border:1px solid #888;text-align:center;vertical-align:middle;cursor:pointer;background:GetCellBg(x, y);onclick(() PlacePiece(_x, _y))if (board[x, y] 1){span stylefont-size:24px;color:black;●/span}else if (board[x, y] 2){span stylefont-size:24px;color:#eee;text-shadow:0 0 2px #888;●/span}/td}/tr}/tablecode {const int BoardSize 15;int[,] board new int[BoardSize, BoardSize];int currentPlayer 1; // 1: 黑子, 2: 白子(电脑)int winner 0;int blackScore 0;int whiteScore 0;Random rand new();void PlacePiece(int x, int y){if (winner ! 0 || board[x, y] ! 0 || currentPlayer 2)return;board[x, y] currentPlayer;if (CheckWin(x, y, currentPlayer)){winner currentPlayer;if (winner 1)blackScore;else if (winner 2)whiteScore;}else{currentPlayer 2;StateHasChanged();_ AITurnAsync();}}async Task AITurnAsync(){await Task.Delay(500); // AI 落子延迟if (winner ! 0) return;// 简单随机落子var empty new List(int x, int y)();for (int i 0; i BoardSize; i)for (int j 0; j BoardSize; j)if (board[i, j] 0)empty.Add((i, j));if (empty.Count 0) return;var (aiX, aiY) empty[rand.Next(empty.Count)];board[aiX, aiY] 2;if (CheckWin(aiX, aiY, 2)){winner 2;whiteScore;}else{currentPlayer 1;}StateHasChanged();}// 其余代码不变...bool CheckWin(int x, int y, int player){int[][] directions new int[][]{new int[]{1,0}, new int[]{0,1}, new int[]{1,1}, new int[]{1,-1}};foreach (var dir in directions){int count 1;count CountDirection(x, y, dir[0], dir[1], player);count CountDirection(x, y, -dir[0], -dir[1], player);if (count 5)return true;}return false;}int CountDirection(int x, int y, int dx, int dy, int player){int count 0;for (int step 1; step 5; step){int nx x dx * step;int ny y dy * step;if (nx 0 || nx BoardSize || ny 0 || ny BoardSize)break;if (board[nx, ny] player)count;elsebreak;}return count;}void Restart(){board new int[BoardSize, BoardSize];currentPlayer 1;winner 0;}void ResetScore(){blackScore 0;whiteScore 0;}string GetCellBg(int x, int y){return (x y) % 2 0 ? #f9d77e : #eac066;}}要点说明玩家黑子落子后自动触发 AI白子落子。AI 采用随机空位落子简单易懂后续可扩展为更智能算法。若要让 AI 先手只需将 currentPlayer 2 并在 OnInitialized 或 Restart 时调用 AITurnAsync()。image用是能用了, 就是这个AI太傻了,继续优化一下要优化五子棋 AI 的落子策略可以采用“优先级评分法”来提升难度。基本思路如下优先考虑能直接获胜的位置如 AI 连成五子。阻止玩家获胜如玩家有四连AI 必须堵住。优先进攻如自己有三连、二连。其次防守如玩家有三连、二连。否则随机或选择评分最高的位置。下面是一个简单的评分法实现AI 会优先选择能赢、能防守、能进攻的位置async Task AITurnAsync(){await Task.Delay(500);if (winner ! 0) return;var (aiX, aiY) FindBestMove();board[aiX, aiY] 2;if (CheckWin(aiX, aiY, 2)){winner 2;whiteScore;}else{currentPlayer 1;}StateHasChanged();}// 简单评分法优先赢棋、阻挡对方、进攻(int, int) FindBestMove(){int maxScore int.MinValue;var bestMoves new List(int x, int y)();for (int x 0; x BoardSize; x){for (int y 0; y BoardSize; y){if (board[x, y] ! 0) continue;int score EvaluatePoint(x, y, 2); // AI进攻score Math.Max(score, EvaluatePoint(x, y, 1)); // 防守if (score maxScore){maxScore score;bestMoves.Clear();bestMoves.Add((x, y));}else if (score maxScore){bestMoves.Add((x, y));}}}// 多个最佳点时随机选一个return bestMoves[rand.Next(bestMoves.Count)];}// 评分函数可根据实际需要调整权重int EvaluatePoint(int x, int y, int player){int score 0;int opponent player 1 ? 2 : 1;// 检查4连、3连、2连等foreach (var dir in new[] { (1, 0), (0, 1), (1, 1), (1, -1) }){int count 1 CountDirection(x, y, dir.Item1, dir.Item2, player) CountDirection(x, y, -dir.Item1, -dir.Item2, player);if (count 5) score 10000; // 直接获胜else if (count 4) score 1000;else if (count 3) score 100;else if (count 2) score 10;// 防守分数int oppCount 1 CountDirection(x, y, dir.Item1, dir.Item2, opponent) CountDirection(x, y, -dir.Item1, -dir.Item2, opponent);if (oppCount 5) score 9000; // 必须防守else if (oppCount 4) score 900;else if (oppCount 3) score 90;else if (oppCount 2) score 9;}return score;}集成方法替换你的 AITurnAsync 方法为上述实现。在 code 区域添加 FindBestMove 和 EvaluatePoint 方法。可根据实际效果调整评分权重。效果说明AI 会优先选择能赢的位置其次堵住玩家的四连再考虑进攻和防守三连、二连。这种评分法简单高效能显著提升 AI 难度。若需更高难度可进一步实现“活三”、“活四”识别、双向评分、甚至 Minimax 算法。image9. 添加难度切换按钮添加三个难度选择按钮以及切换人机按钮下面是实现“三个难度选择按钮简单、中等、困难”和“人机/人人切换按钮”的完整方法。难度通过调整 AI 的评分权重实现人机切换通过 isHumanVsAI 控制。请直接替换你的 Home.razor 文件内容page /PageTitle五子棋/PageTitleh1五子棋游戏/h1div stylemargin-bottom:10px;b难度/bbutton classbtn btn-sm (aiLevel0?btn-primary:btn-outline-primary) onclick() SetAILevel(0)简单/buttonbutton classbtn btn-sm (aiLevel1?btn-primary:btn-outline-primary) onclick() SetAILevel(1)中等/buttonbutton classbtn btn-sm (aiLevel2?btn-primary:btn-outline-primary) onclick() SetAILevel(2)困难/buttonspan stylemargin-left:20px;b模式/bbutton classbtn btn-sm (isHumanVsAI?btn-success:btn-outline-success) onclickToggleMode(isHumanVsAI ? 人机对战 : 人人对战)/button/span/divdiv stylemargin-bottom:10px;当前玩家: b(currentPlayer 1 ? 黑子 : (isHumanVsAI ? 白子(电脑) : 白子))/bspan stylemargin-left:20px;黑子得分: bblackScore/b/spanspan stylemargin-left:20px;白子得分: bwhiteScore/b/spanbutton classbtn btn-danger stylemargin-left:20px; onclickResetScore重置得分/buttonif (winner ! 0){span stylecolor:red;margin-left:20px;胜者: (winner 1 ? 黑子 : (isHumanVsAI ? 白子(电脑) : 白子))/spanbutton classbtn btn-primary stylemargin-left:20px; onclickRestart重新开始/button}/divtable styleborder-collapse:collapse;for (int y 0; y BoardSize; y){trfor (int x 0; x BoardSize; x){int _x x;int _y y;td stylewidth:32px;height:32px;border:1px solid #888;text-align:center;vertical-align:middle;cursor:pointer;background:GetCellBg(x, y);onclick(() PlacePiece(_x, _y))if (board[x, y] 1){span stylefont-size:24px;color:black;●/span}else if (board[x, y] 2){span stylefont-size:24px;color:#eee;text-shadow:0 0 2px #888;●/span}/td}/tr}/tablecode {const int BoardSize 15;int[,] board new int[BoardSize, BoardSize];int currentPlayer 1; // 1: 黑子, 2: 白子(电脑/玩家)int winner 0;int blackScore 0;int whiteScore 0;Random rand new();bool isHumanVsAI true;int aiLevel 1; // 0:简单 1:中等 2:困难void PlacePiece(int x, int y){if (winner ! 0 || board[x, y] ! 0)return;// 人机模式下只有当前为玩家时可落子if (isHumanVsAI currentPlayer 2)return;
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

衡阳市网站建设成都网站建设 公司

在AI视频生成技术飞速发展的今天,腾讯开源的HunyuanVideo提示词重写模型为普通用户打开了专业视频创作的大门。这个基于130亿参数大模型优化的提示词增强工具,能够将简单的文字描述转化为电影级的生成指令,让每个人都能轻松制作高质量视频内容…

张小明 2026/1/9 14:50:49 网站建设

桐梓网站建设广告艺术设计专业学什么

第一章:如何让AI自动写文档?Open-AutoGLM部署全流程深度解析 在自动化内容生成需求日益增长的今天,Open-AutoGLM 作为一款开源的智能文档生成框架,凭借其强大的自然语言理解与生成能力,成为企业级文档自动化的重要工具…

张小明 2026/1/9 14:50:50 网站建设

网站制作报价开数码网站建设的规模与类别

多媒体播放与视频制作指南 1. 播放 DVD 如果你有 DVD 驱动器,就可以使用媒体播放器观看 DVD 电影。以下是一些播放 DVD 的相关操作和技巧: - 访问 DVD 菜单和特殊功能 :右键单击电影画面,选择“DVD 功能”>“根菜单”。其他 DVD 命令可在“视图”和“播放”菜单中找…

张小明 2026/1/9 14:50:48 网站建设

多语言版本网站那个啥的网站推荐下

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

张小明 2026/1/9 14:50:50 网站建设

南昌专业的学校网站建设公司开发app费用

Nunu CLI工具:快速构建Go应用的终极指南 【免费下载链接】nunu A CLI tool for building Go applications. 项目地址: https://gitcode.com/GitHub_Trending/nu/nunu Nunu是一个专为Go开发者设计的CLI工具,它通过封装流行的Go库和提供标准化的项目…

张小明 2026/1/9 14:50:55 网站建设