77范文网 - 专业文章范例文档资料分享平台

郁金香VC++初级和中级篇, 最全的手记及琢字翻译(2)

来源:网络收集 时间:2019-04-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

{ //检测 p1,p2 2个棋子 是否可以消除 // Y坐标相同的情况下 p1,p2

//lineNull(p1.right,p2.left) //可消除 if (p1.y==p2.y) //如果列相同则执行

{ CChessPoint pa(p1),pb(p2);//先建立类,初始化两点

if (lineNull(pa.down,pb.up)) return true;//先将两个点类化, 可消除返回真 }

//X坐标相同的情况下 p1,p2

//LineNull(p1.down,p2.up) //可消除

if (p1.x==p2.x) //如果行相同则执行此句 { CChessPoint pa(p1),pb(p2);

if (lineNull(pa.down,pb.up)) return true; }

//X与Y坐标都不相情况下 p1,p2

//lineNull(p1.down,pa),LineNull(p2.down,pb),LineNull(pa,pb) //可消除

return true; }

1.3.4 CheckLine实现

a、CheckLine函数实现 b、Check2p核心代码架构 bool CheckLine(POINT p1;POINT p2) {

//x坐标相同 // p1.y to p2.y //Y坐标相同 //p1.x to p2.x }

首先还是要添加修改两点间是直线的判断函数

bool CheckLine(POINT p1,POINT p2) //检测2点间 是否连通(存在一条全为0的直线路径) {

int x,y;

if (p1.x==p2.x)//两点X坐标相同 {

for (y=p1.y;y<=p2.y;y++) {

//假如ChessData[y][p1.x] Y的某一个点大于0则说明有棋子,就返回 false; if (chessdata[y][p1.x]>0) return false; } }

else if (p1.y==p2.y) {

for (x=p1.x;x<=p2.x;x++)

{//假如ChessData[p1.y][x] X某一点有棋子则大于0返回 false; if (chessdata[p1.y][x]>0) return false; } }

return true; }

再添加除了直线的两点函数检测的代码 bool check2p(POINT p1,POINT p2) {

CChessPoint pa(p1),pb(p2);//初始化棋子类 POINT p11,p22;//新建两个变量指针,方便调用 int x,y;//新建两个整型变量,方便调用 //检测 p1,p2 2个棋子 是否可以消除

if (p1.y==p2.y) // Y坐标相同的情况下 p1,p2 {

if (CheckLine(pa.down,pb.up)) return true;//找到相同路线 //pa,pb ; pa,p_1;pb,p_2; p11=p1;p22=p2; for (y=0;y<11;y++) {

p11.y=p22.y=y; //找到转折的路线

if heckLine(p11,p22)&&CheckLine(pa.up,p11)&&CheckLine(pb.up,p22)) return true;

6

} }

1.3.5 Check2p完整代码实现

a、完整的Ceheck2p代码解析

b、完善CheckLine函数 Check2P实现原理; 分类:

Y坐标相同:pa=p1.left,pb=p2.right// pa,pb之间是否连通 则消除 X坐标相同: pa=p1.down,pb=p2.up //pa,pb之间是否连通 则消除 X,Y坐标都不相同

pa,pb// p1,pa// pb,p2 这三线路 都连通 则可消除 p1,pa,//pa,pb//p2,pb 这三线路 都连通 则可消除

在两点可以直连的情况下,第一个棋子是P1,第二个棋子是P2,第一个棋子与第二个棋子之间的点是PA到PB,这两个点要不断的循环,查找其中是否为空,如果为空则可以消除.当然这是横向的连接,同时还有竖向的连接 Y坐标相同:pa=p1.left,pb=p2.right// pa,pb之间是否连通 则消除 [attachment=539]

当然更多的是折线的连接 X,Y坐标都不相同

pa,pb// p1,pa// pb,p2 这三线路 都连通 则可消除 p1,pa,//pa,pb//p2,pb 这三线路 都连通 则可消除 [attachment=541]

老师已经写好了三个函数的代码

bool CheckLine( POINT p1,POINT p2) {

int x,y,t; //同一线上的两点间 全为0 则返回真 //如果 p1==p2 也返回真

if ((p1.x==p2.x)&&(p1.y==p2.y) && (chessdata[p1.y][p1.x]==0) && (chessdata[p2.y][p2.x]==0)) {return true; }else if ((p1.x<0) || (p1.x>18) || (p1.y<0) || (p1.y>10) ||

(p2.x<0) || (p2.x>18) || (p2.y<0) || (p2.y>10) ) {return false; } if (p1.x==p2.x) //如果X轴相等则 比较 {

if (p1.y>p2.y) {t=p1.y;p1.y=p2.y;p2.y=t;} for (y=p1.y;y<=p2.y;y++) {

if (chessdata[y][p1.x]!=0 ) {return false;} } } if (p1.y==p2.y)

{ //如果Y轴相等 则比较

if (p1.x > p2.x) {t=p1.x;p1.x=p2.x ;p2.x=t;} for(x=p1.x;x<=p2.x;x++) {

if (chessdata[p1.y][x]!=0 ) {return false;} }; }; return true; };

另一个函数,这个因为与窗口有关系,所以就转移到llk_wgDlg.cpp里 bool ClearPiar() //消除一对棋子 {

//读出棋盘数据至chessdata 11,19 updateChess();

//遍历整个棋盘 找出相同类型 一对棋子 POINT p1,p2; int x1,y1,x2,y2;

for (y1=0;y1<11;y1++) for (x1=0;x1<19;x1++)

{ for (y2=y1;y2<11;y2++) for (x2=x1;x2<19;x2++)

if ((chessdata[y1][x1]==chessdata[y2][x2]) // 棋子1与棋子2 类型是否相同 &&(!((x1==x2)&&(y1==y2))) //要求点1与点2 相等则假 ) {

p1.x=x1;p1.y=y1; p2.x=x2;p2.y=y2;

//检测 相同的2个棋子是否可消掉

if ( Check2p(p1,p2))//如果可消除 则返回真

7

{

//click2p 鼠标模拟 点击 p1,p2 click2p(p1,p2); m_p1x=x1; m_p1y=y1; m_p2x=x2; m_p2y=y2;

UpdateData(false); return true; } } } return false; }

还有一个最长的函数

bool Check2p(POINT a,POINT b) {

CChessPoint p1(a),p2(b); POINT pa,pb;//转角点 int x,y;

// 如果2点为同一点 则返回假

if ((a.x==b.x) && (a.y==b.y )) { return false;} else

if ((chessdata[a.y][a.x]==0) || (chessdata[b.y][b.x]==0)) { return false;} else

if (chessdata[a.y][a.x]!=chessdata[b.y][b.x]) { return false;} pa=a;pb=b;

// 在横向一条线上 y坐标 相同 if (a.y==b.y)

{ // 2点在y轴相邻

if ((p1.right.x==p2.p.x) || (p1.left.x==p2.p.x)) { return true; } //检测 这条线是否有一条路径相通

if (CheckLine(p1.right,p2.left )) {return true; } //检测 上下 //y 上 pa=a;pb=b;

if ((p1.up.y >=0) && (p1.up.y<=10)) for ( y=0 ;y<=p1.up.y;y++) {

pa.y=y;pb.y=y;

if (CheckLine(pa,p1.up) && CheckLine(pb,p2.up ) && CheckLine(pa,pb)) { return true; } }

// y下

pa=a;pb=b;

if ((p1.down.y >=0)&& (p1.down.y <=10)) for ( y=p1.down.y;y<=10;y++) {

pa.y=y;pb.y=y;

if (CheckLine(pa,p1.down ) && CheckLine(pb,p2.down ) && CheckLine(pa,pb)) { return true; } }

//检测 左右 因为 y轴相等,所以不存在左右路径 } else

//纵向一条线 x 坐标 相同 if (a.x==b.x) {

//x下上 相邻不

if ((p1.down.y==p2.p.y ) || (p1.up.y==p2.p.y)) { return true; } //检测 这条线是否有一条路径相通

if (CheckLine(p1.down,p2.up) ) { return true; } //检测 上下 国为x 轴相等 所以不存在路径 //检测 左右 //x左

pa=a;pb=b;

for (x=0 ;x<=p1.left.x ;x++) {

pa.x=x; pb.x=x;

8

if (CheckLine(pa,p1.left) && CheckLine(pb,p2.left ) && CheckLine(pa,pb)) { return true; } } //x右

pa=a;pb=b;

for (x=p1.right.x;x<=18;x++) {

pa.x=x; pb.x=x;

if (CheckLine(pa,p1.right ) && CheckLine(pb,p2.right ) && CheckLine(pa,pb)) { return true; } } } else

//xy 坐标 都不相同 {{{{{{ {

pa=a;pb=b;

if (a.x>b.x) { // p2点 在 左 left

////////////////xxxxxxxxxxxxxxxxx 找x轴路径 for (x=0;x<=p2.left.x;x++) {

pa.x=x;pb.x=x;

if (CheckLine(pa,p1.left) && CheckLine(pa,pb) && CheckLine(pb,p2.left)) {return true; } } // end for

for (x=p2.right.x ;x<= p1.left.x;x++) {

pa.x=x;pb.x=x;

if (CheckLine(p2.right,pb) && CheckLine(pa,pb)&& CheckLine(pa,p1.left)) {return true; } }

for (x=p2.right.x;x<=18;x++) {

pa.x=x;pb.x=x;

if (CheckLine(p1.right ,pa)&& CheckLine(p2.right ,pb) && CheckLine(pa,pb)) { return true; } }

/////////////////yyyyyyyyyyyyyyyyyyyy 找y轴路径 由于是从上向下 搜索 所以p1.y>p2.y pa.x=a.x; pb.x=b.x; //初始化坐标 y軕渐变 for ( y=0 ;y<=p1.up.y;y++) //1段 {

pa.y=y;pb.y=y;

if (CheckLine(pb,pa) && CheckLine(pa,p1.up) && CheckLine(pb,p2.up)) { return true;} }

////////////////////////

for (y=p1.down.y ;y<=p2.up.y;y++)//2段 {

pa.y=y;pb.y=y;

if (CheckLine(pb,pa)&& CheckLine(p1.down,pa) && CheckLine(pb,p2.up)) { return true;} }

///////////////////////

for (y=p2.down.y ;y<=10 ;y++) //3段 {

/////////////////////////////// pa.y=y;pb.y=y;

if (CheckLine(pb,pa) && CheckLine(p1.down,pa) && CheckLine(p2.down,pb)) { return true; } }

} else

////////////p2点 在 右 right a.x>b.x {

pa.y=a.y; pb.y=b.y; //初始化坐标 for (x=0 ;x<= p1.left.x ;x++); {

pa.x=x;pb.x=x;

if (CheckLine(pa,pb)&& CheckLine(pa,p1.left)&& CheckLine(pb,p2.left)) {

9

return true;} }

/////////////////////

for (x=p1.right.x ;x<=p2.left.x;x++) {

pa.x=x;pb.x=x;

if (CheckLine(pa,pb)&& CheckLine(p1.right,pa)&& CheckLine(pb,p2.left)) { return true; } }

///////////////////////

for (x=p2.right.x ;x<=18;x++) {

pa.x=0;pb.x=x;

if (CheckLine(pa,pb) && CheckLine(p1.right,pa)&& CheckLine(p2.right,pb)) {return true; } }

///////////////////////yyyyyyyyyyyyyyyyyy y轴渐变

pa.x =a.x; pb.x =b.x ; //初始化坐标 if ((p1.up.y>=0) && (p1.up.y<=10)) {

for (y=0 ;y<=p1.up.y ;y++) //1段 {

pa.y=y;pb.y=y;

if (CheckLine(pa,pb)&& CheckLine(pa,p1.up) && CheckLine(pb,p2.up)) { return true; } }} //////

pa.x =a.x; pb.x =b.x ; //初始化坐标 if ((p1.down.y<=10) && (p2.up.y>=0)) {

for (y=p1.down.y ;y<=p2.up.y;y++) //2段 {

pa.y=y;pb.y=y;

if (CheckLine(pa,pb)&& CheckLine(p1.down,pa) && CheckLine(pb,p2.up)) { return true; } } } ////

pa.x =a.x; pb.x =b.x ; //初始化坐标 if (p2.down.y <=10) {

for ( y=p2.down.y;y<=10;y++) //3段 {

pa.y=y;pb.y=y;

if (CheckLine(pa,pb) && CheckLine(p1.down,pa)&& CheckLine(p2.down ,pb)) { return true; } } } } }

//xy 坐标 都不相同 }}}}}}}}} return false; }

1.3.6 Click2p函数实现,单消棋子功能实现 a、完成Click2p函数 b、单消一对棋子的实现 c、修改ClearPair函数 棋盘第一格 坐标 x=21,y=192 31*35 棋子宽度,高度

SendMessage(hwnd,WM_LBUTTONDOWN,0,(y<<16)+x+31*2);// SendMessage(hwnd,WM_LBUTTONUP,0,(y<<16)+x); // bool Click2p(POINT p1,POINT p2) {

//点击p1

HWND hwnd=FindWindow(NULL,gameCaption); int lparam;

lparam=((p1.y*35+192)<<16)+(p1.x*31+21);

10

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库郁金香VC++初级和中级篇, 最全的手记及琢字翻译(2)在线全文阅读。

郁金香VC++初级和中级篇, 最全的手记及琢字翻译(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/561020.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: