| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4229 人关注过本帖, 2 人收藏
标题:求助!!!
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 26楼 beyondyf
嗯 谢谢先

梅尚程荀
马谭杨奚







                                                       
2012-05-15 11:17
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 30楼 有容就大
这样吧,你可以仔细观察一下棋盘的第一排的点,数一下一共有几个点?基点是哪个?想象一下,如果鼠标在第一排上以X方向移动时,移动多少才算是棋盘从上一个点开始移动到第二个点?

我们都在路上。。。。。
2012-05-15 11:24
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
然后观察纵向:同样的,当鼠标在Y方向移动多少时,算是移动了一个点?学会如何进行公式推导,远比看别人的代码理解更深一些。

我们都在路上。。。。。
2012-05-15 11:28
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:0 
棋子的移动归根结底就是响应鼠标移动消息,那就在OnMouseMove里写代码呗,至于面向对象面向过程所云你就当做是为了优化代码吧,先整出来再优化代码。

至于什么棋子移动之后,原来位置怎么恢复棋盘色,这个了解一下什么叫帧

棋子的凹陷啥的,用两种(或3种)位图覆盖,以达到效果

棋子移动的动画也是同样道理,用多幅图快速更换覆盖

至于闪烁问题就是双缓冲技术了,这个网上资料一大堆,如果觉得象棋难点,就先写五子棋,那个相对容易点

********多贴代码,少说空话*******
2012-05-15 11:29
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 32楼 hellovfp
我的想象是 棋格宽度 = 棋子宽度 + 棋子间距 ;
如果棋子半径是29 棋子间距是 2 那么一个棋格宽度就是60, 整个棋盘应该是90个这样的棋格组成的 横 9 竖 10
那么
鼠标旧坐标 POINT ptOld; ptOld.x / 棋格宽度 = i 鼠标新坐标 POINT ptNew; ptNew.x / 棋格宽度 = j
if (j != i ) 移动到 棋格[0][j]。
我现在的想法是把棋盘定义成一个ChessBoard[i][j]数组。现在的问题是怎么把这个数组的点和60 * 60 的棋格产生映射关系?

[ 本帖最后由 有容就大 于 2012-5-16 00:23 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-15 12:22
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 34楼 ppfly
哦 那么现在简化一下 鼠标点击一个棋子 系统在其上加间断框 表示选取 移动鼠标 在新位置点击 棋子瞬间移动到这个新位置 这样的话 整个过程都是重复一个动作 画棋盘 +  贴棋子 ---- 发送重绘命令 ----画棋盘 +  贴棋子 。棋盘是固定的 只要在每次重绘之前确定要贴的棋子数量 类型 和 其对应的位置 就能得到新的画面 这样就达到了移动的目的。 我现在就是这样想的 问题是里面的细节好些不清楚 。

梅尚程荀
马谭杨奚







                                                       
2012-05-15 12:31
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 35楼 有容就大
还是没有得到要领。。。棋格宽度是一个固定值。。
你可以推导一下:
ChessBoard[0][0]如何对应鼠标点(pt.x, pt.y)?
ChessBoard[0][1]如何对应鼠标点(pt.x, pt.y)?
棋盘的棋点会不会出现[-1][-1]的情况?
所以在一个范围里,取鼠标点在棋点左上角<x, y>到棋盘右下角<x1, y1>这个范围里,就不会超出棋点范围,你不可能计算得到ChessBoard[-1][0]这样的点。
公式就是如果鼠标点在范围内,棋点x坐标 = (鼠标pt.x - 棋点左上角座标x) / 棋格宽度。然后自己推导y坐标。

另外上次要你做切图那个程序是有目的的,就是希望你学会使用GDI+,否则今天的图片你只有自己转成BMP和mask用了。

我们都在路上。。。。。
2012-05-15 12:54
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
我们在做这个项目的时候,%70的代码是在控制台下面完成的。。%30的代码最后转到界面UI部分。。。
在控制台下写程序会让你的头脑清醒很多的。所以说界面真的不重要。抛开界面的那些弄人的想法,你会看到程序的本质。

我们都在路上。。。。。
2012-05-15 13:02
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 37楼 hellovfp
哦 是的 我忽略了 棋盘的左上点坐标 我说的那种情况是左上坐标是<0, 0>的情况 实际是都大于0的。


梅尚程荀
马谭杨奚







                                                       
2012-05-15 13:08
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 38楼 hellovfp
你们做这个项目是几人完成的 做的时候感觉轻松吗 我很艰难啊 一个人在爬。

梅尚程荀
马谭杨奚







                                                       
2012-05-15 13:11
快速回复:求助!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012216 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved