chess 相关问题

这个标签用于国际象棋游戏和让计算机玩它的问题。

MouseMoved 事件后将 sf::Sprite 移动到新位置的问题

我正在使用 C++ 中的 SFML 开发国际象棋游戏,并且遇到了拖放精灵的问题。我实现了一个功能,允许玩家通过点击和拖动来移动棋子......

回答 1 投票 0

我目前在国际象棋游戏中面临着悬停的pb

首先我创建了over效果并确保它有效,但是当我添加Input.getmousebutton时,它会干扰悬停,并且以前无论我将鼠标移到蟒蛇上,它都不会再显示...

回答 1 投票 0

有人能找出 CHESS 的 sfml 代码有什么问题吗

抱歉写了糟糕的代码,我是 cpp 新手 所以问题是无论我做什么,精灵位置都不会改变。我无法弄清楚。 #包括\ #包括\ 抱歉写了糟糕的代码,我是 cpp 新手 所以问题是无论我做什么,精灵位置都没有改变。我无法弄清楚。 #include \<SFML/Graphics.hpp\> #include \<vector\> #include \<string\> #include\<iostream\> #include \<unistd.h\> int main() { // Create a window sf::RenderWindow window(sf::VideoMode(800, 800), "Chess by devtony"); sf::RectangleShape board\[8\]\[8\]; sf::Color blck(128,128,128); sf::Color wth(255,204,204); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { board[i][j].setPosition(i*100,j*100); board[i][j].setSize(sf::Vector2f(100, 100)); board[i][j].setFillColor((i + j) % 2 == 0 ? wth : blck); } } sf::Texture pieces\[4\]\[8\]; for (int i = 0; i \< 8; i++) { if (!pieces\[1\]\[i\].loadFromFile("assets/w_pawn.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } } //rooks for (int i = 0; i \< 8; i++) { if (!pieces\[2\]\[i\].loadFromFile("assets/b_pawn.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } } if (!pieces\[0\]\[0\].loadFromFile("assets/w_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[7\].loadFromFile("assets/w_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[0\].loadFromFile("assets/b_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[7\].loadFromFile("assets/b_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //bishop if (!pieces\[0\]\[2\].loadFromFile("assets/w_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[5\].loadFromFile("assets/w_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[2\].loadFromFile("assets/b_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[5\].loadFromFile("assets/b_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //horse if (!pieces\[0\]\[1\].loadFromFile("assets/w_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[6\].loadFromFile("assets/w_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[1\].loadFromFile("assets/b_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[6\].loadFromFile("assets/b_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //queen if (!pieces\[0\]\[4\].loadFromFile("assets/w_queen.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[3\].loadFromFile("assets/w_king.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[3\].loadFromFile("assets/b_queen.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[4\].loadFromFile("assets/b_king.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //king // Create a sprite sf::Sprite sprites\[4\]\[8\]; for (int i = 0; i \< 4; i++) { for (int j = 0; j \< 8; j++) { sprites\[i\]\[j\].setTexture(pieces\[i\]\[j\]); sprites\[i\]\[j\].setScale(0.5,0.5); sprites\[i\]\[j\].setOrigin(50,50); } } // Flag to check if a piece is selected bool isPieceSelected = false; sf::Sprite\* selectedPiece = nullptr; sf::Vector2f clickOffset; // Main loop while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { window.close(); } if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { if (sprites[i][j].getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition(window)))) { isPieceSelected = true; selectedPiece = &sprites[i][j]; clickOffset = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - selectedPiece->getPosition(); break; } } if (isPieceSelected) break; } } else if (event.type == sf::Event::MouseMoved && isPieceSelected) { sf::Vector2f newPosition = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - clickOffset; std::cout \<\< "New Position: " \<\< newPosition.x \<\< ", " \<\< newPosition.y \<\< std::endl; selectedPiece-\>setPosition(newPosition.x,newPosition.y); } else if (event.type == sf::Event::MouseButtonReleased && event.mouseButton.button == sf::Mouse::Left) { isPieceSelected = false; } } // Clear window window.clear(); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { window.draw(board[i][j]); } } for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { if (j<2) { sprites[j][i].setPosition(sf::Vector2f(100*(i+1)-50,100*(j+1)-50)); }else{ sprites[j][i].setPosition(sf::Vector2f(100*(i+1)-50,100*(j+5)-50)); } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { window.draw(sprites[i][j]); } } // Draw the sprite // Display window contents window.display(); } return 0; } 我正在使用 C++ 中的 SFML 开发国际象棋游戏,并且遇到了拖放精灵的问题。我实现了一项功能,允许玩家通过在棋盘上单击并拖动棋子来移动棋子。然而,精灵并没有像预期那样随着鼠标拖动而移动。 单击时会正确检测到精灵,并且 isPieceSelected 标志设置为 true。计算 clickOffset 是为了保持相对于鼠标光标的正确位置。但是,当我尝试拖动精灵时,它不跟随鼠标。窗口已聚焦,并且没有设置可能影响响应能力的帧速率限制。 我尝试过使用 setPosition 和 move 方法来更新精灵的位置,但都没有解决问题。尽管没有错误,但精灵根本没有移动,并且程序编译成功。 您的问题是您在窗口循环的每次迭代中将棋子的位置设置在其起始位置。这发生在循环中: for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { if (j < 2) { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 1) - 50)); } else { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 5) - 50)); } } } 这可以通过引入一个初始化函数来轻松解决,该函数接受精灵矩阵并仅设置其原始位置一次。 创建一个这样的函数: void setPiecesInStartingPosition(sf::Sprite(&sprites)[4][8]) 并将初始化代码移至函数中,即: for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { if (j < 2) { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 1) - 50)); } else { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 5) - 50)); } } } 最后,确保只在开始 while 循环之前的某个地方调用它一次。也许在创建精灵矩阵之后立即是一个好主意。 另外,我建议删除break语句并将布尔检查移到for循环上方 for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { if (sprites[i][j].getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition(window)))) { isPieceSelected = true; selectedPiece = &sprites[i][j]; clickOffset = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - selectedPiece->getPosition(); break; } } if (isPieceSelected) break; 所以像这样: if (!isPieceSelected) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { if (sprites[i][j].getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition(window)))) { isPieceSelected = true; selectedPiece = &sprites[i][j]; clickOffset = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - selectedPiece->getPosition(); break; } } } }

回答 1 投票 0

使用通用国际象棋界面

我正计划制作一个与 UCI 国际象棋引擎交互的程序。我一直在对此进行一些研究,但在更深入地了解它之前,我想获得更多信息。我是

回答 4 投票 0

放置在矩阵上的两个非攻击车的最大平方和是多少?

有一个 m x n 矩阵,每个矩阵都有整数元素。问题是我们必须在该矩阵上放置两个车,这样它们就不会互相攻击,并且其上的元素之和......

回答 4 投票 0

如何从R中的字符串中提取特定字符?

我正在尝试从 PGN 国际象棋符号中删除时钟时间。例如,如果我有字符串: “1.e4 {[%clk 0:00:59.5]} 1...b6 {[%clk 0:00:57.4]} 2.NC3 {[%clk 0:00:59.4]} 2...Bb7 {[%clk 0:00...

回答 2 投票 0

编写国际象棋人工智能程序

我正在尝试编写一个国际象棋人工智能。有没有什么东西可以让我在 .NET 框架(或者甚至是用 Lua 编写的国际象棋程序)上使用,让我无需担心就可以编写和测试国际象棋人工智能

回答 5 投票 0

如何使用我的函数替换此数组中的元素?

我正在使用Python3构建一个国际象棋程序,需要弄清楚如何使用我的函数将另一个棋子插入到我的棋盘上。板上的位置是使用代数符号指定的...

回答 1 投票 0

使用字符串键进行哈希处理比使用数字键进行哈希处理慢吗? (C#)

我一直在研究我的小型国际象棋引擎,并且我有用于三重检测的哈希表。 我想实现 Zobrist 哈希,但我只是为占位符创建了一个字符串哈希键。 但看起来确实...

回答 1 投票 0

有没有办法使用 chess.js 启用促销?

var move = game.move({ 来自:来源, 达到目标, 促销:'q' }) 其中一期建议,为了决定晋升,只需将上述代码更改为 变量...

回答 2 投票 0

如何在Python控制台中打印文本间距?

我正在制作一个国际象棋游戏,我希望它能够在打印控制台中完全渲染。是的,我知道做一些 PyGame 或 TKinter 更有意义,但这不是我的目标。 我发现了一些国际象棋表情符号...

回答 1 投票 0

“断言错误:push() 期望移动合法”,显示的棋盘不是传入的棋盘

我正在尝试编写一个简单的国际象棋引擎,寻找能产生最大物质优势的走法。然而,我遇到了一个奇怪的错误,显示一个板不是我通过的板......

回答 3 投票 0

Chess.js 如何访问.moves({ verbose: true})中的各个字段

我是一名经验丰富的 Delphi 程序员,但对 JavaScript/TypeScript 完全陌生,我不明白 chess.js 函数 .moves({ verbose: true}) 返回的结构和

回答 1 投票 0

在棋盘对象中使用深度复制来验证使用 python 的国际象棋游戏实现中的合法动作时出错

我一直在研究我的国际象棋游戏项目,并解决实现检查和将死逻辑的挑战。尽管阻碍了路径,但当棋子继续移动时,出现了一个问题......

回答 1 投票 0

如何将国际象棋 FEN 变成 PGN?

我有一系列 FEN 字符串和 LAN(长代数表示法)中的伴随动作,如下所示。一个示例数据框粘贴在我的问题末尾。 分 动作 游戏网址 r3k2r/

回答 1 投票 0

如何正确检查国际象棋AI中的王位易位?

我有一个国际象棋人工智能,它并不总是知道它是否可以城堡。车和王都有移动计数器,只有当移动计数器的值等于...

回答 2 投票 0

Quiscence 搜索性能

这是一个双重问题。我组装了一个简单的国际象棋引擎,它执行 Alpha-Beta 搜索,最后执行静止搜索。静止搜索正在影响性能。

回答 1 投票 0

国际象棋游戏优化:尽管攻击图块更新,但性能低下

我正在开发一款国际象棋游戏,最近对我的代码进行了更改,以通过更有效地更新攻击图块和引脚来优化移动生成。最初,我用来计算攻击方块......

回答 1 投票 0

Python 国际象棋:检查已通过的棋子

在国际象棋棋局中,我想检查是否存在白棋的过兵。 是否可以使用 python-chess 库来做到这一点?如果没有,我该如何实施? def checkForPassedPawn(位置:

回答 1 投票 0

如何在 Python 控制台棋盘中找到中间的方块

我做了8×8的棋盘,每块棋子都是3*3(由9个方格组成)。每个图块中的平均方块被标记为次要方块,中间的方块应该被标记为主要方块 打印(“&qu...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.