提交 f48affc6 编辑于 作者: CjhGm's avatar CjhGm
浏览文件

be patient please

上级 174c839e
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
#TargetFrameworkVersion=v4.0:PlatformToolSet=v142:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0
Debug|Win32|C:\Users\tf\source\repos\MFCApplication4\|
Debug|Win32|C:\Users\tf\source\repos\Aircraft-Battle\MFCApplication4\|
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
文件被 .gitattributes 条目压制或文件的编码不受支持。
......@@ -132,6 +132,7 @@ BOOL CMFCApplication4App::InitInstance()
// 主窗口已初始化,因此显示它并对其进行更新
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
pMainFrame->SetWindowText(_T("MFC APP"));
return TRUE;
}
......
文件被 .gitattributes 条目压制或文件的编码不受支持。
......@@ -187,6 +187,7 @@
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="stdafx.h" />
<ClInclude Include="CGameObject.h" />
<ClInclude Include="ChildFrm.h" />
<ClInclude Include="CMyplane.h" />
......@@ -223,6 +224,8 @@
<None Include="res\MFCApplication4.rc2" />
</ItemGroup>
<ItemGroup>
<Image Include="..\..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me.bmp" />
<Image Include="..\..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me1.bmp" />
<Image Include="..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me.bmp" />
<Image Include="..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me1.bmp" />
<Image Include="res\MFCApplication4.ico" />
......
......@@ -51,6 +51,9 @@
<ClInclude Include="Scene.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="stdafx.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="MFCApplication4.cpp">
......@@ -107,5 +110,11 @@
<Image Include="..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me1.bmp">
<Filter>资源文件</Filter>
</Image>
<Image Include="..\..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me.bmp">
<Filter>资源文件</Filter>
</Image>
<Image Include="..\..\..\..\..\Desktop\PlaneWar-MFC-master\PlaneWar-MFC-master\PlaneWar\image\me1.bmp">
<Filter>资源文件</Filter>
</Image>
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -30,6 +30,7 @@ BEGIN_MESSAGE_MAP(CMFCApplication4View, CView)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_CREATE()
ON_WM_TIMER()
END_MESSAGE_MAP()
// CMFCApplication4View 构造/析构
......@@ -117,7 +118,7 @@ int CMFCApplication4View::OnCreate(LPCREATESTRUCT lpCreateStruct)
//-----------初始化工作------------
//加载游戏对象图片
CMyplane::LoadImage();
/*CMyPlane::LoadImageProtect();
CEnemy::LoadImage();
......@@ -139,9 +140,9 @@ int CMFCApplication4View::OnCreate(LPCREATESTRUCT lpCreateStruct)
AfxMessageBox(L"图片资源加载失败");
exit(0);
}
/*
//参数初始化
myplane = new CMyPlane(FALSE);
//myplane = new CMyplane(FALSE);
isBoss = FALSE;
speed = DEFAULT_SPEED;
myLife = DEFAULT_LIFE;
......@@ -155,17 +156,131 @@ int CMFCApplication4View::OnCreate(LPCREATESTRUCT lpCreateStruct)
isPause = FALSE;
magicCount = 0;
bloodExist = FALSE;
bossBlood = BOSS_LIFE;
//bossBlood = BOSS_LIFE;
isProtect = FALSE;
isUpdate = FALSE;
test = FALSE;
isStop = FALSE;
boss = NULL;
//boss = NULL;
isStarted = FALSE;
SetTimer(4, 40, NULL);//背景滚动定时器
SetMyTimer();
*/
return 0;
//SetTimer(4, 40, NULL);//背景滚动定时器
//SetMyTimer();
return 0;
}
//设置计时器
void CMFCApplication4View::SetMyTimer()
{
SetTimer(1, 17, NULL);//刷新界面定时器
SetTimer(2, 400 - passNum * 30, NULL);//产生敌机定时器
SetTimer(3, 2000 - passNum * 100, NULL);//产生敌机炮弹频率
SetTimer(5, 2000, NULL);//控制魔法值变化频率
}
void CMFCApplication4View::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//双缓冲
CDC* pDC = GetDC();
if (pDC == NULL) {
CView::OnTimer(nIDEvent);
return;
}
//获得客户区矩形区域
GetClientRect(&rect);
//内存缓冲CDC
CDC cdc;
//内存中承载临时图像的缓冲位图
CBitmap* cacheBitmap = new CBitmap;
//用当前设备CDC初始化缓冲CDC
cdc.CreateCompatibleDC(pDC);
//绑定pDC和缓冲位图的关系,cdc先输出到缓冲位图中,输出完毕之后再一次性将缓冲位图输出到屏幕
cacheBitmap->CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
//替换cdc原本的缓冲区为缓冲位图,这样cdc输出的内容就写到了缓冲位图中
CBitmap* pOldBit = cdc.SelectObject(cacheBitmap);
//输出背景
if (isStarted == FALSE)
scene.StickScene(&cdc, -1, rect);
else
scene.StickScene(&cdc, passNum, rect);
if (nIDEvent == 4) {
//滚动背景
scene.MoveBg();
}
//欢迎界面
if (isStarted == FALSE) {
startIMG.Draw(&cdc, 0, CPoint(rect.right / 2/* - 173*/, 100), ILD_TRANSPARENT);
HFONT textFont;
textFont = CreateFont(12, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 10, 0);
cdc.SelectObject(textFont);
cdc.SetTextColor(RGB(128, 128, 0));
//设置透明背景
cdc.SetBkMode(TRANSPARENT);
cdc.TextOutW(rect.right / 2 - 120, 210, _T("方向控制:方向键、ASDW、鼠标"));
cdc.TextOutW(rect.right / 2 - 120, 225, _T("射击:空格键、鼠标左键"));
cdc.TextOutW(rect.right / 2 - 120, 240, _T("暂停:Z键"));
cdc.TextOutW(rect.right / 2 - 120, 255, _T("大招:X键"));
cdc.TextOutW(rect.right / 2 - 120, 270, _T("防护罩:C键"));
cdc.TextOutW(rect.right / 2 - 120, 285, _T("战机升级:V键"));
cdc.TextOutW(rect.right / 2 - 120, 300, _T("无敌模式:Y键"));
cdc.TextOutW(rect.right / 2 - 120, 315, _T("初始生命值:10"));
cdc.TextOutW(rect.right / 2 - 120, 330, _T("初始魔法值:0"));
cdc.TextOutW(rect.right / 2 - 120, 345, _T("敌机生命值:2"));
cdc.TextOutW(rect.right / 2 - 120, 360, _T("消灭一个敌机加1分,如果分数达到要求即可进入Boss模式,打赢Boss即可进入下一关。"));
cdc.TextOutW(rect.right / 2 - 120, 375, _T("魔法值随着游戏进程增加,可通过使用魔法值使用防护罩、战机升级、战机大招的使用。"));
cdc.TextOutW(rect.right / 2 - 120, 390, _T("游戏过程中会有一定程度的血包出现以恢复生命值。"));
cdc.TextOutW(rect.right / 2 - 120, 405, _T("随着关卡增多,敌机、炮弹速度和数量均增加,通过10关即可通关!"));
HFONT tipFont;
tipFont = CreateFont(24, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 10, 0);
cdc.SelectObject(tipFont);
cdc.SetTextColor(RGB(255, 0, 0));
cdc.TextOutW(rect.right / 2 - 120, 420, _T("点击鼠标左键或空格键开始游戏"));
//将二级缓冲cdc中的数据推送到一级级缓冲pDC中,即输出到屏幕中
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &cdc, 0, 0, SRCCOPY);
//释放二级cdc
cdc.DeleteDC();
//释放缓冲位图
cacheBitmap->DeleteObject();
//释放一级pDC
ReleaseDC(pDC);
CView::OnTimer(nIDEvent);
return;
}
//显示暂停信息
if (myplane != NULL && isPause == TRUE && isStop == FALSE) {
HFONT textFont;
textFont = CreateFont(24, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 10, 0);
cdc.SelectObject(textFont);
cdc.SetTextColor(RGB(255, 0, 0));
//设置透明背景
cdc.SetBkMode(TRANSPARENT);
cdc.TextOutW(rect.right / 2 - 10, 150, _T("暂停"));
////将二级缓冲cdc中的数据推送到一级级缓冲pDC中,即输出到屏幕中
//pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &cdc, 0, 0, SRCCOPY);
////释放二级cdc
//cdc.DeleteDC();
////释放缓冲位图
//cacheBitmap->DeleteObject();
////释放一级pDC
//ReleaseDC(pDC);
//CView::OnTimer(nIDEvent);
//return;
}
//将二级缓冲cdc中的数据推送到一级级缓冲pDC中,即输出到屏幕中
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &cdc, 0, 0, SRCCOPY);
//释放二级cdc
cdc.DeleteDC();
//释放缓冲位图
cacheBitmap->DeleteObject();
//释放一级pDC
ReleaseDC(pDC);
CView::OnTimer(nIDEvent);
}
......@@ -5,6 +5,25 @@
#pragma once
#include "Scene.h"
#include "CMyplane.h"
//默认战机速度
#define DEFAULT_SPEED 30
//默认战机生命
#define DEFAULT_LIFE 10
//默认战机命条数
#define DEFAULT_LIFE_COUNT 3
//默认关卡
#define DEFAULT_PASS 1
//两个战机子弹间隔
#define BOMB_DISTANCE 35
//方向键步长
#define STEP 30
//过关得分数
#define PASS_SCORE 20
//标记位
#define FLAG_RESTART 2
#define FLAG_STOP 3
class CMFCApplication4View : public CView
{
......@@ -15,10 +34,54 @@ protected: // 仅从序列化创建
// 特性
public:
CMFCApplication4Doc* GetDocument() const;
Scene scene;//场景
Scene scene; //场景
//创建各游戏对象
CMyplane* myplane;
//CEnemy* enemy;
//CBoss* boss;
//CBomb* bomb;
//CBall* ball;
//CExplosion* explosion;
//CBlood* blood;
//创建存储游戏对象的对象链表
CObList enemyList;
CObList meList;
CObList bombList;
CObList ballList;
CObList explosionList;
CObList bloodList;
CRect rect;//窗口屏幕矩形
int speed;//战机的速度,方向键控制
int myLife;//为战机设置生命值
int lifeNum;//战机命条数
int myScore;//战机的得分
int passScore;//当前关卡得分数
int lifeCount;//血包产生控制参数
BOOL bloodExist;//标记屏幕中是否存在血包
int magicCount;//魔法值,控制能否发大招
int bossBlood;//Boss血量
int passNum;//记录当前关卡
int isPass;//是否通关的标志
int isPause;//是否暂停
BOOL isBoss;//标记是否进入Boss
BOOL bossLoaded;//标记Boss出场完成
BOOL isProtect;//标记是否开启防护罩
BOOL isUpdate;//标记战机是否升级
BOOL test;//无敌模式参数
BOOL isStop;//标记游戏停止
BOOL isStarted;//标记欢迎界面是否加载完成
CImageList startIMG;
// 操作
public:
//设置计时器
void SetMyTimer();
// 重写
public:
......@@ -44,6 +107,7 @@ protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT_PTR nIDEvent);
};
#ifndef _DEBUG // MFCApplication4View.cpp 中的调试版本
......
......@@ -5,6 +5,7 @@
#include "pch.h"
#include "framework.h"
#include "MFCApplication4.h"
#include "afxframewndex.h"
#include "MainFrm.h"
......@@ -28,6 +29,11 @@ static UINT indicators[] =
ID_INDICATOR_SCRL,
};
const int iMaxUserToolbars = 10;
const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
// CMainFrame 构造/析构
CMainFrame::CMainFrame() noexcept
......@@ -44,32 +50,38 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
// 去掉菜单栏
SetMenu(NULL);
if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
//设置标题栏图标
HICON m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: 如果不需要可停靠工具栏,则删除这三行
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
//return 0;
//if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
// !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
//{
// TRACE0("未能创建工具栏\n");
// return -1; // 未能创建
//}
//if (!m_wndStatusBar.Create(this))
//{
// TRACE0("未能创建状态栏\n");
// return -1; // 未能创建
//}
//m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
if (!CMDIFrameWnd::PreCreateWindow(cs))
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
......@@ -77,6 +89,8 @@ BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
return TRUE;
}
// CMainFrame 诊断
#ifdef _DEBUG
......@@ -94,3 +108,35 @@ void CMainFrame::Dump(CDumpContext& dc) const
// CMainFrame 消息处理程序
/*
BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
// 基类将执行真正的工作
if (!CMainFrame::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
{
return FALSE;
}
// 为所有用户工具栏启用自定义按钮
BOOL bNameValid;
CString strCustomize;
bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
ASSERT(bNameValid);
for (int i = 0; i < iMaxUserToolbars; i++)
{
CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);
if (pUserToolbar != NULL)
{
pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
}
}
return TRUE;
}
*/
\ No newline at end of file
......@@ -37,6 +37,8 @@ protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
public:
//virtual BOOL LoadFrame(UINT nIDResource, DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, CWnd* pParentWnd = NULL, CCreateContext* pContext = NULL);
};
支持 Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册