C#五子棋关于斜方向问题求助

ffhelly 2009-03-22 05:17:54
横竖方向比较简单
但是斜方向的话 考虑到点击后的越界回归的问题很费解。。。

希望有高人指点一下。。

例如点击处为3.4 判断3.4 斜方向向左右扩散4位的字是不是一个颜色。。
我卡在了 在判断时候 以X来说 就是 -1.0.1.2.3.4.5.6.7 这9个位置。。。但是 -1越界
请指教。。
下面是我的横竖的 不知道能不能做成与斜方向相关的。。

private bool RerctKing(int x,int y,int colors)
{
int p=35;
for (int i = x - p * 4; i <= x + p * 4; i = i + 35)
{
if (i < 20) break;
if (i+p > 516) break;
int index = 1;
int xx = 1;
for (int j = i; j < x+p*5; j = j + 35)
{

if (j < 20) break;
if (j+p >516) break;

if (pp[x, j] == colors && pp[x, j + p] == colors)
{
index++;

if (index == 5)
{
return true;
}

}
else
{
index = 1;
}
if (xx == 6)
{
break;

}
}
}
return false;
}
...全文
133 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
bing300 2009-04-16
  • 打赏
  • 举报
回复
二维数组存放ROW AND CULOMN
//右斜
for (int k = 0; k <= 10; k++)
{
for (int i = 4; i <= 20; i++)
{
if (state[i, k] == 1 && state[i- 1, k + 1] == 1 && state[i - 2, k + 2] == 1 && state[i - 3, k + 3] == 1 && state[i -4, k + 4] == 1)
{
MessageBox.Show("白棋胜!");
isWin = true;
return;
}
if (state[i, k] == 2 && state[i- 1, k + 1] == 2 && state[i - 2, k + 2] == 2 && state[i - 3, k + 3] == 2 && state[i - 4, k + 4] == 2)
{
MessageBox.Show("黑棋胜!");
isWin = true;
return;
}
}
}


我棋盘是21*14的
cathyann 2009-04-05
  • 打赏
  • 举报
回复
有点困惑。。。
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
我测试一下。。
qsd12n 2009-03-22
  • 打赏
  • 举报
回复
以白子为例 你以 下棋的那个坐标为起点 象两边 走
判断 是否有白子 没有者BREAK;有者index++
Sfly_189 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ffhelly 的回复:]
我最开始是那么做的。

但是你每次点击棋盘就要从数组里查一次 资源呢?

万一我的棋盘有1W个点 数组长度1W 每次点击的话 那要消耗多少资源。。。

但是你怎么来判断斜方向的?
[/Quote]

看上面还不清楚吗?只有判断鼠标点击是不是在指定位置。
后面就只要循环5次。五次都不需要,4次就够了。你刚刚下棋的位置不需数,
Sfly_189 2009-03-22
  • 打赏
  • 举报
回复
比如说下了个黑棋, 值为1
Point[9] 装点+一段范围.
鼠标点击.
for(int i=0;i<9;i++)
{
判断点是不是在point 里
如果在,返回i
}

Chess[9],装下的棋子,
装入对应位
Chess[i]

for(int j=0;j<3;j++)//这边只要循环你需要的次数,比如5个就赢那就5次
{
这里数好了
斜着数
3x3

这是一组斜的数据
往左上数 i-3*i-1
右下 (i)*3+1
count++; //计数>=5胜利
}
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
我最开始是那么做的。

但是你每次点击棋盘就要从数组里查一次 资源呢?

万一我的棋盘有1W个点 数组长度1W 每次点击的话 那要消耗多少资源。。。

但是你怎么来判断斜方向的?
Sfly_189 2009-03-22
  • 打赏
  • 举报
回复
比如说是 a[3][3]
a[0][1] 放黑 值为 1
a[0][2] 放白 值为 0.

然后每次下一个棋子就在数组循环,
在一个2为数组里数还不简单?
Sfly_189 2009-03-22
  • 打赏
  • 举报
回复
2维数组存放你下棋子的值
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
已经存入2维数组了。
我想了解的是 如何来做斜方向的判断胜负。。
我是卡到这里了。。
想来想去 也试验过 总是判断不了。。
以判断斜方向周围4格的方法。

Sfly_189 2009-03-22
  • 打赏
  • 举报
回复
你的棋盘共有多少个点,比如说100
那个建一个100的数组,
有黑,白2种。副个值,1 和2
每下一个棋子就往数组对应数组位存入数据,那数起来不就简单了
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
不是那个意思。。。

我就按上面说的 我点击的是3.3这个坐标。。
我的方法是从3.3这个坐标 往左右扩散4格 X的坐标肯定越界到-1了
tommir3 2009-03-22
  • 打赏
  • 举报
回复
越界回归?
不太懂,咱基础知识不太好,好多名词不明白。
为什么要有-1,你是鼠标点击就传进这个方法?
你加个判断不就得了,在鼠标点击时,就判断是否
点在棋盘上,如果没有点到有效位置,根本不用调用
这方法。
有问题再讨论,俺这菜鸟的一点见解。
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
求高人指点。。。。
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
友情接顶
yeah86 2009-03-22
  • 打赏
  • 举报
回复
友情帮顶。
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
在顶一下。。。

看了半天没看到求斜方向的方法- -
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
顶一下。。。
yangqiang0619 2009-03-22
  • 打赏
  • 举报
回复
呵呵,刚好我下午也在研究这个...

这里有个源程序,你可以看下.

http://dl1.csdn.net/fd.php?i=68641618557950&s=d383d01503857cd6b6a753fed4082732

希望对你有帮助
ffhelly 2009-03-22
  • 打赏
  • 举报
回复
顶一下。。。
加载更多回复(1)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧