自己动手写推箱子游戏——设计师(源码)
来源:互联网 发布:xml json 比较 编辑:程序博客网 时间:2024/06/05 23:55
源码下载地址:http://download.csdn.net/source/3503308
第三:设计师
好的程序不仅能够让玩家玩设计好的游戏,还应该让他们的新想法得以实现,这就需要为他们提供设计平台
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 defaultint 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;elsechosed=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();}
- 自己动手写推箱子游戏——设计师(源码)
- 自己动手写推箱子游戏——界面(源码)
- 自己动手写推箱子游戏——菜单(源码)
- 自己动手写推箱子游戏——休闲放松(源码)
- 推箱子游戏(控制台操作) 源码
- 推箱子游戏———DELPHI
- Greenfoot游戏——推箱子
- 使用C#写游戏--推箱子
- Java版推箱子(搬箱子)游戏开发入门示例及源码
- 黑马程序员——C基础之推箱子游戏
- 【黑马程序员】C语言—推箱子游戏实现
- Android开发入门——推箱子游戏开发实战(二)
- Android开发入门——推箱子游戏开发实战(三)
- Android开发入门——推箱子游戏开发实战(四)
- Android开发入门——推箱子游戏开发实战(五)
- Android开发入门——推箱子游戏开发实战(六)
- Android开发入门——推箱子游戏开发实战(七)
- Android开发入门——推箱子游戏开发实战(八)
- Linux内存管理.
- Ruby on rails开发从头来(windows)(二十四)-测试Controller
- Ruby on rails开发从头来(windows)(二十三)-功能测试的约定
- oracle ora-00054:resource busy and acquire with nowait specified
- Ruby on rails开发从头来(windows)(二十二)-测试Controller
- 自己动手写推箱子游戏——设计师(源码)
- 关于Serializable的serialVersionUID
- Ruby on rails开发从头来(windows)(二十一)-测试Model时的问题
- 常用Linux系统信息查询命令
- Ruby on rails开发从头来(windows)(二十)-测试model(CRUD)
- Ruby on rails开发从头来(windows)(十九)-测试开始
- SecureCRT 退出全屏
- Ruby on rails开发从头来(windows)(十八)-自动生成文档
- ORACLE删除与增加临时表空间方法: