﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-柳岸晓风-随笔分类-学习笔记</title><link>http://www.cppblog.com/Geek/category/12671.html</link><description>/*c/c++ 算法 网络 游戏编程*/ 
/*coding无难事，只怕有心人*/</description><language>zh-cn</language><lastBuildDate>Thu, 10 Jun 2010 08:14:34 GMT</lastBuildDate><pubDate>Thu, 10 Jun 2010 08:14:34 GMT</pubDate><ttl>60</ttl><item><title>C++复习（一）</title><link>http://www.cppblog.com/Geek/archive/2010/06/09/117504.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Wed, 09 Jun 2010 14:25:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2010/06/09/117504.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/117504.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2010/06/09/117504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/117504.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/117504.html</trackback:ping><description><![CDATA[<p>1。C++提供了用关键字enum，struct，union和class建立用户自定义数据类型。和c一样，c++中的枚举也用关键字enum声明，但是，与c不同的是，c++声明的枚举是一种新的数据类型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ex&#183;&nbsp; <br>&nbsp;&nbsp; <img style="display: none;" id="Code_Closed_Image_326801" onclick="this.style.display='none'; document.getelementbyid('code_closed_text_326801').style.display="'none';" document.getelementbyid('code_open_image_326801').style.display="'inline';" document.getelementbyid('code_open_text_326801').style.display="'inline';"" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img style="display: inline;" id="Code_Open_Image_326801" onclick="this.style.display='none'; document.getelementbyid('code_open_text_326801').style.display="'none';" getelementbyid('code_closed_image_326801').style.display="'inline';" getelementbyid('code_closed_text_326801').style.display="'inline';"" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="display: inline;" id="Code_Open_Text_326801"><span style="color: #0000ff;">enum</span> Boolean {FALSE,TRUE};<br><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct</span> Name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">char</span> first [10];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">char</span> last[10];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; union Number<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">int</span> i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff">float </font> j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</span></p>
<p><span style="display: inline;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立三种用户自定义数据类型，这三种自定义类型的标记名分别为Boolean，Name和Number。可以用这些标记名声明变量。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ex.<img id="Code_Closed_Image_69815" onclick="this.style.display='none'; document.getelementbyid('code_closed_text_69815').style.display="'none';" document.getelementbyid('code_open_image_69815').style.display="'inline';" document.getelementbyid('code_open_text_69815').style.display="'inline';"" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img style="display: none;" id="Code_Open_Image_69815" onclick="this.style.display='none'; document.getelementbyid('code_open_text_69815').style.display="'none';" getelementbyid('code_closed_image_69815').style.display="'inline';" getelementbyid('code_closed_text_69815').style.display="'inline';"" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="display: none;" id="Code_Open_Text_69815">Boolean done=FALSE；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp; student；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number x；</span></span></p>
<p>2。如果C函数原型的圆括号中什么也没有，编译器就不检查参数且不对参数个数和类型做任何假定，在调用该函数是，给函数传递任何参数编译器都不会报错。</p>
<p>3。函数参数列表中用const限定符说明不能再函数中修改传递给函数的参数。const限定符还有一些其他用法。例如声明常量指针：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">int</span> *<span style="color: #0000ff;">const</span> iPTR=&amp;intger;<br>这条语句把iPtr声明为指向一个整数的常量指针。iPtr所指向的值可以修改，但是不能把iPtr指向其他内存单元。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> *iPtr=&amp;intger；<br>这条语句把iPtr声明为指向整数常量的指针。iPtr所引用的值不能修改，但是可以吧iPtr指向其他内存单元。</p>
<p>4。默认参数必须是函数参数列表中的最右边的参数。</p>
<p>5。单目运算符（：：）能够使程序访问与作用域内局部变量同名的全部变量。</p>
<p>6。C++和C对函数名的处理方式不同，所以试图把C代码和C++代码连接时，在C中编译的函数不能被<br>C++识别。要通知编译器一个或多个已经在C中编译，像下面写出其函数原型：<br><span style="color: #0000ff;">extern</span> &#8220;C&#8221; 函数原型&nbsp;&nbsp; <span style="color: #008000;">//单个函数</span><br><br><span style="color: #0000ff;">extern</span> &#8220;C&#8221;<span style="color: #008000;">//多个函数</span><br>{<br>&nbsp;&nbsp; 函数原型<br>}<br>这些声明通知编译器指定的函数不在C++中编译，因此不对连接说明中列出的函数名编码。这些函数能够得到正确的连接。<br></p>
<p><br>&nbsp;</p><img src ="http://www.cppblog.com/Geek/aggbug/117504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2010-06-09 22:25 <a href="http://www.cppblog.com/Geek/archive/2010/06/09/117504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《WINDOWS 游戏编程大师技巧》学习笔记--windows编程模型小结</title><link>http://www.cppblog.com/Geek/archive/2010/03/27/110661.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Sat, 27 Mar 2010 02:24:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2010/03/27/110661.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/110661.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2010/03/27/110661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/110661.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/110661.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Windows编程就像去见牙科医生：虽然明明知道最自己是有益处的，可还是没人喜欢总是找牙医。&#8221;记得很早的时候，看了一下MFC，还根本不知道窗口啊，按钮啊，菜单啊，现在读这一章才看到的Windows的真面目了。</p>
<p>&nbsp;&nbsp; <font size="4">&nbsp; <font color="#ff8080">1.</font></font> 传说中的&#8220;匈牙利符号表示法&#8221;，早有耳闻此法，但未曾一见啊，最是头痛的就属看帮助文档的，尤其是MSDN了，不过要想阅读Microsoft的一些代码，还真的懂此法呀。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color="#40641c"><strong>*&nbsp; 匈牙利符号表示法前缀代码</strong></font></p>
<table border="0" cellpadding="2" cellspacing="0" width="402">
    <tbody>
        <tr>
            <td valign="top" width="116"><font color="#008000">前缀</font></td>
            <td valign="top" width="284"><font color="#008000">数据类型（基础类型）</font></td>
        </tr>
        <tr>
            <td valign="top" width="118">c</td>
            <td valign="top" width="283">Char字符</td>
        </tr>
        <tr>
            <td valign="top" width="119">by</td>
            <td valign="top" width="282">BYTE字节（无符号字符）</td>
        </tr>
        <tr>
            <td valign="top" width="120">n</td>
            <td valign="top" width="281">Short短整数和整数（表示一个数）</td>
        </tr>
        <tr>
            <td valign="top" width="121">i</td>
            <td valign="top" width="281">int整数</td>
        </tr>
        <tr>
            <td valign="top" width="121">x，y</td>
            <td valign="top" width="281">Short短整数（通常用于x和y坐标)</td>
        </tr>
        <tr>
            <td valign="top" width="121">cx，cy</td>
            <td valign="top" width="281">short短整数（通常用于x和y的长度；c表示计数）</td>
        </tr>
        <tr>
            <td valign="top" width="121">b</td>
            <td valign="top" width="281">BOOL（整数）</td>
        </tr>
        <tr>
            <td valign="top" width="121">w</td>
            <td valign="top" width="281">UINT（无符号数）和WORD（无符号字）</td>
        </tr>
        <tr>
            <td valign="top" width="121">l</td>
            <td valign="top" width="281">LONG（长整数）</td>
        </tr>
        <tr>
            <td valign="top" width="121">dw</td>
            <td valign="top" width="281">DWORD（无符号长整数）</td>
        </tr>
        <tr>
            <td valign="top" width="121">fn</td>
            <td valign="top" width="281">函数指针</td>
        </tr>
        <tr>
            <td valign="top" width="121">s</td>
            <td valign="top" width="281">字符串</td>
        </tr>
        <tr>
            <td valign="top" width="121">sz，str</td>
            <td valign="top" width="281">以一个字节的0（空值）终止的字符串</td>
        </tr>
        <tr>
            <td valign="top" width="121">lp</td>
            <td valign="top" width="281">32位指针</td>
        </tr>
        <tr>
            <td valign="top" width="121">h</td>
            <td valign="top" width="281">编号（常用于表示Windows对象）</td>
        </tr>
        <tr>
            <td valign="top" width="121">msg</td>
            <td valign="top" width="281">消息</td>
        </tr>
    </tbody>
</table>
<p><br><font color="#40641c"><strong>*变量的命名</strong></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量的命名应用匈牙利符号表示法，变量可用上表中的前缀代码表示。另外，变量由一个或几个子名构成时，每一个子名都要大写字母开头。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp; *szFileName;&nbsp;&nbsp; // a null terminated string<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *lpiData;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //a 32-bit pointer to a int<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还有一点就是，全局变量以g_或g开头。</p>
<p><font color="#40641c"><strong>*函数命名</strong></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数命名和变量命名规则相同，但是没有前缀。也就是说，只需要子名的第一个字母要大写。<br>而且函数名中使用下划线是非法的。例如，下面的函数名表示是无效的匈牙利符号表示法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; Get_Pixel(int&nbsp; ix,int&nbsp; iy);</p>
<p><font color="#40641c"><strong>*类型和常量的命名</strong></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有的类型和常量都是大写的字母，但名字中可以允许使用下划线。</p>
<p><font color="#40641c"><strong>*类的命名</strong></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有c++的类必须使用大写的C为前缀。类名字的每一个子名的第一个字母要大写。</p>
<p><font color="#40641c"><strong>*参数的命名</strong></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数的参数命名和标准变量命名约定相同。</p>
<p>&nbsp;&nbsp; <font size="4">&nbsp;</font></p>
<p><font color="#40641c"><font size="4">2.</font>怎样创建一个完全实用的Windows程序，也就是那个我们经常见面的那个窗口。你只需要下面几步：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.创建一个Windows类。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.创建一个事件句柄或WinProc。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.用Windows注册Windows类。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.用前面创建的Windows类创建一个窗口。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.创建一个能够从事件句柄获得或向事件句柄传递Windows信息的主事件循环。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.1 Windows类<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220; Windows中的每一个窗口、控件、列表框、对话框和小部件等等实际上都是一个窗口。区别它们的就是定义它们的类。一个Windows类就是Windows能够操作的一个窗口类型的描述。&#8221;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;控制Windows类信息的数据结构有两个：WNDCLASS和WNDCLASSEX。WNDCLASS是比较古老的一个，可能不久将废弃，因此我们应当使用新的扩展版WNDCLASSEX。&#8221;</p>
<pre>   typedef  <span style="color: #0000ff;">struct</span>   _WNDCLASSEX
{
UNIT              cbsize;
UINT              style;
WNDPROC  lpfnWndProc;
<span style="color: #0000ff;">int</span>                   cbClsExtra;
<span style="color: #0000ff;">int</span>                   cbWndExtra;
HANDLE       hInstance;
HICON          hIcon;
HCURSON  hCoursor;
HBRUSH      hbrBackground;
LPCTSTR     lpszMenuName;
LPCTSTR     lpszClassName;
HICON           hIconSm;
}WNDCLASSEX;</pre>
<pre>        创建一个这样的结构，然后就是填写里面所有的成员变量：WNDCLASSEX  winclass;</pre>
<pre>   2.2事件句柄<br>       这里所说的句柄（exent handler）就是当事件发生时Windows从主事件循环调用的回调<br>函数。对于创建的任何一个Windows类，都有一个独立的事件句柄，我们称呼它为WinProc，当用户<br>和Windows运行任务时，你的窗口和/或其他的应用程序窗口产生事件和消息。所有的消息都进入一<br>个队列，而你的窗口的消息发送你的窗口专用队列中。然后主事件循环检索这些消息，并且将它们发<br>送到你的窗口的WinProc中来处理。</pre>
<pre>WinProc原型：<br><strong>  LRESULT CALLBACK WindowProc( <br></strong><strong>  HWND </strong><em>hWnd</em><strong>, <br>  UINT </strong><em>uMsg</em><strong>,<br>  WPARAM </strong><em>wParam</em><strong>,<br>  LPARAM </strong><em>lParam</em><strong> );</strong></pre>
<pre><strong>   </strong> 2.3注册Windows类<br>     Windows类已经定义并且存放在Windsclass中，必须将新的类通知Windows。该功能通过<br>RegisterClassEx()函数实现，使用一个指向新类定义的指针来实现。如下：<br>          RegisterClassEx(&amp;winclass);</pre>
<pre>    2.4创建窗口<br>      创建窗口使用CreateWindow()或CreateWindowEx()函数。</pre>
<pre>    2.5主事件循环<br>       <a href="http://www.cppblog.com/images/cppblog_com/Geek/WindowsLiveWriter/WINDOWSwindows_B0/shijianxunhuan_2.jpg"><img style="border: 0px none; display: inline;" title="shijianxunhuan" alt="shijianxunhuan" src="http://www.cppblog.com/images/cppblog_com/Geek/WindowsLiveWriter/WINDOWSwindows_B0/shijianxunhuan_thumb.jpg" border="0" height="300" width="565"></a> </pre>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // test if there is a message in queue, if so get it<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // test if this is a quit<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (msg.message == WM_QUIT)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // translate any accelerator keys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TranslateMessage(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // send the message to the window proc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DispatchMessage(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } // end if<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // main game processing goes here<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Game_Main();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } // end while</p><img src ="http://www.cppblog.com/Geek/aggbug/110661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2010-03-27 10:24 <a href="http://www.cppblog.com/Geek/archive/2010/03/27/110661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《WINDOWS游戏编程大师技巧》学习笔记--学海无涯</title><link>http://www.cppblog.com/Geek/archive/2009/12/27/104165.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Sat, 26 Dec 2009 17:21:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2009/12/27/104165.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/104165.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2009/12/27/104165.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/104165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/104165.html</trackback:ping><description><![CDATA[<div class="resizeimg">
<p>终于等到在网上买的<a href="http://www.douban.com/subject/1230286/">书</a>了，虽然这书时代有点老，但还是觉得还是有价值，应该好好读一读，仔细阅读当然是要做些笔记啦。</p>
<p>学习前的准备工作：<br>&nbsp;&nbsp;&nbsp; 这本书的例子用的是VC++ 6.0+DirectX 7.0，所以先得到网上下载DirectX 7.0
SDK（8.0亦可），解压，把Include 和lib 下的文件全部拷贝到Vc
++的对应目录下，然后，我就试着编译了第一章的一个例子游戏---打砖块的游戏，发现连接不了外部文件！无奈，百度一下，原来还得对编译器做些工作：在Project/Settings &nbsp; /link&nbsp;&nbsp;&nbsp;&nbsp; Object/library&nbsp;&nbsp;添加
ddraw.lib dxguid.lib 。</p>
<p>第一章 学海无涯<br>&nbsp;&nbsp;&nbsp; 讲解游戏诞生的整个过程，Windows下面的游戏运行整个过程和游戏编程中的规范。<br>&nbsp;&nbsp;&nbsp;&#8220;
一个简化游戏的结构：第一步，初始化<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
第二步，进入游戏循环<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
第三步：获得玩家的输入信息<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
第四步：执行人工智能和游戏逻辑<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
第五步：渲染下一帧图像<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第六步：同步显示<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
第七步：循环<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第八步：关闭 &#8221;<br>&nbsp;&nbsp;&nbsp;
啊哈原来一个游戏程序简单点就是这样运行的，游戏也并不是那么神秘额。</p>
<p>&nbsp;另外的收获就是游戏编程一些规范和技巧：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;1.&#8220;你不应当在对运行时间或内存要求特别严格的代码段中式用高层API。特别是与游戏内循环有关的代码大多需要手工编写，否则游戏多半会遇到严重的速度和性能的问题。当然，这并不一位着就不能信任DirectX等
API，因为DirectX的设计目的就是兼顾高性能和&#8220;thin&#8221;原则。但就通常来讲，应当避免频繁调用高层的函数。&#8221;----这点是有点不太明白，作者是对API的性能不太信任？还是另有原因，暂且放在这里，等整体看完再研究之。</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
2.&#8220;不要害怕使用全局变量。&#8221;&#8220;由于参数要被压栈和出栈，执行这个函数体所需时间小于调用函数所需的时间，在这种情况下，更好的方法可以是设立一些全局变量，然后再调用前进行赋值以传递参数&#8221;——时间是如此的重要！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.&#8220;使用内联函数&#8221;--呵呵，这个上C++课时老师讲啦。虽然使编译后的程序变大了，但却有效的提高运行速度。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 4.&#8220;尽量使用32位的变量而不是8位或16位变量。&#8221;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;struct&nbsp;&nbsp; CPOINT<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short x,y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned char&nbsp;c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;} //
end CPOINT&#8221;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&#8220;注意，定义这个结果看上去不错，但实际并非如此!首先，结构本身是一个5字节长的结构——(2*sizeof(short)+sizeof(char))=5
字节。这太糟了额，由于没注意字节对齐，内存寻址的时候会出大问题。&#8221;——这点确实不知道！标记之。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
5.&#8220;以类似RISC的方式来编程。换句话来说，尽量简化你的代码，而不是是他更复杂。&#8221;——以前一直想，能一句完成，就不要写多几行，原来简单句子，执行的更快。&#8220;使用二进制移位运算来进行乘数是2的幂的简单整数乘法。&#8221;</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;
6.&#8220;不要为简单的对象定义太多复杂的数据结构。链表结构很好用，但并不意味着当你所需要的其实是大约有256个固定数组的时候，你也该使用链表&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.最后有一个小游戏，但是我对里面的碰撞算法，不太理解啊，真是有点难度啊。</p>
</div>
<br> <img src ="http://www.cppblog.com/Geek/aggbug/104165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2009-12-27 01:21 <a href="http://www.cppblog.com/Geek/archive/2009/12/27/104165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>