c++语言,用windows的mfc制作游戏,星悦麻将 可玩性最高高吗,想实现精美画面,动画效果,该怎么办

[VC++游戏开发]用C++来架构一个适合windows游戏编程的框架——取名为BCF
众所周知:
MFC适合桌面应用的开发,而不太适合windows游戏,因为它封装了很多我们游戏编程中所不需要的东西,这些东西在一定程度上都影响着GDI的效率,略显冗余了。但是MFC有丰富的类库,这在写代码时又能提供很大的方便&&
再来看看Win32 SDK,接近底层,效率肯定好,但是却没有MFC那样的类库,写代码着实不太方便&&
这样一想,我就有个问题了:在接下来的游戏效果模拟中,是继续使用MFC,还是专用Win32SDK呢?或者还有什么更好的方法?&&
这么一想,嘿,一个idea就诞生了:用C++来自行架构一个适合windows游戏编程的框架,使它既能使用MFC类库,效率又更好
这个框架如何架构呢?请继续下面的内容吧^_^
二、架构的一个简易框架,MFC类库、效率都能兼顾
我的架构思路:
1&将窗口创建过程(设计窗口类结构体实例、注册窗口类、创建窗口、显示窗口、消息循环)以及消息响应函数都封装在一个名为CCWindow的C++类中
2&在Main.cpp源文件中就实现WinMain以及窗口过程
由于我的开源框架的源代码中有详尽的注释,F话就不多说了,直接贴上源代码:
StdAfx.h头文件:这是使用MFC类库所必须添加的头文件
* StdAfx.h
* 包含一些用到的类库所在的头文件
#pragma once
#define _AFXDLL//动态添加MFC类库
#include //定义最高版本windows
// MFC封装的核心和标准组件
//CImage类包含的头文件
//播放媒体(音乐)所需包含的头文件
#pragma comment(lib, winmm.lib)//添加媒体库
#pragma comment(linker,/manifestdependency: ype='win32'
name='Microsoft.Windows.Common-Controls'
version='6.0.0.0' processorArchitecture='x86'
publicKeyToken='ccf1df' language='*')
CWindow.h头文件(CCWindow类的定义)
#pragma once
#includeStdAfx.h
class CCWindow
//==================成员====================
WNDCLASS m_ //窗口类结构体实例
//窗口句柄
//背景图片
//窗口户区大小
//=============窗口创建相关的成员函数=============
//设计窗口类
bool InitWndClass(
HINSTANCE hInstance, //实例句柄
wpWndProc, //窗口过程
lpWndName, //窗口名称
lpIconPath); //图标路径
//设计窗口类
bool InitWndClass(WNDCLASS);
//注册窗口类
ATOM RegisterWndClass();
//创建窗口(默认居中)
void Create(
LPCTSTR lpClassName, //窗口类名称
LPCTSTR lpWndName, //窗口标题名称
DWORD dwStyle,
//窗口风格
//窗口宽度
//窗口高度
//显示窗口
void Show(int);
//一般的消息循环
int RunMsgLoop();
//更高效的消息循环
int RunMsgLoop(void (*Display)(), int);
//================消息响应函数================
//注:在这里添加需要响应的消息处理函数的声明
//构造函数
CCWindow(void);
//析构函数
~CCWindow(void);
CWindow.cpp(CCWindow类的成员函数实现)
#include CWindow.h
CCWindow::CCWindow(void)
CCWindow::~CCWindow(void)
/*------------------------------
*功能:设计窗口类
*@hInstance: 实例句柄
*@WndProc:
*@WndName:
*@IconPath:
-----------------------------*/
bool CCWindow::InitWndClass(HINSTANCE hInstance,//实例句柄
WNDPROC WndProc, //窗口过程
LPCTSTR WndName, //窗口名称
LPCTSTR IconPath) //图标路径
ZeroMemory(&m_wndclass, sizeof(WNDCLASS));
m_wndclass.style
= CS_HREDRAW | CS_VREDRAW;
m_wndclass.lpfnWndProc
m_wndclass.hInstance
m_wndclass.cbClsExtra
m_wndclass.cbWndExtra
m_wndclass.hIcon
static_cast(LoadImage(NULL, IconPath, IMAGE_ICON,
0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE));
m_wndclass.hCursor
= ::LoadCursor(NULL, IDC_ARROW);
m_wndclass.hbrBackground =
static_cast(GetStockObject(WHITE_BRUSH));
m_wndclass.lpszMenuName
m_wndclass.lpszClassName = WndN
/*--------------------------------------
设计窗口类
--------------------------------------*/
bool CCWindow::InitWndClass(WNDCLASS wndclass)
m_wndclass =
/*--------------------------------------
注册窗口类
--------------------------------------*/
ATOM CCWindow::RegisterWndClass()
return RegisterClass(&m_wndclass);
/*--------------------------------------
--------------------------------------*/
void CCWindow::Create(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int nWidth,
int nHeight)
//获取屏幕宽度和高度
int screenW = GetSystemMetrics(SM_CXSCREEN);
int screenH = GetSystemMetrics(SM_CYSCREEN);
//创建并居中显示窗口
m_hwnd = CreateWindow(lpClassName, lpWindowName, dwStyle,
(screenW-nWidth)/2, (screenH-nHeight)/2,
nWidth, nHeight, NULL, NULL,
m_wndclass.hInstance, NULL);
/*--------------------------------------
--------------------------------------*/
void CCWindow::Show(int nCmdShow)
ShowWindow(m_hwnd, nCmdShow);
//UpdateWindow(...)更新窗口(可以省略)
/*--------------------------------------
一般的消息循环
GetMessage()
--------------------------------------*/
int CCWindow::RunMsgLoop()
ZeroMemory(&msg, sizeof(MSG));
while(GetMessage(&msg, NULL, 0, 0))
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wP
/*--------------------------------------
消息循环(更好的消息循环)
PeekMessage()
--------------------------------------*/
int CCWindow::RunMsgLoop(void (*Display)(), int interval)
ZeroMemory(&msg, sizeof(MSG));
//获取运行到此处时的时间
int last = GetTickCount();
//如果不是退出消息
while(msg.message != WM_QUIT)
//如果有消息
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
TranslateMessage(&msg);
DispatchMessage(&msg);
//否则, 空闲的时候执行响应函数(大多数是绘制函数)
//如果窗口客户区大小不为0就是显示(有可能窗口是在最小化)
if(m_rect.Width() &&
m_rect.Height())
Display();
Sleep(interval);
return msg.wP
//----------------------------------------------------------
消息响应函数
//----------------------------------------------------------
//注:在这里添加需要响应的消息处理函数的实现
Main.h头文件(主程序头文件)
* 主程序所需包含的头文件、宏定义、声明等
#pragma once
#include CWindow.h
#define WNDNAME 【VC++游戏开发】窗口名称//窗口名称
#define WNDWIDTH 800//窗口宽度
#define WNDHEIGHT 600//窗口高度
//窗口关联对象:全局对象
//窗口过程
LRESULT CALLBACK WndProc(HWND, UINT, ARAM, LPARAM);
Main.cpp(主程序代码:负责WinMain、WndProc)
#include Main.h
显示函数:绘制随机位置、大小、颜色的矩形
注:由于调用很频繁,故设为内联函数
inline void Display()
//做响应的操作
//==============WinMain=======================
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
//设计窗口类
CString iconPath = ;//图标的路径(这里没有, 需自己设定)
wnd.InitWndClass(hInstance, WndProc, WNDNAME, iconPath);
//注册窗口类
if(!wnd.RegisterWndClass())
::AfxMessageBox(RegisterWndClass() Failed);
DWORD style = WS_OVERLAPPEDWINDOW &
~(WS_THICKFRAME | WS_MAXIMIZEBOX);
//创建窗口并居中窗口
wnd.Create(WNDNAME, WNDNAME, style,
WNDWIDTH, WNDHEIGHT);
//显示窗口
wnd.Show(nCmdShow);
/*进入消息循环
1. 使用更好的消息循环 如:wnd.RunMsgLoop(Display, 100)
2. 使用一般的消息循环 如:wnd.RunMsgLoop()
return wnd.RunMsgLoop();
//================窗口过程:处理消息=================
LRESULT CALLBACK WndProc(
HWND hwnd,
WPARAM wParam,
LPARAM lParam)
在这里添加消息映射代码(switch-case语句)
switch(msg)
case WM_CREATE:
wnd.OnCreate(); //窗口建立消息:进行一些初始化操作
return DefWindowProc(hwnd, msg, wParam, lParam);
下面,我简单地介绍一下这个框架的使用方法:
1&创建一个空项目(我这里是VS2010)
2&将这3个头文件以及2个cpp源文件添加到创建好的项目中
3&在 CWindow.h中添加消息响应函数(CCWindow类的成员函数)的声明
如:(名称还是遵循MFC的命名方式)
//================消息响应函数================
//注:在这里添加需要响应的消息处理函数的声明
void OnCreate();;
4&CWindow.cpp中实现这些消息响应函数
5&在Main.cpp的窗口过程函数中调用响应的消息响应函数
switch(msg)
case WM_CREATE:
wnd.OnCreate(); //窗口建立消息:进行一些初始化操作
我还是为这个框架取一个艺名儿,名为:BCF
BC:我的csdn博客ID缩写&&BlueCoder
F:frame&&框架的意思
合起来就是BlueCoder的框架,当然,大家都可以用,只要你愿意,我也乐意^_^
三、一个简单的实例,教你熟悉这个框架
我做了一个简单的实例,来帮助大家熟悉这个框架
这个实例呢,就是简单的贴图、贴文字,不过你会看到有趣的部分:我使用了诸如CPaintDC、CFont、CString、CImage、CRect等MFC类库。对,没错,这就是这个框架的一大特点:可以使用MFC类库,这就方便了我们写代码
由于没什么复杂的原理,我就按照步骤贴出核心代码哈:
(1)项目、头文件、源文件已经相继处理好了
(2)在CCWindow类中添加如下的消息响应成员函数:
//================消息响应函数================
//注:在这里添加需要响应的消息处理函数
//处理WM_CREATE消息
void OnCreate();
//处理WM_SIZE消息
void OnSize();
//处理WM_PAINT消息
void OnPaint();
//处理WM_KEYDOWN消息
void OnKeyDown(WPARAM);
//处理WM_DESTROY消息
void OnDestroy();
(3)这些消息响应函数的实现:
//----------------------------------------------------------
消息响应函数
//----------------------------------------------------------
//窗口建立消息:进行一些初始化操作
void CCWindow::OnCreate()
m_img.Load(res\bg.jpg);
if(m_img.IsNull())
AfxMessageBox(背景图片加载失败!);
mciSendString(open res\bgm.mp3 alias bgm, 0, 0, 0);
mciSendString(play bgm repeat, 0, 0, 0);
//窗口size消息:获取窗口大小
void CCWindow::OnSize()
::GetClientRect(m_hwnd, m_rect);
//窗口Paint消息:绘制窗口客户区
void CCWindow::OnPaint()
CPaintDC dc(CWnd::FromHandle(m_hwnd));
//绘制背景图片
dc.SetStretchBltMode(COLORONCOLOR);
m_img.StretchBlt(dc, 0, 0, m_rect.Width(), m_rect.Height(),
0, 0, m_img.GetWidth(), m_img.GetHeight(), SRCCOPY);
//绘制文字
font.CreatePointFont(150, 微软雅黑);
dc.SelectObject(font);
CString str1 = 给自己的梦想一次破茧而出的机会,创造属于自己的幸福;
CString str2 = BlueCoder(黎小华);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(163, 21, 21));
dc.TextOut(130, 220, str1);
dc.SetTextColor(RGB(21, 155, 230));
dc.TextOut(500, 300, str2);
//按键消息:按下Esc键退出程序
void CCWindow::OnKeyDown(WPARAM wParam)
if(wParam == VK_ESCAPE)
DestroyWindow(m_hwnd);
//窗口销毁消息:释放内存
void CCWindow::OnDestroy()
m_img.Destroy();
mciSendString(close bgm, 0, 0, 0);
PostQuitMessage(0);
(4)在Main.cpp中的窗口过程中调用响应的消息成员函数:
//窗口过程:处理消息
LRESULT CALLBACK WndProc(
HWND hwnd,
WPARAM wParam,
LPARAM lParam)
switch(msg)
case WM_CREATE:
wnd.OnCreate(); //窗口建立消息:进行一些初始化操作
case WM_SIZE:
wnd.OnSize(); //窗口size消息:获取窗口大小
case WM_KEYDOWN: //按键消息
wnd.OnKeyDown(wParam);
case WM_PAINT:
//窗口Paint消息:绘制窗口客户区
wnd.OnPaint();
case WM_DESTROY: //窗口销毁消息:释放内存
wnd.OnDestroy();
return DefWindowProc(hwnd, msg, wParam, lParam);
注:此时,我们使用的是一般的消息循环
看着这些代码,你是否觉得和我原先的MFC代码以及风格很相似呢?呵呵:)
ok,来看看运行效果吧:
有心的朋友可能已经发现在我封装的CCWindow类中有两个消息循环成员函数:
1&RunMsgLoop() && 一般的消息循环:GetMessage
2&RunMsgLoop(void (*Display)(), int) && 更有效的消息循环:PeekMessage
注:如果不熟悉这GetMessage、PeekMessage两个API函数的区别,请查阅MSDN
这个一般的消息循环的实例已经在刚刚这个实例中用到,下面就用第二个:更有效的消息循环
这个更有效的消息循环有两个好处:(1)效率好 (2)我们可以省略计时器的设定
1、所谓效率好,就是程序能利用其空闲的时候&&没有消息处理的情况下,来执行一些操作(例如:贴图==)
2、由于利用的是程序没有消息路由的空闲时间来处理一些操作,即只要没有消息,我们就能执行自己想要的代码,那么我们便可以通过Sleep这个函数来模拟计时器的效果&&让这些操作的执行能有一个有序的时间间隔
那么这个有效的消息循环,如何使用呢?
你需要自行写一个函数void Display(),然后让这个消息循环执行这个现实函数就ok了
还是来看看代码吧:(我是实现的功能,很simple:不断绘制一些随机位置、大小、颜色的矩形)
/*--------------------------------------
消息循环(更好的消息循环)
PeekMessage()
@Display:执行函数
@interval:函数执行的时间间隔
--------------------------------------*/
int CCWindow::RunMsgLoop(void (*Display)(), int interval)
ZeroMemory(&msg, sizeof(MSG));
//获取运行到此处时的时间
int last = GetTickCount();
//如果不是退出消息
while(msg.message != WM_QUIT)
//如果有消息
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
TranslateMessage(&msg);
DispatchMessage(&msg);
//否则, 空闲的时候执行响应函数(大多数是绘制函数)
//如果窗口客户区大小不为0就是显示(有可能窗口是在最小化)
if(m_rect.Width() &&
m_rect.Height())
Display();//执行函数
Sleep(interval);//当前线程睡眠一会儿
return msg.wP
在WinMain调用这个更有效的消息循环:
/*进入消息循环
1. 使用更好的消息循环wnd.RunMsgLoop(Display, 100)
2. 使用一般的消息循环wnd.RunMsgLoop()
return wnd.RunMsgLoop();
实现效果:
可见一些随机的矩形在不断地绘制,还是很漂亮吧:》
四、你想要的开源源代码
(不知是不是csdn资源管理服务器抽风了,上传的资源半个小时过了都没显示出来。但我现在实在是太困,所以很抱歉,只能等待明天了&&)
希望大家帮我多测试一下BCF哈,有什么bug请及时告诉我,我将尽快纠正
另外,还欢迎大家和我交流,留下你想说的话(不喜勿碰^_^),因为你们的支持是我继续努力开源的动力:)
一不留神,时间飞逝,现在都凌晨1点多了&&但愿我夜以继日的无私奉献,能帮助到和我有共同兴趣爱好的有志青年,让我们一起踏上美好的游戏编程之旅,扬帆起航,实现我们共同的梦想&&
电脑屏幕前的你,晚安,BlueCoder也晚安,BCF,加油,哈哈&&C++游戏之游戏动画的实现(三)
上一节,我们已经知道如何利用GDI在窗体上绘制图片和文字了,是不是很简单,那么现在如何利用GDI在游戏中实现动画效果呢?俗话说的好,2D游戏是贴图的艺术,3D是渲染的艺术,贴图嘛,也很简单,有两种方式,一种采用定时器,一种则是利用消息循环,目前都是采用的第二种绘制方式(消息循环),这里也只使用第二种,游戏中的动画都是一帧一帧的帖上去的,就像播放电影一样,如何实现呢?我们只需把上一节的代码拿过来稍作修改就行了。(本文内容均为个人理解与学习)
比如有以下怪物出现的动画(素材来自DNF)(
很简单,用一个数组把他们保存起来,然后依次播放就行了。
HBITMAP *image = new HBITMAP[29];//动画的图片句柄数组,28张图片,从0开始,所以数组为29
资源初始化函数
//初始化资源
void Game_Init(HWND hwnd)
g_hdc = GetDC(hwnd);//获取设备环境DC
m_hdc = CreateCompatibleDC(g_hdc);//建立兼容的设备环境
wchar_t fileName[10];//文件名
//初始化图片数组
for (int i=0;i&29;i++)
ZeroMemory(fileName,wcslen(fileName));//初始化数组为0
swprintf_s(fileName,L"%d.bmp",i);//格式转换
image[i] = (HBITMAP)LoadImage(NULL,fileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);//加载位图到数组
动画的绘制
//绘制图形
void Game_Paint(HWND hwnd)
/*根据下标绘制动画
其中(index = (++index)&=29?0:index)为简写等同于
if(index&=29)//判断下班是否越界
SelectObject(m_hdc,image[index = (++index)&=29?0:index]);
BitBlt(g_hdc,150,0,800,600,m_hdc,0,0,SRCCOPY);//拷贝到设备环境上
最后记得清理资源
void Game_Clear(HWND hwnd)
ReleaseDC(hwnd,g_hdc);
DeleteObject(hfont);
delete []//清理图片数组
DeleteObject(m_hdc);
运行效果图:如果看起来不是很流畅,那是因为GIF动态本身的原因,非代码问题
看起来还不错哈,我们来加入点背景音乐,就更不错了,怎么添加呢?很简单,一句话搞定,不过这种方式貌似只能播放wav格式的音频哦。
#pragma comment(lib,"winmm.lib")//添加一个库文件
添加库文件后,调用PlaySound函数就行了
//第一个参数,文件路径
//第二参数,应用程序的实例句柄,除非pszSound的指向一个资源标识符,否则必须设置为NULL
//第三个参数为标示,SND_LOOP重复播放,SND_ASYNC异步播放,SND_FILENAME来自硬盘文件
PlaySound(L"bg.wav",0,SND_LOOP | SND_ASYNC | SND_FILENAME);
完整源码:
#include &Windows.h&
#include &string&
#pragma comment(lib,"winmm.lib")
//窗体的过程函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam);
HDC g_//设备环境
HDC m_//兼容的设备环境
HBITMAP *image = new HBITMAP[29];//绘制动画的图片位图数组
int index=0;//图片下标
wstring test=L"Hello Word";//绘制的字符串
HFONT//字体对象指针
//初始化资源,用于初始化设备环境和加载背景图片
void Game_Init(HWND hwnd);
//绘制图形,正式绘制
void Game_Paint(HWND hwnd);
//清理资源,程序退出时,释放资源
void Game_Clear(HWND hwnd);
//WinMain主函数
INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrivInstance,LPSTR lpCmdLine,int nShowCmd)
//设计一个窗体
WNDCLASSEX wndClass = {0};
wndClass.style = CS_HREDRAW|CS_VREDRAW;
wndClass.cbSize = sizeof(wndClass);
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.hCursor = ::LoadCursor(hInstance,IDC_ARROW);
wndClass.hIcon = (HICON)::LoadImage(NULL,L"",IMAGE_ICON,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
wndClass.hInstance = hI
wndClass.lpfnWndProc = WndP
wndClass.lpszClassName = L"Test";
wndClass.lpszMenuName = 0;
//注册窗体
if (!RegisterClassEx(&wndClass))
return -1;
//创建窗体
HWND hwnd = CreateWindow(L"Test",L"GDI",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,800,600,NULL,NULL,hInstance,NULL);
if (hwnd == NULL)
return -1;
//初始化资源
Game_Init(hwnd);
//显示与更新窗体
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
//消息队列
MSG msg = {0};
while (msg.message != WM_QUIT)
if (PeekMessage(&msg,0,0,0,PM_REMOVE))//读取消息
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//发送消息
Game_Paint(hwnd);//绘制函数
Sleep(50);//绘制间隙50毫秒
UnregisterClass(L"Test",hInstance);
//窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
switch(message)
case WM_PAINT:
ValidateRect(hwnd,NULL);//重绘整个窗体
case WM_DESTROY:
Game_Clear(hwnd);//退出程序时,清理资源
PostQuitMessage(0);
return DefWindowProc(hwnd,message,wparam,lparam);
//初始化资源
void Game_Init(HWND hwnd)
g_hdc = GetDC(hwnd);//获取设备环境DC
m_hdc = CreateCompatibleDC(g_hdc);//建立兼容的设备环境
wchar_t fileName[10];//保存文件名
//初始化图片数组
for (int i=0;i&29;i++)
ZeroMemory(fileName,wcslen(fileName));
swprintf_s(fileName,L"%d.bmp",i);
image[i] = (HBITMAP)LoadImage(NULL,fileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
//播放背景音乐
//第一个参数,文件路径
//第二参数,应用程序的实例句柄,除非pszSound的指向一个资源标识符(即fdwSound被定义为SND_RESOURCE),否则必须设置为NULL
//第三个参数为标示,SND_LOOP重复播放,SND_ASYNC异步播放,SND_FILENAME来自硬盘文件
PlaySound(L"bg.wav",0,SND_LOOP | SND_ASYNC | SND_FILENAME);
//绘制图形
void Game_Paint(HWND hwnd)
/*根据下标绘制动画
其中(index = (++index)&=29?0:index)为简写等同于
if(index&=29)//判断下班是否越界
SelectObject(m_hdc,image[index = (++index)&=29?0:index]);
BitBlt(g_hdc,150,0,800,600,m_hdc,0,0,SRCCOPY);//拷贝到设备环境上
//清理内存
void Game_Clear(HWND hwnd)
ReleaseDC(hwnd,g_hdc);
DeleteObject(hfont);
DeleteObject(m_hdc);
代码本来很小的,结果资源却很大 = = ! 汗,CSND居然传不了,等级不够 = = !
源码及其资源下载:http://pan.baidu.com/s/1i3iU3Pj
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!制作游戏中用C++语言干什么呢?_百度知道
制作游戏中用C++语言干什么呢?
我有更好的答案
经过学习,你可以用MFC或.net或unity或别的公司游戏引擎做出游戏来,技术高的团队画面还很炫,但是这样的游戏包相当的大,里面包括了不少不必用的东东,更有甚者用了恶意插件,开发出来的游戏本身就带了恶意程序,用C++可帮你优化这些,使游戏包的体积大大减少,还可避免使用恶意插件,不过,随着快餐游戏时代的来临,开发周期越来越短,短线捞快钱的思潮下,C++是越来越失去用武之地了,因为玩家为玩游戏而升级电脑的疯劲使优化,开发理念越来越淡,更多的是拿来主义,简单堆砌,所以,现在的程序员又有一个新称呼,代码搬运工。
采纳率:69%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。11:00 提问
c,c++实现简单的动画效果
一个六数码的问题,六个数经过一定的变化变成有序的数 例如
控制台程序已经写好了,黑白框中能运行处正确结果
目前想做一个简单的动画效果演示一下,需要学习哪些知识,不要太复杂的 = =
网上找的说的太空泛,完全没有方向233
按赞数排序
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
动画效果演示一下,你要演示什么
你想要什么样的动画?
最简单的,用一个Timer来控制,不停的刷新,各个元素的坐标自己定。
mfc,用控件或者图片,最简单的一个数字比如0就是六个图片,激活是几个杠杠不激活是几个,两种颜色实现两种状态,或者用qt也行。
你看那种计算器怎么现实你界面就做成那样的
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐在线提问 问题标题: 问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)}

我要回帖

更多关于 可玩性高的良心手游 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信