我最初打算将此代码发布在Codereview SE上,但是由于我真的不知道以下代码是否可以视为完整代码,因此我认为这里更合适。如果您觉得最好将它发布在其他地方,请随时关闭它。
考虑到井字游戏规则3x3数组作为“ game
”输入的“有效”,此算法如何寻找获胜者?
我一般都是C和程序设计的菜鸟,我想知道这段代码的性能/复杂性有多好,因为它与我在SO的其他文章中发现的有所不同。 for循环会使这不必要地复杂吗?
if (game[1][3] == game[2][2] && game[2][2] == game[3][1]) /*antidiagonal check */
{
w = game[1][3]; /* w is player X or O */
}
t1 = 0;
for (i=0; i<=2; ++i)
{
if (game[i][i] == game[i+1][i+1]) /* main diagonal check */
{
t1 += 1;
}
if (t1 == 2)
{
w = game[i][i];
}
}
for (i=0; i<=2; ++i)
{
t2 = 0;
for (j=0; j<=1; ++j)
{
if (game[i][j] == game[i][j+1]) /* row check */
{
t2 += 1;
if (t2 == 2)
{
w = game[i][j];
}
}
}
}
for (i=0; i<=1; ++i)
{
t3=0;
for (j=0; j<=2; ++j)
{
if (game[i][j] == game[i+1][j]) /* column check */
{
t3 += 1;
if (t3 == 2)
{
w = game[i][j];
}
}
}
}
if (t1<2 && t2<2 && t3<3)
{
printf("No winner\n");
}
else
{
printf("%c wins\n", w);
}
答案 0 :(得分:0)
井字游戏板有9个图块。
每个图块要么包含var source = document.getElementById("mainTemp").innerHTML;
var template = Handlebars.compile(source);
var mainData = {
data: [
{id:"1",name:"area1", color:"black"},
{id:"2",name:"area2", color:"blue"},
{id:"3",name:"area3", color:"brown"}
]
};
document.getElementById("adiv").innerHTML = template(mainData);
$('button').click(function(){
$('#bdiv').show();
})
,要么没有。这意味着您可以使用9位无符号整数来表示每个图块是否具有X
;然后在(512个条目)查找表中使用该数字来确定X
是否赢了。
以同样的方式;每个磁贴要么带有X
,要么没有;因此您可以将其编码为不同的9位无符号整数,并在相同的(512项)查找表中使用它来确定O
获胜。
如果板子到处都表示为一对9位整数(避免转换板子的状态),则代码变为:
O
注意:查找表每个条目只需要一位;因此,通过使用位域(以及一些移位/屏蔽来选择正确的位),它可以小到64个字节。当然,您可以编写一个粗略/临时的实用程序为您生成表格,然后将表格“剪切并粘贴”到游戏代码中。