VisualC++游戏制作MFC版本

页面视觉

修改窗口大小

OnInitDialog

cpp 复制代码
CRect temprect(0,0,1640,1480);
CWnd::SetWindowPos(NULL,0,0,temprect.Width(),temprect.Height(),SWP_NOZORDER|SWP_NOMOVE);

修改鼠标指针样式

IDC_CURSOR

cpp 复制代码
BOOL CFinalProjectDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	//HCURSOR hcur = ::LoadCursor(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_CURSOR));
	// 能修改指针大小
	HCURSOR hcur = (HCURSOR)::LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_CURSOR), IMAGE_CURSOR, 48, 48, LR_COPYFROMRESOURCE);
	::SetCursor(hcur);
	return TRUE;
	return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

添加背景图片

OnPaint()函数,在else中进行修改。

1.首先注释掉CDialog::OnPaint()函数

CDialog是个对话框类,OnPaint()是成员函数,是对窗口进行重画,注释掉该语句否则会调用该语句不断重画,而不会执行下面添加的代码。注释掉该语句后最小化对话框后发现控件不可见,不过移动鼠标后又能看见。

2.添加代码

cpp 复制代码
else 
{
    CPaintDC dc(this);
    CRect rect;
    GetClientRect(&rect);
    CDC dcbmp;
    dcbmp.CreateCompatibleDC(&dc);
    CBitmap bmpbackground;
    bmpbackground.LoadBitmap(IDB_BITMAP1);//载入资源中的图片到CBitmap
    BITMAP mess_bmp;
    bmpbackground.GetBitmap(&mess_bmp);//获取当前位图信息
    dcbmp.SelectObject(&bmpbackground);
    dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcbmp, 0, 0, mess_bmp.bmWidth, mess_bmp.bmHeight, SRCCOPY);
}

添加背景音乐

先给需要的cpp文件加上这些头文件

cpp 复制代码
#include "resource.h"
#include <Windows.h>
#include <iostream>
#include "string.h"
#include <process.h> 
#include<iomanip>
#include <mmSystem.h>
#pragma comment (lib, "Winmm.lib");

在需要放音乐的地方

cpp 复制代码
PlaySound((LPCTSTR)IDR_WelcomeBacksound, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);

SND_FILENAME表示pszSound参数指定的是文件名, pszSound还可以指定资源、内存音乐、系统音乐等等

SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回

SND_SYNC:同步播放声音,在播放完后PlaySound函数才返回

SND_LOOP一遍遍的重复播放声音,必须与SND_ASYNC标志一块使用

音乐不断播放

cpp 复制代码
PlaySound("C://WINDOWS//Media//Windows XP关机.wav", 
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

不断播放,到达一个关卡的时候停止原来的音乐

cpp 复制代码
PlaySound(TEXT("C://WINDOWS//Media//Windows XP启动.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

PlaySound(TEXT("C://WINDOWS//Media//Windows XP关机.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

只能同时播放一段音乐,启动新的、旧的就被停了

只是停止目前的播放而不播放新音乐

只要给PlaySound的第一参数传递NULL就可以停止目前的播放了。

cpp 复制代码
PlaySound("C://WINDOWS//Media//Windows XP关机.wav",

NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

MessageBox(NULL,"点确定终止音乐","信息",MB_OK);

PlaySound(NULL,NULL,SND_FILENAME);

MessageBox(NULL,"音乐被终止","信息",MB_OK);

将位图作为按钮

PNG贴图按钮

cpp 复制代码
m_bitmapStart.LoadBitmap(IDB_BITMAP_START);
HBITMAP hBitmap = (HBITMAP)m_bitmapStart.GetSafeHandle();
m_buttonStart.SetBitmap(hBitmap);

程序的执行流程

程序的执行流程

立体图形

OpenGL

MFC+OPENGL配置+显示三维图形实现 旋转平移缩放+光照效果

使用MFC的CDC类绘制三维坐标系及球面函数
mfc + opengl Gizmo 3D Tool
基于MFC的无人机3D飞行姿态控制系统
3D model viewer
Simple_Cpp_3D_Plotter
3DGraphicsApp
3D House, Cube, Pyramid, Sphere and Spiral
dialog 3d model view
"三维矢量场生成程序" 开发文档
直接输入的 3DRudder 设备

游戏参考

GitHub - Johnsoncy123/-: 炮弹,火箭弹以及导弹的弹道仿真,包含3自由度弹道和6自由度弹道弹道,有控弹道与无控弹道均可以,C++/MFC和Matlab/Simulink仿真

相关推荐
眠りたいです37 分钟前
Qt音频播放器项目实践:文件过滤、元数据提取与动态歌词显示实现
c++·qt·ui·音视频·媒体·qt5·mime
汤永红1 小时前
week2-[循环嵌套]数位和为m倍数的数
c++·算法·信睡奥赛
人工干智能1 小时前
pygame的帧处理中,涉及键盘的有`pg.event.get()`与`pg.key.get_pressed()` ,二者有什么区别与联系?
python·游戏·计算机外设·pygame
1白天的黑夜13 小时前
前缀和-560.和为k的子数组-力扣(LeetCode)
c++·leetcode·前缀和
No0d1es10 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
DjangoJason12 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
weixin_3077791314 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法
EanoJiang15 小时前
类蜘蛛侠+刺客信条暗杀动作系统开发日志
游戏
蒋星熠16 小时前
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
网络·c++·人工智能·深度学习·性能优化·系统架构
★YUI★16 小时前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#