面向技术华容道操作步骤何Word格式.docx

上传人:b****6 文档编号:20838339 上传时间:2023-01-25 格式:DOCX 页数:34 大小:387.28KB
下载 相关 举报
面向技术华容道操作步骤何Word格式.docx_第1页
第1页 / 共34页
面向技术华容道操作步骤何Word格式.docx_第2页
第2页 / 共34页
面向技术华容道操作步骤何Word格式.docx_第3页
第3页 / 共34页
面向技术华容道操作步骤何Word格式.docx_第4页
第4页 / 共34页
面向技术华容道操作步骤何Word格式.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

面向技术华容道操作步骤何Word格式.docx

《面向技术华容道操作步骤何Word格式.docx》由会员分享,可在线阅读,更多相关《面向技术华容道操作步骤何Word格式.docx(34页珍藏版)》请在冰豆网上搜索。

面向技术华容道操作步骤何Word格式.docx

调兵遣将

ID_DBQJ

水泄不通

ID_SXBT

3点击”HUARDclasses”,鼠标右击,选择“newclass”.

图3_1新建Cell类

选择Genericclass,单击ok.(genericCWnd是派生cwind类)

图3_2新建cell类

4.在cell.h文件中的classcell中添加如下成员变量和成员函数:

右击类classcell,加成员变量和成员函数。

(cell类型是一个单元格类型。

通过界面不难看出棋子是由一个或多个正方形构成的。

而cell类型则是构建这个正方形的单元格)

Public:

voidSetpos(GLfloatx,GLfloaty);

voidSetchessname(GLintname);

voidSetcellstate(GLintstate);

intGetchessname();

intGetcellstate();

boolDrawChess(GLuint*texture);

boolCopyCell(cell&

tcell);

boolclear();

private:

GLfloatpos_x;

GLfloatpos_y;

GLintcellstate;

GLintchessname;

GLuinttexid;

//(在这里很多类似GLint数据类型的定义。

其实就是我们所熟悉的int类型数据。

GL是一个平台转换功能。

可根据平台的不同,而使后面的int类型能自动适应所在平台。

添加方法如下:

图4_1新建成员函数

图4_2添加成员函数voidSetpos(GLfloatx,GLfloaty);

图4_3添加成员变量

图4_4添加成员变量GLfloatpos_x;

5.在步骤4中添加的函数中添加对应代码,并在cell.h文件首添加头文件:

“#include<

GL/glut.h>

”,并在cell.cpp中添加函数

boolcell:

:

CopyCell(cell&

tcell)//复制单元中棋子名称和位置。

传引用调用CELL类型变量

{

chessname=tcell.Getchessname();

cellstate=tcell.Getcellstate();

tcell.clear();

returntrue;

}

clear()//将位置和名字置为0

chessname=CN_EMPTY;

cellstate=CS_EMPTY;

voidcell:

Setpos(GLfloatx,GLfloaty)//赋值位置坐标

pos_x=x;

pos_y=y;

Setchessname(GLintname)//赋值棋子名字

chessname=name;

Setcellstate(GLintstate)//赋值棋子部分

cellstate=state;

intcell:

Getchessname()//获得棋子名字

returnchessname;

Getcellstate()//获得位置

returncellstate;

DrawChess(GLuint*texture)//画棋子,并为每个棋子的纹理标号。

glPushMatrix();

//把当前的矩阵数据压栈(就是保存起来)

glTranslatef(pos_x,pos_y,0.0);

//沿着矩阵中X和Y的位置移动

switch(chessname)

{

caseCN_CAOCAO:

glBindTexture(GL_TEXTURE_2D,texture[0]);

//建立一个绑定到目标纹理的有名称的纹理

break;

caseCN_ZHANGFEI:

switch(cellstate)

{

caseCS_LEFT:

caseCS_RIGHT:

glBindTexture(GL_TEXTURE_2D,texture[6]);

break;

caseCS_BOTTOM:

caseCS_TOP:

glBindTexture(GL_TEXTURE_2D,texture[7]);

}

caseCN_ZHAOYUN:

glBindTexture(GL_TEXTURE_2D,texture[8]);

glBindTexture(GL_TEXTURE_2D,texture[9]);

caseCN_MACHAO:

glBindTexture(GL_TEXTURE_2D,texture[4]);

glBindTexture(GL_TEXTURE_2D,texture[5]);

caseCN_GUANYU:

glBindTexture(GL_TEXTURE_2D,texture[1]);

caseCN_HUANGZHONG:

glBindTexture(GL_TEXTURE_2D,texture[2]);

glBindTexture(GL_TEXTURE_2D,texture[3]);

caseCN_BIN:

caseCN_YONG:

caseCN_ZU:

caseCN_DIN:

glBindTexture(GL_TEXTURE_2D,texture[10]);

caseCN_EMPTY:

glBindTexture(GL_TEXTURE_2D,texture[12]);

}

glBegin(GL_QUADS);

switch(cellstate)

caseCS_TOPLEFT:

glTexCoord2f(0.0f,0.5f);

glVertex3f(0.0,0.0,0.0);

//glTexCoord*()设置纹理坐标,glVertex*()设置顶点坐标

glTexCoord2f(0.5f,0.5f);

glVertex3f(1.0,0.0,0.0);

glTexCoord2f(0.5f,1.0f);

glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.0f,1.0f);

glVertex3f(0.0,1.0,0.0);

caseCS_TOPRIGHT:

glTexCoord2f(1.0f,0.5f);

glTexCoord2f(1.0f,1.0f);

caseCS_BOTTOMLEFT:

glTexCoord2f(0.0f,0.0f);

glTexCoord2f(0.5f,0.0f);

caseCS_BOTTOMRIGHT:

glTexCoord2f(1.0f,0.0f);

caseCS_LEFT:

caseCS_RIGHT:

caseCS_TOP:

caseCS_BOTTOM:

caseCS_BIN:

caseCS_EMPTY:

glEnd();

glPopMatrix();

//把当前的矩阵数据出栈(就是把保存的再回复)

6、在文件cell.h首添加如下代码:

在类前面添加。

enumCHESSNAME

CN_EMPTY=0,//0

CN_CAOCAO,//1

CN_ZHANGFEI,//2

CN_ZHAOYUN,//3

CN_MACHAO,//4

CN_GUANYU,//5

CN_HUANGZHONG,//6

CN_BIN,//7

CN_YONG,//8

CN_ZU,//9

CN_DIN,//10

};

enumCELLSTATE

CS_EMPTY=0,//0

CS_TOPLEFT,//曹操左上角部分//1

CS_TOPRIGHT,//2

CS_BOTTOMLEFT,//3

CS_BOTTOMRIGHT,//4

CS_TOP,//将士竖着摆放时,将士上半部分//5

CS_BOTTOM,//6

CS_LEFT,//将士横着摆放时,将士左半部分//7

CS_RIGHT,//8

CS_BIN,//小将,就占一个格子//9

//比翼横空

staticintnameConfig1[5][4]=

{7,0,8,6},

{9,0,10,6},

{3,3,4,4},

{2,2,1,1},

{5,5,1,1}

staticintstateConfig1[5][4]=

{9,0,9,6},

{9,0,9,5},

{7,8,7,8},

{7,8,3,4},

{7,8,1,2}

//三军联防

staticintnameConfig2[5][4]=

{7,0,0,8},

{9,3,3,10},

{5,5,2,2},

{1,1,4,6},

{1,1,4,6}

staticintstateConfig2[5][4]=

{9,0,0,9},

{9,7,8,9},

{3,4,6,6},

{1,2,5,5}

//重重包围

staticintnameConfig3[5][4]=

{4,2,2,6},

{4,5,5,6},

{3,1,1,9},

{3,1,1,10}

staticintstateConfig3[5][4]=

{6,7,8,6},

{5,7,8,5},

{6,3,4,9},

{5,1,2,9}

//调兵遣将

staticintnameConfig4[5][4]=

{0,6,6,0},

{3,3,4,4},

{1,1,7,8},

{1,1,9,10}

staticintstateConfig4[5][4]=

{0,7,8,0},

{3,4,9,9},

{1,2,9,9}

//水泄不通

staticintnameConfig5[5][4]=

{9,1,1,6},

{10,1,1,6}

staticintstateConfig5[5][4]=

{9,3,4,6},

{9,1,2,5}

7、至此,编译程序无错。

在文件HUARDView.h中的CHUARDView类中添加如下成员变量和成员函数,添加与步骤4类似。

成员变量:

CDC*m_hDC;

HGLRCm_hRC;

CRectm_oldRect;

GLfloatW,H;

GLuinttexture[13];

cellcells[5][4];

GLbooleanmoveable;

inti_index;

intj_index;

intii_index;

intjj_index;

CHESSNAMEmchessname;

成员函数:

boolmovecell(MOVEDIRETIONmdirection,inti,intj);

boolIsEmpty(inti,intj);

voidResetChessState(intindex);

voidDrawBoard(unsignedintmode);

voidreadchessdata(intnameConfig[5][4],intstateConfig[5][4]);

boolLoadtexfile(char*filename,inttexid);

voidinit();

voidDisplay();

8选中类CHUADView,添加消息响应函数OnCreate,OnSize,OnEraseBKgnd,OnDestroy,添加方法如下:

图5添加系统消息响应函数

9在步骤7和8中添加的系统消息响应函数中添加相应代码如下:

boolCHUARDView:

movecell(MOVEDIRETIONmdirection,inti,intj)//移动单元格

switch(mdirection)

caseMD_LEFT:

cells[i][j-1].CopyCell(cells[i][j]);

caseMD_RIGHT:

cells[i][j+1].CopyCell(cells[i][j]);

caseMD_BOTTOM:

cells[i-1][j].CopyCell(cells[i][j]);

caseMD_TOP:

cells[i+1][j].CopyCell(cells[i][j]);

cells[i][j].clear();

IsEmpty(inti,intj)//判断是否为空

if(i<

0||j<

0||i>

4||j>

4)

returnfalse;

if(cells[i][j].Getchessname()==CN_EMPTY){

returntrue;

else

voidCHUARDView:

ResetChessState(intindex)//设置棋子移动后状态和位置

inti=(index-1)/4;

intj=index-4*i-1;

intt=0;

if(cells[i][j].Getcellstate()==0&

&

moveable==false)

return;

//求棋子左下角的索引

if(cells[i][j].Getchessname()!

=CN_EMPTY)

if(cells[i][j].Getchessname()==CN_CAOCAO)

i=(cells[i][j].Getcellstate()==CS_BOTTOMLEFT||cells[i][j].Getcellstate()==CS_BOTTOMRIGHT)?

i:

i-1;

j=(cells[i][j].Getcellstate()==CS_TOPLEFT||cells[i][j].Getcellstate()==CS_BOTTOMLEFT)?

j:

j-1;

elseif(cells[i][j].Getchessname()==CN_BIN)

i=i;

j=j;

else

i=(cells[i][j].Getcellstate()==CS_TOP)?

i-1:

i;

j=(cells[i][j].Getcellstate()==CS_RIGHT)?

j-1:

j;

i_index=i;

j_index=j;

mchessname=(CHESSNAME)cells[i][j].Getchessname();

moveable=true;

//确定棋子移动方向

else

{

switch(mchessname)

caseCN_CAOCAO:

if(IsEmpty(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1