- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二维数组基本操作的编程实现
实验四 二维数组基本操作的编程实现
一、实验目的
掌握二维数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。
二、实验要求
1. 修改程序:补充推箱子游戏的遗缺的部分,使之能正常运行,逻辑结果正确。之后增加至少一关自己的关数,墙体,箱子的最初位置,人的最初位置由自己设定,要求必须有解,而且有一定的破解难度。主要的问题是部分移动方向的代码没有给出,另外计数器的整体工作不正常,更完善的修改包括启用栈结构实现后悔的机制。
2.运行程序了解二维结构:稀疏矩阵的压缩和解压缩、生命繁衍模型、迷宫问题等,通过这些程序的运行过程或结果体会二维结构在程序设计中的重要性和实用性。
原始数据构建方式最简模式为:键盘输入。其他的方式也在鼓励之中:数据内置,计算机自动生成,文件读入。
三、程序说明
程序中用于建立栈的类
//节点
class Reback{
public:
int re_key_up;
int re_key_down;
int re_key_left;
int re_key_right;
int re_count;
int re_movex;
int re_movey;
int re_movexold;
int re_moveyold;
int re_peopleflag;
int re_Maptemp[11][11];
Reback *next;
Reback *before;
};
Reback *headp=new Reback;//头指针
Reback *tailp=new Reback;//尾指针
说明:此类用于存储每一步的游戏临时数据,用于回退
程序中的功能函数
void myDraw(HWND hWnd,HDC dc);//界面的绘制void Key_D(HWND hWnd,HDC dc,int key_value);//响应键盘
void init();//初始化函数
void CueatMap(int AimMap[][11]);//创建地图
void rememberbefore();//保存数据(入栈)
void returnbefore();//还原数据(出栈)
void delrecord();//删除数据(清空栈)
功能的实现:
1.游戏中的鼠标操作的实现:
case WM_LBUTTONDOWN://鼠标左键点击消息
{
int x,y,i=0,j=0,count=0;
x=LOWORD(lParam);//相对于窗口的位置
y=HIWORD(lParam);
if(x=775y=35){
delrecord();//释放资源
PostQuitMessage(0);//发送窗口销毁消息用于关闭窗口
}
else if(x=0x=774y35){
SendMessage(hWnd,WM_SYSCOMMAND,SC_MOVE+HTCAPTION,0);//发送消息
}
else if(x600y120x720y160){//上一关
if(Mapdatacounnt-1=0){
Mapdatacounnt--;
delrecord();
}
CueatMap(Mapdata[Mapdatacounnt]);
InvalidateRect(hWnd, NULL, true);
}
else if(x600y200x720y240){//下一关
if(Mapdatacounnt+1Checkpoint){
Mapdatacounnt++;
delrecord();
}
CueatMap(Mapdata[Mapdatacounnt]);
InvalidateRect(hWnd, NULL, true);
}
else if(x600y280x720y320){//后退一步
returnbefore();
InvalidateRect(hWnd, NULL, true);
}
else if(x600y410x720y450){
ShellExecute(hWnd,open,about.exe,,, SW_SHOW );
}
}
说明:此处的设计方法为,先获取鼠标在窗口中的点击坐标,然后判断该坐标点是否在设定的区域,如果是,则执行相应的操作
2.游戏中键盘操作的实现:
/*键盘消息处理函数*/
void Key_D(HWND hWnd,HD
文档评论(0)