自己动手写推箱子游戏——休闲放松(源码)

源码下载地址:http://download.csdn.net/source/3503308

第四:休闲放松

有些玩家希望在玩游戏过程中听歌放松等休闲,所以我自己设计了一个简易的mp3、mp4播放器

播放器能够对各个盘符中的mp3、mp4文件进行搜索,免去玩家的查阅

对于播放器,大家可以用MFC里面的Windows Media Player控件

对于歌曲的搜索,需要递归函数实现,也可以用CFindFile类实现

void CMusicDlg::ListDir(CString Dir) { _finddata_t fdata; long done; //char tempdir[MAXLEN]={0}; char *tempdir; tempdir=new char[MAXLEN]; for(i1=0;i1<MAXLEN;i1++) tempdir[i1]=0; strcat(tempdir,Dir); strcat(tempdir,"\\*.*"); done=_findfirst(tempdir,&fdata); if(done!=-1) { int ret=0; while(ret!=-1) { if(fdata.attrib!=_A_SUBDIR) { if(strcmp(fdata.name,"...")!=0&&strcmp(fdata.name,"..")!=0&&strcmp(fdata.name,".")!=0) { //char dir[MAXLEN]={0}; char *dir; dir=new char[MAXLEN]; for(i1=0;i1<MAXLEN;i1++) dir[i1]=0; strcat(dir,Dir); strcat(dir,"\\"); strcat(dir,fdata.name); for(i1=0;dir[i1]!=0;) i1++; judge[3]='\0'; judge[2]=dir[i1-1];judge[1]=dir[i1-2];judge[0]=dir[i1-3]; if(strcmp(judge,"mp3")==0||strcmp(judge,"mp4")==0||strcmp(judge,"MP3")==0||strcmp(judge,"MP4")==0) { text.Format("%d",count); m_chart.InsertItem(count,text,0); m_chart.SetItemText(count,1,fdata.name); strcpy(name[count],dir); count++; } delete dir; } } ret=_findnext(done,&fdata);//查找下一个文件 if(fdata.attrib==_A_SUBDIR&&ret!=-1) //如果是文件夹,递归调用 { if(strcmp(fdata.name,"...")!=0&&strcmp(fdata.name,"..")!=0&&strcmp(fdata.name,".")!=0) { //char pdir[MAXLEN]={0}; char *pdir; pdir=new char[MAXLEN]; for(i1=0;i1<MAXLEN;i1++) pdir[i1]=0; strcat(pdir,Dir); strcat(pdir,"\\"); strcat(pdir,fdata.name); ListDir(pdir); delete pdir; } } } } delete tempdir; }


然后玩家在双击列表中的文件时就可以播放相应的文件了,这需要为视图列表控件添加消息机制NM_DBLCLK,在这个函数中:

void CMusicDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) { int n=m_chart.GetSelectionMark(); //strcpy(path,name[n]); m_mp.SetUrl(name[n]); *pResult = 0; }


这样一个完整的推箱子游戏就完成了,其中我有以下经验:由于推箱子是多步骤型的,需要多次的刷新界面,而内存对游戏的速度有很大影响,所以在那些反复调用的函数如绘制箱子和盒子等函数中,不应该定义局部变量,如果定义要动态开辟,回收内存空间。游戏其实不难,大家有点耐心就肯定能做好的,也希望大家能作出更优秀的游戏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值