【发布时间】:2017-02-03 22:17:40
【问题描述】:
有人可以帮我换吗?我认为有一个逻辑错误。我知道源代码和目标代码是正确的,所以我的 if 语句有些问题。游戏规则:游戏一开始是一个金字塔结构,除了一个圆圈“o”外,所有的都是“+”,你只能将一个钉子移动到相邻的一个圆圈(两个点上/对角线),任何跳过的棋子都会也可以用圆圈代替。例如,您可以沿对角线移动两个点,中间跳过的部分将与原始位置一样被圈出,但您要移动到的部分将其圆圈替换为“+”。视觉图像在下面。此外,变量对应于字母。例如:pa 用于点 A,pb 用于点 B,依此类推。
第一步是从 D 到 A。第二步是从 K 到 D。我得到的输出不正确。点 K、G 和 B 应该是空的,因为 B 在第一步中被跳过,而 G 在本回合中被跳过。但是在这里我得到 A 是空的,即使它只有一个“+”。现在A已经从游戏中的第一步更新了,但现在又回到了一个圆圈。 A 或“pa”应该从以下语句更新:*pa = *pd;
这里是代码链接:https://www.dropbox.com/s/puab7va8vosftdd/Source.c?dl=0
void moveHandler( char source, char destination, char *pa, char *pb, char *pc, char *pd, char *pe, char *pf,
char *pg, char *ph, char *pi, char *pj, char *pk, char *pl, char *pm, char *pn, char *po ) {
char temp;
char middle;
if ( (source || destination == 'D') && (destination || source == 'A') ) {
temp = *pa;
*pa = *pd;
*pd = temp;
}
else if ( (source || destination == 'K') && (destination || source == 'D') ) {
temp = *pk;
*pk = *pd;
*pd = temp;
}
middle = (char) ((source + destination) / 2);
switch( middle ) {
case 66:
*pb = 'o';
break;
case 71:
*pg = 'o';
break;
default:
break;
}
}
【问题讨论】:
-
是否应该将
(source || destination == 'D')更改为`((source == 'D') || (destination == 'D'))? (在您应用此逻辑测试的所有地方) -
哦,废话。让我试试。谢谢
-
-
这行得通,谢谢。
-
具有如此大参数列表的函数大多数时候显示出糟糕的界面设计。使用不言自明的名称并考虑使用
structs 或以其他方式减少界面。