>_<:理解上一个时间函数的概念和用法,本节的实现也比较简单

>_<:就是简单的绘图+时间函数

>_<:TicTac.h

 #define EX 1            //该点左鼠标
#define OH 2 //该点右鼠标 class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance ();
}; class CMainWindow : public CFrameWnd //不是继承CFrameWnd 因此需要在CMainWindow()自己定义窗口类了
{
protected:
CPoint pos,killpos;
int vx,vy,ax,ay;
int killvx,killvy,killax,killay;
int num,Length; public:
CMainWindow (); protected:
virtual void PostNcDestroy ();//在程序终止之前销毁CMainWindow对象
afx_msg int OnCreate (LPCREATESTRUCT lpcs);
afx_msg void OnTimer (UINT nTimerID);
DECLARE_MESSAGE_MAP ()
};

>_<:TicTac.cpp

 #include <afxwin.h>
#include "TicTac.h"
#define ID_TIMER_ELLIPSE 1
#define ID_TIMER_RECTANGLE 2 CMyApp myApp; /////////////////////////////////////////////////////////////////////////
// CMyApp member functions BOOL CMyApp::InitInstance ()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow (m_nCmdShow);
m_pMainWnd->UpdateWindow ();
return TRUE;
} /////////////////////////////////////////////////////////////////////////
// CMainWindow message map and member functions BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
ON_WM_CREATE ()
ON_WM_TIMER ()
END_MESSAGE_MAP () CMainWindow::CMainWindow ()
{
//初始化游戏
//InitGame();
pos=CPoint(,);
vx=killvx=;
vy=killvy= ;
ax=ay=killax=killay=;
Length=;
num=; //注册一个 WNDCLASS 窗口类.
CString strWndClass = AfxRegisterWndClass (
CS_DBLCLKS, // Class style(有双击时间发生的窗口类型)
AfxGetApp ()->LoadStandardCursor (IDC_ARROW), // Class cursor(加载一个系统光标,也可自己定义)
(HBRUSH) (COLOR_3DFACE + ), // Background brush(每次::BeginPaint时用它清空客户区);COLOR_3DFACE+1是指定窗口具有与按钮对话框一致的背景色和其他一些3D属性;默认为灰亮色
AfxGetApp ()->LoadStandardIcon (IDI_WINLOGO) // Class icon(加载系统图标,也可自己定义)
); //调用CWnd::CreateEx()创建主窗口
//第一个参数表示0个或是多个WS_EX标志组合;2:AfxRegisterWndClass()返回的WNDCLASS名称;
//3、标题;4、窗口样式
CreateEx (, strWndClass, _T ("Timer"),
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, //WS_THICKFRAME窗口可调大小属性(这里不用)
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, //初始位置和大小,这里用CW_USEDEFAULT让Windows拾取窗口和大小
NULL, NULL); //处理窗口位置和尺寸
CRect rect (, , , ); //理想客户区窗口矩形形状
CalcWindowRect (&rect); //根据分辨率、菜单...计算窗口矩形大小(必须在窗口创建后调用) SetWindowPos (NULL, , , rect.Width (), rect.Height (),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW);
} //在程序结束之前销毁创建的CMainWindow对象
void CMainWindow::PostNcDestroy ()
{
delete this;
} int CMainWindow::OnCreate (LPCREATESTRUCT lpcs)//回掉函数
{
if (CFrameWnd::OnCreate (lpcs) == -)
return -; if (!SetTimer (ID_TIMER_ELLIPSE, , NULL)) {
MessageBox (_T ("Error: SetTimer failed"));
return -;
}
return ;
} void CMainWindow::OnTimer (UINT nTimerID)
{
CRect rect;
GetClientRect (&rect); pos.x+=vx;
if(pos.x>rect.right-){
pos.x=rect.right-;
vx=-vx;
}
if(pos.x<){
pos.x=;
vx=-vx;
}
pos.y+=vy;
if(pos.y>rect.bottom-){
pos.y=rect.bottom-;
vy=-vy;
}
if(pos.y<){
pos.y=;
vy=-vy;
} if(num++==)killpos=pos;
if(num>=Length){
killpos.x+=killvx;
if(killpos.x>rect.right-){
killpos.x=rect.right-;
killvx=-killvx;
}
if(killpos.x<){
killpos.x=;
killvx=-killvx;
}
killpos.y+=killvy;
if(killpos.y>rect.bottom-){
killpos.y=rect.bottom-;
killvy=-killvy;
}
if(killpos.y<){
killpos.y=;
killvy=-killvy;
}} CClientDC dc (this); CPen pen(PS_NULL,,RGB(,,));
dc.SelectObject(&pen);
if(num==)dc.Rectangle(rect);
dc.Ellipse(killpos.x,killpos.y,killpos.x+,killpos.y+);
::DeleteObject(&pen); CBrush brush(RGB(,,));
dc.SelectObject (&brush);
dc.Ellipse(pos.x,pos.y,pos.x+,pos.y+);
::DeleteObject(&brush); CBrush brush1(RGB(,,));
dc.SelectObject (&brush1);
dc.Ellipse(pos.x+,pos.y+,pos.x+,pos.y+);
::DeleteObject(&brush1);
}

[游戏学习27] MFC 匀速运动的更多相关文章

  1. [游戏学习22] MFC 井字棋 双人对战

    >_<:太多啦,感觉用英语说的太慢啦,没想到一年做的东西竟然这么多.....接下来要加速啦! >_<:注意这里必须用MFC和前面的Win32不一样啦! >_<:这也 ...

  2. [游戏学习26] MFC 时间函数 画图形

    >_<:这里第一次介绍MFC的时间函数,功能和Win32里的计时器类似. >_<:这里还介绍了MFC的图形绘制函数,和Win32有一点区别 >_<:ABC.h #d ...

  3. [游戏学习23] MFC 画尺子

    >_<:这是个简单的MFC程序,有利于了解MFC的框架结构 >_<:Ruler.h #include<afxwin.h> class CMyApp:public C ...

  4. [游戏学习24] MFC 各种绘图 字体学习

    >_<:这里包含字体设置及各种绘图,只要稍微看一下代码就能理解,这里不多介绍 >_<:Hello.h #include<afxwin.h> class CMyApp ...

  5. [游戏学习28] MFC 时钟

    >_<:这是一个时钟小程序 >_<:通过调用获得系统时间然后经过计算得出当前时间,然后再以3个圆环表示时分秒. >_<:TAO_CLOCK.h class CMyA ...

  6. [游戏学习25] MFC 橡皮筋画线效果

    >_<:这是给出窗口内外不同情况的处理展示的例子. >_<:MouseCap.h #include<afxwin.h> class CMyApp :public C ...

  7. 我的游戏学习日志3——三国志GBA

    我的游戏学习日志3——三国志GBA 三国志GBA由日本光荣公司1991~1995所推出<三国志>系列游戏,该作是光荣在GBA上推出的<三国志>系列作品的第一款.本游戏登场武将总 ...

  8. Libgdx游戏学习(1)——环境配置及demo运行

    原文: Libgdx游戏学习(1)--环境配置及demo运行 - Stars-One的杂货小窝 Libgdx游戏是基于Java的一款游戏引擎,可以发布Android,桌面端,Html,IOS等游戏,出 ...

  9. 学习 27 门编程语言的长处,提升你的 Python 代码水平

    Python猫注:Python 语言诞生 30 年了,如今的发展势头可谓如火如荼,这很大程度上得益于其易学易用的优秀设计,而不可否认的是,Python 从其它语言中偷师了不少.本文作者是一名资深的核心 ...

随机推荐

  1. 万象客户端设置服务端ip保存在注册表的位置

    HKEY_LOCAL_MACHINE\SOFTWARE\Sicent\wx2004Clt 这个注册表被保护了,不能修改和删除,但可以在安全模式操作.

  2. ted be grateful

    -------------------------------------------------------------- David Steindl-Rast: Want to be happy? ...

  3. javascript 命令方式 测试例子

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. iframe自动适应高度1

    js: function iFrameHeight() { var ifm= document.getElementById("iframepage"); var subWeb = ...

  5. gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第一篇:安装配置gradle

    一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走 ...

  6. /etc/hosts文件设置不对导致Jboss启动失败

    Caused by: javax.management.MBeanRegistrationException: preRegister() failed: [ObjectName='jboss.rem ...

  7. 接收 ajax POST 方式传入的参数

    ----前台--- var list = new Array(); var params = { gencodeid : "test001", value : "01&q ...

  8. 《机器学习实战》学习笔记——第13章 PCA

    1. 降维技术 1.1 降维的必要性 1. 多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯.2. 高维空间本身具有稀疏性.一维正态分布有68%的值落于正负 ...

  9. 开源PLM软件Aras详解三 服务端简易开发

    废话少说,直接进入主题, 以CAD为例: 先找到CAD对象类:具体操作见下图 双击打开,找到服务端事件:见下图 点击新建对象,点击添加,新建Method 编写Method,语言分为前端和后端,前端支持 ...

  10. NGUI 使用UITable(或UIGrid)注意事项

    在ScrollView显示区域中,若Item数量不足以超出显示区域,有可能不是贴着ScrollView最边缘位置显示!这个时候可以按如下方法调整: 因为实际情况中,往ScrollView中添加Item ...