- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,分配基本上是将 K 放入骑士的输入值,然后将 X 放入棋盘的其余部分。然后,对于 Knight 可以执行的每个 Action ,我们输入数字,然后增加数字,例如如下所示:
X X X X X X X X
X X X X X X X X
X X X 1 X 2 X X
X X 4 X X X 3 X
X X X X K X X X
X X 5 X X X 6 X
X X X 7 X 8 X X
X X X X X X X X
我的代码在下面,但是当我运行它时,我得到的输出如下:4210828421082842108284210828421082842108284210828421082842108284210828421082842108284210828421082842108284210828421082842108284210828142108282421082842108284210828421082834210828421082842108284421082842108284210828421082842108284210825421082842108284210828421082842108285421082842108284210828642108284210828421082842108287421082884210828421082842108284210828421082842108284210828421082842108284210828
你能帮我修复我的代码吗?因为我是新手,所以我的 if else 条件非常蹩脚,所以如果你也能帮助我在砖 block 中添加更简单的条件,我真的可以了解它。
#include <stdio.h>
#include <stdlib.h>
void boardDefine();
void boardDraw();
int main()
{
char board[8][8];
int i,j,row,column;
int nextMove;
printf("Please enter the position of the Knight on the board\n");
scanf("%d%d",&row,&column);
if(row<1||row>9||column<1||column>9)
{
printf("You must enter a value greater than zero");
}
boardDefine(board[8][8],i,j,row,column,nextMove);
boardDraw(board[8][8],i,j);
return 0;
}
void boardDefine(char board[8][8],int i, int j,int row,int column,int nextMove)
{
nextMove=1;
for( j=1;j<=8;j++)
{
for(i=1;i<=8;i++)
{
if(i==row&&j==column)
{
board[i][j]="K ";//Places the Knight to the position that entered by user
}
/*From here we are basicly showing where the Knight can move from its current position
for this we first check that if both row and column values are inside the board or not
after the L move if not then we put the nextMove value at that adress of the array
*/
else if(row-1<=8&&row-1>=0&&column+2<=8&&column+2>=0&&i==row-1&&j==column+2)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row-1<=8&&row-1>=0&&column-2<=8&&column-2>=0&&i==row-1&&j==column-2)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row+1<=8&&row+1>=0&&column+2<=8&&column+2>=0&&i==row+1&&j==column+2)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row+1<=8&&row+1>=0&&column-2<=8&&column-2>=0&&i==row+1&&j==column-2)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row-2<=8&&row-2>=0&&column+1<=8&&column+1>=0&&i==row-2&&j==column+1)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row-2<=8&&row-2>=0&&column-1<=8&&column-1>=0&&i==row-2&&j==column-1)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row+2<=8&&row+2>=0&&column-1<=8&&column-1>=0&&i==row+2&&j==column-1)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else if(row+2<=8&&row+2>=0&&column+1<=8&&column+1>=0&&i==row+2&&j==column+1)
{
board[i][j]='0'+ nextMove;
nextMove++;
}
else
{
board[i][j]="X ";//Places X to the places where Knight cant move.
}
}
printf("\n");
}
}
//Then we use this function to print
void boardDraw(char board[8][8],int i, int j)
{
for( j=1;j<=8;j++)
{
for(i=1;i<=8;i++)
{
printf("%c",board[i][j]);
}
printf("\n");
}
}
最佳答案
因此,您的代码存在几个问题,我将尽力解决尽可能多的问题,以使您的代码运行 -
首先,由于您想要存储单个可打印字符,因此应该将数组类型更改为 char
而不是 int
。然后,您将向数组位置分配单个字符。因此,当分配 K 时,它将是 board[i][j] = 'k';
并且 x 将是 board[i][j]='x';
由于您现在已将类型更改为 char,因此您必须将 printf 调用更改为
printf("%c ", board[i][j]);
最后,为了分配个位数,您不能简单地分配nextMove
。您必须分配'0' + nextMove
。这样您将获得数组中数字的 ASCII 等效值。
您犯的另一个错误是您已将 board[8][8]
传递给该函数。board[8][8]
仅表示数组中的单个元素。如果您想传递整个数组,则只需传递 board
。
最后,当数组声明为 board[8][8] 时,您运行了从 1 到 8 的循环。任何声明为 arr[x] 的数组都是从 0 到 (x-1) 而不是 1 到 x。所以你的循环应该改为
for (i = 0; i < 8; i++)
j 也类似。其余的都可以优化,但目前应该可以正常工作。
关于c - 用C语言编程国际象棋中马的走法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439084/
我正在尝试开发一个简单的国际象棋引擎,但我一直在为它的性能而苦苦挣扎。我已经实现了带有alpha-beta修剪和迭代加深的Negamax(没有任何其他启发式方法),但是我无法获得超过3-4层的合理搜索
我目前正在开发国际象棋引擎,目前该引擎一直在工作,但要花很多时间才能产生移动。由于必须生成许多移动,因此检查检测花费的时间最长。 我尝试了很多事情后陷入困境,无法真正弄清楚如何提高效率。这是我的方法:
我正在尝试用 Java 为我的游戏板(国际象棋)建立初始状态。但是,当我运行该程序时,板似乎被翻转了?如果您查看初始状态方法,这就是我希望初始板启动的方式: public void initialBo
我正在尝试实现Knight-Distance中描述的绝对排名文件距离。来自Chess Programming Wiki ,但我对 ints a 和 b 应该在什么地方有点困惑 int knightDi
我一直在研究表格,以便可以使用 html 中的表格创建棋盘。这是我在网上找到的一些代码:HTML 代码: ♜ ♞ ♝ &
我有如下算法来防止玩家选择将其置于检查状态的移动: 假走(通过复制棋盘并在复制的棋盘上工作) 在走法被伪造之后,得到所有合法的对手走法。 如果合法走法之一可以攻击玩家的国王,则不能选择最初伪造的走法。
如果没有图片,这可能有点难以解释,但是,我正在检查国王是否在检查中。为此,我从国王的位置开始向上、向左、向下、向右,然后是所有对角线图案。 为了简化我的代码,我有一个路径检查器方法,它接受起始位置和结
我已经为我的国际象棋引擎实现了带有静态搜索的 alpha-beta 搜索。然而,在大多数情况下,静态搜索占用了总执行时间的 80-90%,正如我的分析器所显示的那样。我的修剪有问题吗? 我已经包含了
我正在编写一个简单的国际象棋游戏。我不会在这里全部发布,但我会为您提供必要的详细信息。 我通过点击一个上面有棋子的方 block 来移动,然后这个方 block 被选中,然后点击我想要棋子的地方移动。
嗨! 我正在尝试为我的国际象棋引擎编写一个 negamax 搜索算法,但我似乎无法让它工作。我以 wikipedias 伪代码为例,但不知何故它没有产生预期的结果。当我用 2 层运行它时,它改变了我的
我正在对国际象棋 AI 进行试验,目前正在尝试检测平局的可能性。 如果出现以下情况,玩家可以要求平局: 在每个玩家的最后 50 步棋中没有吃到或走棋。 相同的棋盘位置出现了 3 次。 因此,程序必须存
我正在用 Java 开发国际象棋程序并考虑以下问题: Rook 部分需要实现直线移动。 Bishop 部分需要实现沿对角线移动。 但是, Queen piece 需要实现上述两种运动模式。 我想不出一
我有一个问题。 我们有无限的棋盘,如何计算 n 次跳跃后你可能发现自己跳跃的一半的数量? 例如: 一次跳跃后我们有8个盒子 两次跳跃后我们有33个盒子 #include using namespace
这个问题已经有答案了: How do I generate all of a knight's moves? (10 个回答) 已关闭 9 年前。 我正在尝试根据当前位置获取骑士可以放置的所有可能位置
好吧,我先承认这个会有点长。我正在为 C# 编写国际象棋引擎,最终目标包括 UCI 实现。我已经做到了,给定一个棋盘,引擎将生成所有有效 Action 的列表;然而,我的评估代码似乎很挣扎,因为在与自
我正在实现一个国际象棋引擎,我已经编写了一个相当复杂的 alpha-beta 搜索例程,其中包含静态搜索和换位表。但是,我观察到一个奇怪的错误。 评估函数使用的是方 block 表,就像这个用于棋子的
我正在编写一个基本的 Java 国际象棋游戏并编写了以下类:Game、Player、Board、Square、Piece(每个特定棋子的父类(super class))和每个特定棋子类(例如 Pawn
我正在为类似于国际象棋的游戏编写 AI。棋盘为 10x10,每面 15 block 都有象棋相似的走法。 游戏中的一切都组织在对象中。瓷砖[][] 瓷砖; 10x10,每个 Tile 都有一个 pie
我正在制作游戏国际象棋,几乎得到了所有东西,但只有一件事:我需要制作它,这样玩家就不可能将棋子移动到检查中。我在解决这个问题时遇到了麻烦。 我现在用伪代码生成有效移动的是:getMoveLocatio
我正在尝试使用 alpha beta 剪枝实现一个国际象棋游戏。以下几乎可以正常工作,但它会返回错误的 Action 。 例如,可能会发生以下情况。 白色(用户)移动,白色王位 - a1/黑色(计算机
我是一名优秀的程序员,十分优秀!