自己动手写推箱子游戏——设计师(源码)
2011-08-08 14:55
423 查看
源码下载地址:http://download.csdn.net/source/3503308
第三:设计师
好的程序不仅能够让玩家玩设计好的游戏,还应该让他们的新想法得以实现,这就需要为他们提供设计平台
1:布局在游戏界面中,新建一个类来完成里面的全部功能,玩家可以点选右边的图来设计自己的想法
左边是布局,可以用一个CRect数组设置其区域
其次就是需要绘制了,其中绘制图片的函数参见界面的模块,
2:鼠标操作,通过鼠标来选择和绘制图形,需要一些标签来确定是否选中的状态
3:保存绘制的图形
对于保存图形,使用ini文件比较容易操作,节名,键名和键值,比txt文档方便操作,但是使用注册表又没有太大必要。对于ini文件的操作主要有几个函数
WritePrivateProfileString
GetPrivateProfileString
保存的时候需要对绘制的图形做些判断,例如没有人或者人多与1个,或者箱子的数目与目的地的数目不等呀,需要反馈给玩家重新设计
4:清除界面
设计者对界面不满意时应该可以清除界面,其实也很简单,只要初始化界面即可
第三:设计师
好的程序不仅能够让玩家玩设计好的游戏,还应该让他们的新想法得以实现,这就需要为他们提供设计平台
1:布局在游戏界面中,新建一个类来完成里面的全部功能,玩家可以点选右边的图来设计自己的想法
左边是布局,可以用一个CRect数组设置其区域
CRect pic[6];//用于存储六个图片的位置 CRect place[64];//用于存储64个格子的位置 BOOL CDesignDlg::OnInitDialog() { num=0;//默认初始为第十关 chosed=0;//默认选中的是墙 //初始化六个图片的位置 dc=GetDC(); flag=false; //int i,j; for(i=0;i<=7;i++) for(j=0;j<=7;j++) face1[i][j]=-1; for(i=0;i<=2;i++) { pic[i].left=480; pic[i].right=530; pic[i].top=40+60*i; pic[i].bottom=90+60*i; } for(i=3;i<=5;i++) { pic[i].left=540; pic[i].right=590; pic[i].top=40+(i-3)*60; pic[i].bottom=90+(i-3)*60; } //初始化64个位置 for(i=0;i<=7;i++) for(j=0;j<=7;j++) { place[8*i+j].left=BEGIN+50*j; place[8*i+j].top=BEGIN+50*i; place[8*i+j].right=BEGIN+50*(j+1); place[8*i+j].bottom=BEGIN+50*(i+1); } CDialog::OnInitDialog(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
其次就是需要绘制了,其中绘制图片的函数参见界面的模块,
2:鼠标操作,通过鼠标来选择和绘制图形,需要一些标签来确定是否选中的状态
void CDesignDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default int i=0,j=0; if(flag==false)//表示没有选择目标 { for(i=0;i<=5;i++) { if(pic[i].PtInRect(point)) { if(i==5) chosed=6; else chosed=i; flag=true; CDesignDlg::draw_chosed(dc); } } } else { for(i=0;i<=5;i++) { if(pic[i].PtInRect(point)) { if(i==5) chosed=6; else chosed=i; CDesignDlg::draw_chosed(dc); } } if(i>=5)//表示不再图片区域 { for(i=0;i<=7;i++) for(j=0;j<=7;j++) { if(place[8*i+j].PtInRect(point)) { face1[i][j]=chosed; break; } } CDesignDlg::draw_face1(dc); } } CDialog::OnLButtonDown(nFlags, point); }
3:保存绘制的图形
对于保存图形,使用ini文件比较容易操作,节名,键名和键值,比txt文档方便操作,但是使用注册表又没有太大必要。对于ini文件的操作主要有几个函数
WritePrivateProfileString
GetPrivateProfileString
保存的时候需要对绘制的图形做些判断,例如没有人或者人多与1个,或者箱子的数目与目的地的数目不等呀,需要反馈给玩家重新设计
void CDesignDlg::OnSave() { int i,j,box,des,man; box=des=man=0; for(i=0;i<=7;i++) for(j=0;j<=7;j++) { if(face1[i][j]==3) man++; if(face1[i][j]==2||face1[i][j]==6) box++; if(face1[i][j]==4||face1[i][j]==6) des++; } if(man==0) { MessageBox("没有人的游戏","提示"); return ; } if(man>1) { MessageBox("游戏人数多于1","提示"); return; } if(des!=box) { MessageBox("目的地数与箱子数不相等","Warning!"); return ; } CString section; CString key,value; CString s; CString path="./save.ini"; section="已保存总数";key="总数"; GetPrivateProfileString(section,key,s,value.GetBuffer(0),100,path); num=(int)atof(value.GetBuffer(0));//获取以保存的总数 section.Format("界面数据%d",num+1);//默认重20关开始 BOOL f=false; for( i=0;i<=7;i++) for(j=0;j<=7;j++) { key.Format("%d",8*i+j); value.Format("%d",face1[i][j]); f=WritePrivateProfileString(section,key,value,path); if(f==false) break; } if(f==false) MessageBox("保存失败","warning"); else { MessageBox("保存成功","warning"); section="已保存总数";key="总数";value.Format("%d",num+1); WritePrivateProfileString(section,key,value,path); } }
4:清除界面
设计者对界面不满意时应该可以清除界面,其实也很简单,只要初始化界面即可
void CDesignDlg::OnClear() { for(i=0;i<=7;i++) for(j=0;j<=7;j++) face1[i][j]=-1; RedrawWindow(); CDesignDlg::OnPaint(); }
相关文章推荐
- 自己动手写推箱子游戏——设计师(源码)
- 自己动手写推箱子游戏——休闲放松(源码)
- 自己动手写推箱子游戏——界面(源码)
- 自己动手写推箱子游戏——界面(源码)
- 自己动手写推箱子游戏——菜单(源码)
- 自己动手写推箱子游戏——菜单(源码)
- 自己动手写推箱子游戏——休闲放松(源码)
- [导入]一个可以自己布局的推箱子游戏 (附源码)
- 一个可以自己布局的推箱子游戏 (附源码)
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
- 自己动手写cocos2dx游戏引擎(三)——Director对象
- 自己动手写游戏:Flappy Bird
- java集合之ArrayList源码解读 帮助大家自己动手写一个ArrayList
- D3D游戏编程系列(二):自己动手编写即时战略游戏之地图编辑器的制作
- 自己动手开发智能聊天机器人完全指南(附python完整源码)
- D3D游戏编程系列(九):自己动手编写rpg游戏之lua脚本的引入
- 《自己动手写操作系统》源码解析——第三章pmtest5.asm
- 自己动手编写CSDN博客备份工具-blogspider之源码分析(1)
- 自己动手写CSDN博客提取器源码分析之一:处理网页保存为txt文件
- Java实现的推箱子游戏,带源码下载地址和地图生成程序