⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dudes.cpp

📁 一个三维打斗游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// dudes.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "3dwrap.h"
#include "dudes.h"
#include "personal.h"
#include "MainFrm.h"
#include "dudeDoc.h"
#include "dudeView.h"
#include "editfile.h"
#include "detail.h"
#include "gateway.h"
#include "dudehold.h"
#include "weaphold.h"
#include "levels.h"
#include "teleport.h"

/////////////////////////////////////////////////////////////////////////////
// DudesApp

#ifdef EDITOR
BEGIN_MESSAGE_MAP(DudesApp, CWinApp)
	//{{AFX_MSG_MAP(DudesApp)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
	ON_COMMAND(ID_PAUSE, OnPause)
	ON_COMMAND(ID_OPEN_FILE, OnOpenFile)
	ON_COMMAND(ID_SAVE, OnSave)
	ON_COMMAND(ID_SAVEAS, OnSaveas)
	ON_COMMAND(ID_EDIT, OnEdit)
	ON_COMMAND(ID_HELP, OnHelp)
	ON_COMMAND(ID_VIEW_AERIAL, OnViewAerial)
	ON_COMMAND(ID_VIEW_CIRCLING, OnViewCircling)
	ON_COMMAND(ID_VIEW_DUDEVIEW, OnViewDudeview)
	ON_COMMAND(ID_VIEW_LEFTSIDE, OnViewLeftside)
	ON_COMMAND(ID_VIEW_RIGHTSIDE, OnViewRightside)
	ON_COMMAND(ID_VIEW_HIGHANGLE, OnViewHighangle)
	ON_COMMAND(ID_DETAIL_CHANGEDETAIL, OnDetailChangedetail)
	ON_COMMAND(ID_EDIT_ADDSHAPE, OnEditAddshape)
	ON_COMMAND(ID_EDIT_SELECTCLOSESTSHAPE, OnEditSelectclosestshape)
	ON_COMMAND(ID_EDIT_MOVESELECTIONBACKWARD, OnEditMoveselectionbackward)
	ON_COMMAND(ID_EDIT_MOVESELECTIONDOWN, OnEditMoveselectiondown)
	ON_COMMAND(ID_EDIT_MOVESELECTIONFOWARD, OnEditMoveselectionfoward)
	ON_COMMAND(ID_EDIT_MOVESELECTIONLEFT, OnEditMoveselectionleft)
	ON_COMMAND(ID_EDIT_MOVESELECTIONRIGHT, OnEditMoveselectionright)
	ON_COMMAND(ID_EDIT_MOVESELECTIONUP, OnEditMoveselectionup)
	ON_COMMAND(ID_EDIT_ROTATESELECTION45DEGREESLEFT, OnEditRotateselection45degreesleft)
	ON_COMMAND(ID_EDIT_ROTATESELECTION45DEGREESRIGHT, OnEditRotateselection45degreesright)
	ON_COMMAND(ID_EDIT_ROTATESELECTION90DEGREESLEFT, OnEditRotateselection90degreesleft)
	ON_COMMAND(ID_EDIT_ROTATESELECTION90DEGREESRIGHT, OnEditRotateselection90degreesright)
	ON_COMMAND(ID_EDIT_DELETESELECTION, OnEditDeleteselection)
	ON_COMMAND(ID_FILE_OPENLANDSCAPE, OnFileOpenlandscape)
	ON_COMMAND(ID_FILE_SAVELANDSCAPE, OnFileSavelandscape)
	ON_COMMAND(ID_FILE_SAVELANDSCAPEAS, OnFileSavelandscapeas)
	ON_COMMAND(ID_EDIT_CHANGECOLORFORSELECTION, OnEditChangecolorforselection)
	ON_COMMAND(ID_EDIT_UNSELECTTHESELECTION, OnEditUnselecttheselection)
	ON_COMMAND(ID_EDIT_ADDNEWMAP, OnEditAddnewmap)
	ON_COMMAND(ID_VIEW_HIGHDUDEVIEW, OnViewHighdudeview)
	ON_COMMAND(ID_VIEW_LOWDUDEVIEW, OnViewLowdudeview)
	ON_COMMAND(ID_EDIT_ADDDUDE, OnEditAdddude)
	ON_COMMAND(ID_EDIT_ADDNEXTLEVELTELEPORTER, OnEditAddnextlevelteleporter)
	ON_COMMAND(ID_EDIT_ADDHANDHELDWEAPON_KNIFE, OnEditAddhandheldweaponKnife)
	ON_COMMAND(ID_EDIT_ADDHANDHELDWEAPON_SHIELD, OnEditAddhandheldweaponShield)
	ON_COMMAND(ID_EDIT_ADDHANDHELDWEAPON_SWORD, OnEditAddhandheldweaponSword)
	ON_COMMAND(ID_VIEW_BACKSIDE, OnViewBackside)
	ON_COMMAND(ID_VIEW_FRONTSIDE, OnViewFrontside)
	//}}AFX_MSG_MAP
	// Standard file based document commands
	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP()
#else
BEGIN_MESSAGE_MAP(DudesApp, CWinApp)                                //
	//{{AFX_MSG_MAP(DudesApp)                                       //
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)                            //
	ON_COMMAND(ID_PAUSE, OnPause)                                   //
	ON_COMMAND(ID_OPEN_FILE, OnOpenFile)                            //
	ON_COMMAND(ID_SAVE, OnSave)                                     //
	ON_COMMAND(ID_SAVEAS, OnSaveas)                                 //
	ON_COMMAND(ID_EDIT, OnEdit)                                     //
	ON_COMMAND(ID_HELP, OnHelp)                                     //
	ON_COMMAND(ID_VIEW_AERIAL, OnViewAerial)                        //
	ON_COMMAND(ID_VIEW_CIRCLING, OnViewCircling)                    //
	ON_COMMAND(ID_VIEW_DUDEVIEW, OnViewDudeview)                    //
	ON_COMMAND(ID_VIEW_LEFTSIDE, OnViewLeftside)                    //
	ON_COMMAND(ID_VIEW_RIGHTSIDE, OnViewRightside)                  //
	ON_COMMAND(ID_VIEW_HIGHANGLE, OnViewHighangle)                  //
	ON_COMMAND(ID_DETAIL_CHANGEDETAIL, OnDetailChangedetail)        //
	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)                     //
	ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)                   //
	ON_COMMAND(ID_VIEW_BACKSIDE, OnViewBackside)                    //
	ON_COMMAND(ID_VIEW_FRONTSIDE, OnViewFrontside)                  //
	//}}AFX_MSG_MAP                                                 //
	// Standard file based document commands                        //
	ON_COMMAND(ID_VIEW_HIGHDUDEVIEW, OnViewHighdudeview)            //
	ON_COMMAND(ID_VIEW_LOWDUDEVIEW, OnViewLowdudeview)              //
END_MESSAGE_MAP()                                                   //
#endif


/////////////////////////////////////////////////////////////////////////////
// DudesApp construction

DudesApp::DudesApp()
{
    srand((unsigned)time(NULL));
}

/////////////////////////////////////////////////////////////////////////////
// The one and only DudesApp object

DudesApp theApp;

/////////////////////////////////////////////////////////////////////////////
// DudesApp initialization

BOOL DudesApp::InitInstance()
{
	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	LoadStdProfileSettings(0);  // Load standard INI file options (including MRU)

	// Register the application's document templates.  Document templates
	//  serve as the connection between documents, frame windows and views.

	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(DudeDoc),
		RUNTIME_CLASS(MainFrm),       // main SDI frame window
		RUNTIME_CLASS(DudeView));
	AddDocTemplate(pDocTemplate);

	// Parse command line for standard shell commands, DDE, file open
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);

	// Dispatch commands specified on the command line
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CPauseDlg dialog used for App About

class CPauseDlg : public CDialog
{
public:
	CPauseDlg();

// Dialog Data
	//{{AFX_DATA(CPauseDlg)
	enum { IDD = IDD_PAUSE };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CPauseDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CPauseDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CPauseDlg::CPauseDlg() : CDialog(CPauseDlg::IDD)
{
	//{{AFX_DATA_INIT(CPauseDlg)
	//}}AFX_DATA_INIT
}

void CPauseDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPauseDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPauseDlg, CDialog)
	//{{AFX_MSG_MAP(CPauseDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void DudesApp::OnAppAbout()
{
   CDialog aboutDlg(IDD_ABOUTBOX);
   aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// DudesApp commands

void DudesApp::OnPause() 
{
	CPauseDlg pauseDlg;
    Game->PauseOn();
	pauseDlg.DoModal();
    Game->PauseOff();
}


void DudesApp::OnOpenFile() 
{
    CFileDialog dialog(TRUE, "DUD", "dudes\\*.dud",
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
        NULL, NULL);
    Game->PauseOn();
    dialog.m_ofn.Flags |= OFN_NOCHANGEDIR;
    if (dialog.DoModal() == IDOK)
    {
        Game->Hero()->load(dialog.GetPathName());
        Game->NewGame();
    }
    Game->PauseOff();
}

void DudesApp::OnSave() 
{
    Game->Hero()->save();
}

void DudesApp::OnSaveas() 
{
    CFileDialog dialog(FALSE, "DUD", Game->Hero()->filepath(),
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
        NULL, NULL);
    Game->PauseOn();
    dialog.m_ofn.Flags |= OFN_NOCHANGEDIR;
    if (dialog.DoModal() == IDOK)
        Game->Hero()->saveas(dialog.GetPathName());
    Game->PauseOff();
}

void DudesApp::OnEdit() 
{
    CEditFile dialog;
    Game->PauseOn();
    if (dialog.DoModal() == IDOK)
    {
        Game->SetHero(dialog.getvalues());
        Game->NewGame();
    }
    Game->PauseOff();
}

void DudesApp::OnHelp() 
{
    ::WinHelp(NULL, "3ddudes.hlp", HELP_FORCEFILE, 0);
}

void DudesApp::OnViewAerial() 
{
    Game->SetViewmode(AERIAL);
}

void DudesApp::OnViewCircling() 
{
    Game->SetViewmode(CIRCLING);
}

void DudesApp::OnViewDudeview() 
{
    Game->SetViewmode(DUDEVIEW);
}

void DudesApp::OnViewHighdudeview() 
{
    Game->SetViewmode(DUDEVIEWHIGH);
}

void DudesApp::OnViewLowdudeview() 
{
    Game->SetViewmode(DUDEVIEWLOW);
}

void DudesApp::OnViewLeftside() 
{
    Game->SetViewmode(LEFTSIDE);
}

void DudesApp::OnViewRightside() 
{
    Game->SetViewmode(RIGHTSIDE);
}

void DudesApp::OnViewHighangle() 
{
    Game->SetViewmode(HIGHANGLE);
}

void DudesApp::OnDetailChangedetail() 
{
    ChangeDetail dialog;
    Game->PauseOn();
    if (dialog.DoModal() == IDOK)
        Game->NewGame();
    Game->PauseOff();
}

void DudesApp::OnViewBackside() 
{
    Game->SetViewmode(BACKSIDE);
}

void DudesApp::OnViewFrontside() 
{
    Game->SetViewmode(FRONTSIDE);
}

#ifdef EDITOR
void DudesApp::OnEditAddshape() 
{
    CFileDialog dialog(TRUE, "IMG", (CString)"landscpe\\*.img",
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
        NULL, NULL);
    Game->PauseOn();
    dialog.m_ofn.Flags |= OFN_NOCHANGEDIR;
    if (dialog.DoModal() == IDOK)
    {
        if (Game->LevelPtr()->selection)
        {
            Game->LevelPtr()->selection->setcolor(Game->LevelPtr()->selectioncolor);
            Game->Landscapes()->AddLSEntry(Game->LevelPtr()->selection);
            Game->LevelPtr()->selection = 0;
        }
        Game->NewLandscape((CString) dialog.GetPathName());
        coordinate ctmp = Game->Aim();
        ctmp.sety(0.0f);
        Game->LastLandscape()->setto(ctmp);
    }
    Game->PauseOff();
}

void DudesApp::OnEditSelectclosestshape() 
{
    qentry *tmp;
    view    tmploc;
    float   tmpval;
    float   tmpdist = 100.0f;
    qentry *newsel = 0;
    tmp = (qentry *) Game->DrawQueue()->first(LANDSCAPE |
                                     DUDEHOLDER |
                                     WEAPONHOLDER |
                                     TELEPORTER);
    if (Game->LevelPtr()->selection)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -