问题标签 [chess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
895 浏览

c# - 在国际象棋游戏c#中将图像插入代码中

两天前我问了一个关于国际象棋游戏的问题,一位朋友向我推荐了下面的代码,我对此有疑问。就是这个链接

请看:私图Displayimage;

我不知道我应该如何将国际象棋游戏中的图像放入其中,我应该将它放在哪里?类 PiecePosition {

0 投票
3 回答
2109 浏览

c# - 编译错误:字段初始值设定项无法引用非静态字段、方法或属性

当我编译下面的代码时,编译器给出错误:字段初始值设定项无法引用此代码中的非静态字段、方法或属性(有星号)

谁能帮我?

0 投票
3 回答
74214 浏览

chess - 国际象棋游戏的面向对象设计

我正在尝试了解如何以面向对象的方式进行设计和思考,并希望从社区中获得有关此主题的一些反馈。下面是一个我希望以OO方式设计的象棋游戏的例子。这是一个非常广泛的设计,我在这个阶段的重点只是确定谁负责哪些消息以及对象如何相互交互以模拟游戏。请指出是否存在不良设计元素(高耦合、不良内聚等)以及如何改进它们。

国际象棋游戏有以下类

  • 木板
  • 播放器
  • 正方形
  • 国际象棋游戏

Board 由正方形组成,因此可以让 Board 负责创建和管理 Square 对象。每一块也都在一个正方形上,所以每块也有一个指向它所在的正方形的参考。(这有意义吗?)。然后每一块负责将自己从一个方格移动到另一个方格。玩家类拥有对他拥有的所有棋子的引用,并且还负责它们的创建(玩家应该创建棋子吗?)。Player 有一个方法 takeTurn,该方法又调用一个方法 movePiece,该方法属于piece 类,该方法将一块的位置从其当前位置更改为另一个位置。现在我对 Board 类必须负责的具体内容感到困惑。我认为需要确定游戏的当前状态并知道游戏何时结束。但是当一块改变它' s location 板子应该如何更新?它是否应该维护一个单独的正方形数组,其中存在碎片并随着碎片的移动而更新?

此外,ChessGame 最初创建 Board 和 player 对象,它们依次分别创建正方形和棋子并开始模拟。简而言之,这可能是 ChessGame 中的代码的样子

我不清楚董事会的状态将如何更新。应该片有参考板?责任应该在哪里?谁持有什么参考资料?请帮助我输入您的意见并指出此设计中的问题。我故意不关注任何算法或游戏的更多细节,因为我只对设计方面感兴趣。我希望这个社区可以提供有价值的见解。

0 投票
2 回答
809 浏览

chess - 为局域网制作国际象棋游戏所需的帮助

我是一名自学成才的计算机编程爱好者。我已经学习了 C,相当多的 Java,目前正在学习 Python。在我的大学里,校园内有一个内部局域网,最近我萌生了制作一个国际象棋游戏的想法,让校园内的用户可以通过局域网玩这个游戏。

游戏将只是一个登录系统,用户可以使用他们的用户名和密码登录。登录时,他们会看到当前在线的人员列表。他们可以挑战任何玩家。被挑战的玩家将被通知挑战并且可以接受或拒绝它。一旦被接受,两名玩家将进行一对一的国际象棋游戏(有时间限制)。我也希望玩家能够互相聊天。我想这样做并不太难。:)

虽然之前做过小游戏,但从来没有一款可以在线玩的游戏。相反,我对制作这款游戏​​的网络概念没有太多了解。你们中的任何人都可以告诉我要制作这样的应用程序我必须学习什么吗?

我知道使用 Jquery 和 AJAX 的 Web 应用程序很容易制作,但我想制作一个桌面应用程序。提前致谢 :) 。

0 投票
1 回答
107 浏览

c# - 在另一个类中使用一个类的属性

我有一个简单的问题。如何在另一个类中使用一个类的属性?我在一个类中有一个图片框,我想在另一个类中使用图片框中的图片。我该怎么做?谢谢。

0 投票
1 回答
1589 浏览

c# - 图片框中的动态图片

嗨,朋友们,我正在制作一个简单的国际象棋游戏。我想知道如何在图片框之间移动?我制作了 64 个图片框(每个地方一个图片框),例如,我想将图片框 2 中的王牌移动到图片框中位于picturebox2之上。感谢您的帮助

例如像这样:

是否可以?

0 投票
1 回答
633 浏览

artificial-intelligence - 抽象策略博弈的评价函数

我正在用 C# & XNA 编写一个抽象的策略游戏。至于AI,我目前用的是Negascout,深度为5。以下是游戏介绍:

游戏由一个 6x7 六边形位置的棋盘、42 个六边形图块和每个玩家(最多 2 个玩家)的 6 个棋子(1 个国王和 5 个棋子)组成。

在游戏的第一阶段,玩家交替在棋盘的空白位置上随机放置一块瓷砖。每个图块最多可以有 6 个指向边缘的箭头。有些箭头可以是双指向的。箭头表示从该图块移动的方向。如果有有效位置,双箭头使棋子移动/跳跃 2 个位置。如果棋盘上仍有空位,则不允许玩家将棋子放置在对手的行中。

一旦这个阶段完成,下一位玩家轮流将他的国王放在离他最近的行的 6 个瓷砖中的任何一个上。接下来,棋子开始移动。棋子根据瓷砖上的箭头移动。通过捕获或阻止国王来赢得比赛。

好的,现在开始我的移动生成功能。

  1. 瓷砖放置阶段 a) 将瓷砖放置在最近的行上。旋转瓦片以找到最佳旋转。b) 一旦最近的一排已满,将一块瓷砖放置在四周被位置包围的空位置上(即没有棋盘边缘)。旋转图块以找到最佳旋转。c) 如果没有找到位置,则添加所有剩余的空位置,尝试找到最佳旋转。

  2. 国王放置阶段 a) 找到最好的瓷砖位置并将国王放置在那里。b) 将剩余的棋子放在行中剩余的空位置上。

  3. 运动阶段 a) 如果王被攻击,如果攻击的棋子没有被防御,则尝试攻击攻击棋子。b) 为所有被攻击的玩家棋子添加移动。c) 添加玩家可以攻击的所有对手棋子。d) 添加玩家可以移动到的所有位置。

现在到评估函数。

  1. 棋子放置阶段得分 = 当前玩家迄今为止放置的棋子数量 + 当前玩家最近行上的棋子 - 没有。到目前为止对手放置的瓷砖 - 最远行(离对手最近)的对手的瓷砖。

  2. 王牌放置阶段得分 = 当前玩家最近行的牌 - 最远行的对手牌(离对手最近)。

  3. 移动阶段得分 = 当前玩家的棋子值 - 对手的棋子值。

对于箭头指向的每个有效位置,图块的权重为 100。件的重量如下:

棋子值 = 棋子类型(国王 = 10000,兵 = 1000)+ 机动性 + 防御 - 攻击 - 企业 - 阻止

其中:流动性=没有。节点可以移动到的位置数(自由或被对手占领)* 1000 防御 = 否。可以实际移动到该位置的围绕该棋子的当前玩家棋子数 * 1000 被攻击 = 否。该棋子周围实际上可以移动到该位置的对手棋子数 * 1000 被阻止 = (king = -10000, pawn = -1000) 棋子无法移动,因为所有箭头都指向无效位置,并且棋子在此游戏中没有机会再次移动.

很长,但我的问题来了:

  1. 放置图块时,AI 有时会使用错误的旋转来放置图块(即,将图块放置在箭头指向无效位置的位置)。有时这发生在他的“家”行。

  2. 移动棋子时,AI 忽略了国王的安全。主要移动国王,并在大约 4-6 步中被捕获。

任何人,尤其是具有国际象棋人工智能经验的人,对如何改进我的人工智能,特别是我的移动生成和评估功能有想法和建议?

谢谢伊万

顺便说一句...如果有人有兴趣试用邮件,请告诉我,我会在我的网站上上传设置。

0 投票
4 回答
171 浏览

c# - 这段代码有什么问题?

我写了一些代码在国际象棋游戏中移动国王;你能告诉我这个国王不动的代码的问题在哪里吗?谢谢。

编辑2:

0 投票
3 回答
503 浏览

c# - 在国际象棋游戏中获得国王的位置

我正在写一个简单的国际象棋游戏,它有 3 个棋子,一边是国王和王后,一边是国王,国王和王后应该以较少的动作与单独的国王配对。在这个项目中,首先我们应该从用户,然后根据该做其他工作,我想知道我如何从用户那里得到国王应该住在哪个地方?我用 64 个图片框实现了表格。我将为职位写课程,非常感谢

编辑:

我从 Jon Skeet 先生那里写了这段代码回答:它有什么错误?因为当我点击时它没有做任何事情,谢谢

0 投票
6 回答
2747 浏览

c++ - 棋子层次结构设计:继承与类型字段

我有一个基类

和一个包含派生对象的数组

通过虚拟功能获得优势、简洁的设计。缺点是,如果我必须在棋盘中找到一块或比较一块,我必须恢复为动态转换(或 typeid)。它很丑陋,在发出数百万个请求时可能会导致性能下降。

另一方面,如果我制作一个单件类的数组,它有一个用于识别件的类型字段,我没有这个问题(它应该更快)但我必须制作超级丑陋的 switch 语句。我想由于零件的数量是有限的,而且我认为自己不会进行那么多开关,这最终可能是一个更好的选择,你觉得呢?

这是为了好玩(所以没有位板)。

阅读一些答案,我认为仅将类型字段用于运算符重载 ( ==, !=, ...) 可以充分利用这两个词。

boost::variant看起来也很有趣。