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

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

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

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

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

面向技术华容道操作步骤何

华容道游戏程序操作步骤

头文件放置:

(1)确定VC6.0安装是默认路径还是自定义路径

A、默认路径:

将openGL文件夹内所有‘.h’类型文件复制到

C:

\ProgramFile\MicrosoftVisualC++6.0\VC98\Include\GL文件夹下。

将openGL文件夹内所有‘.lib’类型文件复制到

C:

\ProgramFile\MicrosoftVisualC++6.0\VC98\Lib文件夹下。

B、自定义路径:

先找到安装VisualC++6.0的路径。

找到VC98文件夹

将openGL文件夹内所有‘.h’类型文件复制到…\VC98\Include\GL文件夹下。

将openGL文件夹内所有‘.lib’类型文件复制到…\VC98\Lib文件夹下。

(2)将openGL文件夹内所有‘.dll’类型文件复制到C:

\WINDOWS\System32文件夹中。

1,打开VC++6.0,新建MFC单文档应用程序,项目名称:

HUARD,并将picture文件夹拷贝到此项目文件夹下。

(先建工程,再将picture文件夹拷贝到所建立文件夹HUARD中)

图1新建MFC单文档应用程序工程,工程名称:

HUARD

图2选择“单文档”程序类型,点击“完成”

2打开“资源视图”,在Menu下双击“IDR_MAINFRAME”,新建如下菜单:

图3新建菜单

菜单子项

ID

比翼横空

ID_BYHK

三军联防

ID_SJLF

重重包围

ID_CCBW

调兵遣将

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”,并在cell.cpp中添加函数

boolcell:

:

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

传引用调用CELL类型变量

{

chessname=tcell.Getchessname();

cellstate=tcell.Getcellstate();

tcell.clear();

returntrue;

}

boolcell:

:

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

{

chessname=CN_EMPTY;

cellstate=CS_EMPTY;

returntrue;

}

voidcell:

:

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

{

pos_x=x;

pos_y=y;

}

voidcell:

:

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

{

chessname=name;

}

voidcell:

:

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

{

cellstate=state;

}

intcell:

:

Getchessname()//获得棋子名字

{

returnchessname;

}

intcell:

:

Getcellstate()//获得位置

{

returncellstate;

}

boolcell:

:

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]);

break;

}

break;

caseCN_ZHAOYUN:

switch(cellstate)

{

caseCS_LEFT:

caseCS_RIGHT:

glBindTexture(GL_TEXTURE_2D,texture[8]);

break;

caseCS_BOTTOM:

caseCS_TOP:

glBindTexture(GL_TEXTURE_2D,texture[9]);

break;

}

break;

caseCN_MACHAO:

switch(cellstate)

{

caseCS_LEFT:

caseCS_RIGHT:

glBindTexture(GL_TEXTURE_2D,texture[4]);

break;

caseCS_BOTTOM:

caseCS_TOP:

glBindTexture(GL_TEXTURE_2D,texture[5]);

break;

}

break;

caseCN_GUANYU:

switch(cellstate)

{

caseCS_LEFT:

caseCS_RIGHT:

glBindTexture(GL_TEXTURE_2D,texture[1]);

break;

caseCS_BOTTOM:

caseCS_TOP:

glBindTexture(GL_TEXTURE_2D,texture[1]);

break;

}

break;

caseCN_HUANGZHONG:

switch(cellstate)

{

caseCS_LEFT:

caseCS_RIGHT:

glBindTexture(GL_TEXTURE_2D,texture[2]);

break;

caseCS_BOTTOM:

caseCS_TOP:

glBindTexture(GL_TEXTURE_2D,texture[3]);

break;

}

break;

caseCN_BIN:

caseCN_YONG:

caseCN_ZU:

caseCN_DIN:

glBindTexture(GL_TEXTURE_2D,texture[10]);

break;

caseCN_EMPTY:

glBindTexture(GL_TEXTURE_2D,texture[12]);

break;

}

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);

break;

caseCS_TOPRIGHT:

glTexCoord2f(0.5f,0.5f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(1.0f,0.5f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(1.0f,1.0f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.5f,1.0f);glVertex3f(0.0,1.0,0.0);

break;

caseCS_BOTTOMLEFT:

glTexCoord2f(0.0f,0.0f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(0.5f,0.0f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(0.5f,0.5f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.0f,0.5f);glVertex3f(0.0,1.0,0.0);

break;

caseCS_BOTTOMRIGHT:

glTexCoord2f(0.5f,0.0f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(1.0f,0.0f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(1.0f,0.5f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.5f,0.5f);glVertex3f(0.0,1.0,0.0);

break;

caseCS_LEFT:

glTexCoord2f(0.0f,0.0f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(0.5f,0.0f);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);

break;

caseCS_RIGHT:

glTexCoord2f(0.5f,0.0f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(1.0f,0.0f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(1.0f,1.0f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.5f,1.0f);glVertex3f(0.0,1.0,0.0);

break;

caseCS_TOP:

glTexCoord2f(0.0f,0.5f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(1.0f,0.5f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(1.0f,1.0f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.0f,1.0f);glVertex3f(0.0,1.0,0.0);

break;

caseCS_BOTTOM:

glTexCoord2f(0.0f,0.0f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(1.0f,0.0f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(1.0f,0.5f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.0f,0.5f);glVertex3f(0.0,1.0,0.0);

break;

caseCS_BIN:

caseCS_EMPTY:

glTexCoord2f(0.0f,0.0f);glVertex3f(0.0,0.0,0.0);

glTexCoord2f(1.0f,0.0f);glVertex3f(1.0,0.0,0.0);

glTexCoord2f(1.0f,1.0f);glVertex3f(1.0,1.0,0.0);

glTexCoord2f(0.0f,1.0f);glVertex3f(0.0,1.0,0.0);

break;

}

glEnd();

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

returntrue;

}

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},

{7,8,7,8},

{3,4,6,6},

{1,2,5,5}

};

//重重包围

staticintnameConfig3[5][4]=

{

{7,0,0,8},

{4,2,2,6},

{4,5,5,6},

{3,1,1,9},

{3,1,1,10}

};

staticintstateConfig3[5][4]=

{

{9,0,0,9},

{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},

{5,5,2,2},

{1,1,7,8},

{1,1,9,10}

};

staticintstateConfig4[5][4]=

{

{0,7,8,0},

{7,8,7,8},

{7,8,7,8},

{3,4,9,9},

{1,2,9,9}

};

//水泄不通

staticintnameConfig5[5][4]=

{

{7,0,0,8},

{3,3,4,4},

{5,5,2,2},

{9,1,1,6},

{10,1,1,6}

};

staticintstateConfig5[5][4]=

{

{9,0,0,9},

{7,8,7,8},

{7,8,7,8},

{9,3,4,6},

{9,1,2,5}

};

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

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

成员变量:

Public:

CDC*m_hDC;

HGLRCm_hRC;

CRectm_oldRect;

GLfloatW,H;

GLuinttexture[13];

cellcells[5][4];

GLbooleanmoveable;

inti_index;

intj_index;

intii_index;

intjj_index;

CHESSNAMEmchessname;

成员函数:

Public:

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]);

break;

caseMD_RIGHT:

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

break;

caseMD_BOTTOM:

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

break;

caseMD_TOP:

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

break;

}

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

returntrue;

}

boolCHUARDView:

:

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

{

if(i<0||j<0||i>4||j>4)

returnfalse;

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

returntrue;

}

else

returnfalse;

}

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