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


梅尚程荀
马谭杨奚







                                                       
2012-05-17 19:20
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 110楼 TonyDeng
AI 可能才是这个项目的分水岭。 看了了网上的例子 确实和Hellovfp大哥说的差不多 界面的部分占大约30%。

梅尚程荀
马谭杨奚







                                                       
2012-05-17 19:23
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
两天没来就结贴了。话说有容的贴子大多都是高楼啊

看了看有容的程序,图片确实失真的厉害,棋子的剪裁也有问题。还有一个BUG,棋子移动后原来的位置还是会保留一个选择框。

重剑无锋,大巧不工
2012-05-17 21:27
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 113楼 beyondyf
是啊 我制作的过程中是老提示 可能丢失像素 WINDOWS自带的画图 PS ACDSee ArtIcon 我都试着用了 不太会搞高清晰的裁剪美观的棋子啊
你说的那个BUG 其实是程序故意设置的 让人直观起点位置。只要删除一句画选择框的语句就成了。

梅尚程荀
马谭杨奚







                                                       
2012-05-17 21:46
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
杨大哥 如果让你设计中国象棋的数据结构 你会怎么选择

一维数组? 多长 static (what TYPE?) Name[what size?];
二维数组 static (what TYPE?) Name[what size?][what size];
或者用传说中的位棋盘?


梅尚程荀
马谭杨奚







                                                       
2012-05-17 21:51
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
哦,有意为之就不算BUG了。不过不好看。hellovfp给的那套图片直接用就好了么,为什么要修改?

我看了一下,这套图片棋格的间距是57px,棋子大小是51X52px,直接用就很合适了,不需要做任何修改。今天是没时间了,明天有时间的话给你个例子。



重剑无锋,大巧不工
2012-05-17 21:56
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
我就是用的他给的那套图 但当时对界面处理有些不太懂
你看下我的部分代码
程序代码:
// Draw On the lattice 根据具体消息在格子上画图
static void DrawLattice(int cPos, BOOL select)
{
    int PosTurn, cx, cy, ChessmanID;

    PosTurn = WV.bTurn ? LatticeTurn(cPos) : cPos;
    cx = BoardEdge + (GetX(PosTurn) - 3) * LatticeSize;
    cy = BoardEdge + (GetY(PosTurn) - 3) * LatticeSize;

    SelectObject(WV.hdcTemp, WV.hbmpBoard);
    BitBlt(WV.hdcMain, cx, cy, LatticeSize, LatticeSize, WV.hdcTemp, cx, cy, SRCCOPY);

    ChessmanID = State.Chessman[cPos];
    if (ChessmanID != 0)
        DrawTransMap(WV.hdcMain, WV.hdcTemp, cx, cy, WV.hbmpChessman[ChessmanID]);
    if (select != 0)
        DrawTransMap(WV.hdcMain, WV.hdcTemp, cx, cy, WV.hbmpSelected);
}

-------  
程序代码:
  case WM_CREATE:
    GetWindowRect(hWnd, &rect);
    x = rect.left;
    y = rect.top;
    rect.right = rect.left + BoardWidth;
    rect.bottom = rect.top + BoardHeight ;
    AdjustWindowRect(&rect, WINDOW_STYLES, TRUE);
    MoveWindow(hWnd, x, y, rect.right - rect.left, rect.bottom - rect.top, TRUE);
    break; 


-----
程序代码:
#define WINDOW_STYLES  WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_CAPTION
const int  LatticeSize = 52;
const int  BoardEdge = 4;
const int  BoardWidth = 2 * BoardEdge + 9 * LatticeSize;
const int  BoardHeight = 2 * BoardEdge + 10 * LatticeSize;

他的棋子是 51 * 53 的 棋盘当时是多少忘了 我当时设置LatticeSize是60后来才慢慢的调整 但是老是对不上格子 我就去把每个棋子都改成 52 * 52的了 在把棋盘改成和52对应的尺寸 。其中就提示过失真的现象。
话说棋格的大小应该可以是长方形把 开始去做的时候很多不晓得呢 现在才稍微熟悉点点 然后图片都改了 我就将就着用了 现在把精力转到走法生成上面了 数据结构和算法分析和有味道啊


梅尚程荀
马谭杨奚







                                                       
2012-05-17 22:11
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 115楼 有容就大
呵呵,那要看干什么了。数组这个概念用在这里显得太小了。

游戏,我会创建象棋类,用于在逻辑上表示一盘棋局,对外的接口包括:
1、获取当前棋盘上某一位置的状态(有无子,什么颜色,什么子);
2、获取当前行棋方、完成将一个位置的棋子移动到另一个位置(其中设置行棋规则,通过返回值通知调用者是否可以这样行棋);
3、获取棋谱(这等同于获取历史状态),并可重置当前状态。通过这一接口可以实现悔棋。
至于状态的保存细节,每个状态就用一个普通二维数组好了,用一个队列存储所有状态。

AI,就要好好设计一下了,会使用合适的状态压缩方式以方便存储大量数据及局势评估。

重剑无锋,大巧不工
2012-05-17 22:16
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 118楼 beyondyf
嗯 这样设计确实便于宏观把握

我现在专注于走法生成即行棋规则
2、获取当前行棋方、完成将一个位置的棋子移动到另一个位置(其中设置行棋规则,通过返回值通知调用者是否可以这样行棋);

--
这个也应该与一个数据结构有关联把 比如一维数组表示的棋盘和二维数组表示的棋盘处理 或者 不同的数组大小(即有无边框, 边框占几个单位)对行棋规则的代码实施都是有很大影响的吧  用面向对象的方法能规避这个限制吗?

[ 本帖最后由 有容就大 于 2012-5-17 22:28 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-17 22:27
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这么解释起来太慢了。这样吧,到时候我会连代码一并发上来,你看过就明白了。

呵呵,虽然hellovfp一直反对你看别人的代码,不过有时候代码更容易说明问题。

你应该正确理解hellovfp的意思,我想他主要反对的是遇到问题不加思索只想拿别人的成功代码应付的行为。通过阅读别人代码而学习别人的编程思想,为已用并加入自己的思想进而有所创新者,我想hellovfp也是支持的。

我愿意发代码的原因就在这里。能读懂我代码并有所开拓的,我认为是有思想可交的朋友,我可以从他身上再学些我没有的。

读不懂我代码,只是考走交作业的,无所谓。他拿走的只是那段他看不懂的代码,他也只能应付那一道题,那道题换个参数恐怕他就搞不定了。这样的人拿走不是代码,是可能会毁了他前程的懒惰之毒。损失的是他,不是我。我很乐意看这样的结果

我愿以代码为饵,钓可交之友(已经钓到不少了)

重剑无锋,大巧不工
2012-05-17 22:40
快速回复:求助!!!
数据加载中...
 
   



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

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