// 地图编辑器Dlg.cpp : implementation file
/*
[学VC、编游戏]
编著、程序设计:唐明理 2004.7
E-mail: cqtml@163.com
*/
#include "stdafx.h"
#include "地图编辑器.h"
#include "地图编辑器Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CString new_scr0;
extern int new_js;
extern CString new_map;
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_SCROLLBAR1, m_hscroll);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
ON_WM_HSCROLL()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_WM_RBUTTONDOWN()
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
MoveWindow(0,0,SCRWI,SCRHE);
CenterWindow();
m_game.initedit();
m_game.loaddata();
fidtim=0;
down=0;dowx=0;dowy=0;
no=-1;
dorj=0;
m_game.edi=0;
int sw=m_game.mapw,sh=m_game.maph;
SetDlgItemText(IDC_STATIC8,m_game.dir);
GetDlgItem(IDC_STATIC0)->MoveWindow(0,8,WIDTH+4,HEIGHT+4,TRUE);
GetDlgItem(IDC_STATIC1)->MoveWindow(WIDTH+6-2,8,sw+4,sh+4,TRUE);
GetDlgItem(IDC_STATIC6)->MoveWindow(WIDTH+6,sh+15,sw,30,TRUE);
GetDlgItem(IDC_STATIC3)->MoveWindow(2,SCRHE-26,280,18,TRUE);
GetDlgItem(IDC_STATIC4)->MoveWindow(2+280,SCRHE-26,280,18,TRUE);
GetDlgItem(IDC_STATIC5)->MoveWindow(2+280*2,SCRHE-26,250,18,TRUE);
GetDlgItem(IDOK) ->MoveWindow(WIDTH+6,sh+50,sw,20,TRUE);
GetDlgItem(IDC_BUTTON3)->MoveWindow(WIDTH+6,sh+75,sw,20,TRUE);
GetDlgItem(IDC_BUTTON1)->MoveWindow(WIDTH+6,sh+100,sw,20,TRUE);
GetDlgItem(IDC_BUTTON4)->MoveWindow(WIDTH+65,SCRHE-104, 80,25,TRUE);
GetDlgItem(IDC_BUTTON5)->MoveWindow(WIDTH+65,SCRHE-104+28,80,25,TRUE);
GetDlgItem(IDC_STATIC2)->MoveWindow(0,SCRHE-104,WIDTH+4,70,TRUE);
GetDlgItem(IDC_SCROLLBAR1)->MoveWindow(2,SCRHE-52,WIDTH,16,TRUE);
GetDlgItem(IDC_STATIC7)->MoveWindow(WIDTH+6, SCRHE-104,55,54,TRUE);
GetDlgItem(IDC_STATIC8)->MoveWindow(WIDTH+6,sh+157,sw,sh,TRUE);
GetDlgItem(IDC_STATIC9)->MoveWindow(WIDTH+6,2*sh+162,sw,sh,TRUE);
GetDlgItem(IDC_SCROLLBAR1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
m_hscroll.SetScrollRange(0,85);
m_hscroll.SetScrollPos(m_game.tml);
DWORD dwExStyle=GetExStyle();
dwExStyle =(~WS_EX_APPWINDOW & dwExStyle) | WS_EX_TOOLWINDOW;
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,dwExStyle);
srand((unsigned)time(NULL));
SetTimer(3,100,NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyDlg::OnPaint()
{ CDialog::OnPaint();
}
HCURSOR CMyDlg::OnQueryDragIcon()
{ return (HCURSOR) m_hIcon;
}
void CMyDlg::OnCancel()
{ KillTimer(1);KillTimer(2);
if( ::MessageBox(GetSafeHwnd(), "退出程序吗?","请您确定!",
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 ) == IDYES )
{m_game.exitedit();
CDialog::OnCancel();
}
else {SetTimer(1,TIMER,NULL);SetTimer(2,TIMER*2,NULL);}
}
void CMyDlg::OnTimer(UINT nIDEvent)
{ if(nIDEvent==1)
{tim=timeGetTime();
CClientDC dc(this);
int i;
m_game.mlmap();
for(i=0;i<m_game.rs;i++)
m_game.Alphasetobj(i,0);
for(i=0;i<m_game.rs;i++)
{m_game.Alphasetobj(i,1);
m_game.lookit(i);
}
if(m_game.edi==1) m_game.showline();
if(m_game.rs>1) m_game.smlmap(dc.m_hDC);
BitBlt(dc.m_hDC,2,10,WIDTH,HEIGHT,m_game.BkDC1,0,0,SRCCOPY);
tim=timeGetTime()-tim;
}
if(nIDEvent==2)
{char cc[255],c1[255];
int q=m_game.mann;
sprintf(cc,"地图[X:%4d Y:%4d] 人[x:%4d y:%4d]",
m_game.scrx,m_game.scry,m_game.man[q].xix,m_game.man[q].xiy);
SetDlgItemText(IDC_STATIC5, cc);
sprintf(cc,"[显示区对象数:%3d] [%3dms/屏] [CPU占用%3d%]",m_game.mans,tim,tim*100/TIMER);
SetDlgItemText(IDC_STATIC4, cc);
switch(fidtim)
{case -1: {strcpy(c1,"障碍点"); break;}
case -2: {strcpy(c1,"起始点"); break;}
case -3: {strcpy(c1,"无路"); break;}
case -4: {strcpy(c1,"搜索忙"); break;}
case -5: {strcpy(c1,"太远了"); break;}
case -10: {strcpy(c1,"左上边界"); break;}
case -20: {strcpy(c1,"右下边界"); break;}
default: {sprintf(c1,"搜索时间:%dms",fidtim);}
}
sprintf(cc,"地图%dX%d 障碍%dX%d %s,%d",
WIDTH*m_game.SCRP0,HEIGHT*m_game.SCRP0,
WIDTH*m_game.SCRP0/GX,HEIGHT*m_game.SCRP0/GY,c1,m_game.man[q].pk);
SetDlgItemText(IDC_STATIC3, cc);
m_game.randxy();
int r=0,s=0,j=0,k=0;
for(int i=0;i<m_game.rs;i++)
{if(m_game.man[i].lb==0) r++;
if(m_game.man[i].lb==1) s++;
if(m_game.man[i].lb==2) j++;
if(m_game.man[i].zd==1) k++;
}
sprintf(cc,"对象数[%d]\r\n人[%d]\r\n兽[%d]\r\n景[%d]\r\n",m_game.rs,r,s,j);
if(k<1) k=1;
if(k>1) sprintf(c1,"%s\r\n有 %d 只动物向你进攻",cc,k-1);
else strcpy(c1,cc);
SetDlgItemText(IDC_STATIC9, c1);
if(MCIWndGetPosition(hMCI) >=MCIWndGetLength(hMCI)) MCIWndPlay(hMCI);
}
if(nIDEvent==3)
{KillTimer(3);
CString name;
CString filt="dat (*.dat)|*.dat";
CFileDialog fileDlg(TRUE,"*.dat","*.dat",NULL,filt,this);
fileDlg.m_ofn.Flags|=OFN_FILEMUSTEXIST;
fileDlg.m_ofn.lpstrTitle="调入地图文件";
if(fileDlg.DoModal()!=IDOK) goto aa;
name=fileDlg.GetPathName();
m_game.loadmap(name);
m_game.loadza (name);
m_game.getsmap();
filt=fileDlg.GetFileName();
name=fileDlg.GetPathName();
name=name.Left(lstrlen(name)-lstrlen(filt));
char cc[255];
sprintf(cc,"%sMusic1.mid",name);
hMCI = MCIWndCreate(NULL, NULL,WS_POPUP|WS_VISIBLE|
MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU,
cc);
if(hMCI!=NULL) MCIWndPlay(hMCI);
SetTimer(1,TIMER,NULL);
SetTimer(2,TIMER*2,NULL);
}
aa: CDialog::OnTimer(nIDEvent);
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{ CRect lpRect0;
GetWindowRect(&lpRect0);
int x0=pMsg->pt.x-lpRect0.left;
int y0=pMsg->pt.y-lpRect0.top;
if(m_game.edi==1)
{ if(pMsg->message==WM_KEYDOWN)
{ int key=pMsg->wParam;
if(key==46) m_game.Delete();
}
if(pMsg->message==WM_LBUTTONDBLCLK)
{m_game.Insert(no,dorj);}
}
if(m_game.rs>0)
{m_game.movesmap(x0,y0);
}
return CDialog::PreTranslateMessage(pMsg);
}
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{ int x=point.x,y=point.y;
if(y<10)
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
CClientDC dc(this);
fidtim=m_game.leftdown(dc.m_hDC,x,y);
SetCursor(m_Cur);
if(m_game.edi==1)
{CString cc;
down=1;
dowx=x;dowy=y;
if(x>2&&x<WIDTH&&y>HEIGHT+18&&y<HEIGHT+18+50)
{no=(x-2)/50+m_game.tml;
m_game.getobj(dc.m_hDC,no);
SetDlgItemText(IDC_STATIC8,"提示:\r\n双击选择框的对象,可以加入对象到当前显示区。");
}
else
{m_game.getno(x,y);
SetDlgItemText(IDC_STATIC8,"提示:\r\n可以移动选中的对象,或按DEL键删除它。");
}
return;
}
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
{ down=dowx=dowy=0;
SetCursor(m_Cur);
CDialog::OnLButtonUp(nFlags, point);
}
void CMyDlg::OnMouseMove(UINT nFlags
- 1
- 2
- 3
- 4
- 5
- 6
前往页