编程入门教程
一 Basic入門
一個基本Basic程序
某班32人,電腦成績如下:A等(5分)13人,B等(4分)12人,C等(3分)5人,D等(2分)2人,求全班該科目平均成績
10 LET A=13
20 LET B=12
30 LET C=5
40 LET D=2
50 LET U=A+B+C+D
60 LET G=(5*A+4*B+3*C+2*D)/U
70 PRINT G
80 END
?
二 C語言入門
高級語言是面向問題的語言。
第一個C程序;
main()
{
?? printf("Hello World!");
}
C程序由函數構成;函數由兩部分組成:函數說明,函數體。
C的數據類型有:基本類型,構造類型,指針類型,空類型。基本類型包括:整型,實型,字符型,枚舉型。
變量的三要素:變量名,變量的值,變量的存儲單元。
字符輸出函數 - putchar。
輸出單詞 Boy 的程序;
#include "stdio.h"
main()
{
?? char a,b,c;
?? a='B'; b='o'; c='y';
?? putchar(a);
?? putchar(b);
?? putchar(c);
}
?
十 XNA編程入門
一
??? XNA Framework 是建置于 .NET Framework 2.0上,另外還加入了一些專注于游戲開發上類別庫。
??? XNA Framework 把所有用作游戲編程的低階技術包起來,由此,游戲開發員就可以專注于游戲內容開發而不用關心游戲移植至不同平臺上的問題,游戲只要開發于XNA 的平臺上,所有硬件只要支援XNA都能運行。XNA Framework 還內置一些工具,例如XACT以幫助游戲內容開發。這些工具還能幫助開發視覺和聽覺效果和和像真度很高的模型制作。
XNA Framework 同時支持2D 和3D 的游戲開發也支援XBox 360 的控制器和震動效果。
第一個XNA程序
安裝完XNA Framework后,在VS中即出現XNA的相關項目Template. 隨便創建一個名曰 WindowsGame1的XNA項目。編譯后,出現藍天白云一片。
??? 在每個游戲中,都存在消息循環,即不斷計算和控制界面不斷刷新的循環。
??? Initialize用于對游戲界面內一些對象的初始化。
LoadContent用于加載游戲內的一些資源,如圖像,文件,聲音等。
緊接著,Update和Draw 便開始游戲內的消息循環,前者主要用于相關計算,后者用于繪制。
XNA的默認刷新率是60fps(Frame/Second)
??? 編譯后,任意資源都會被編譯成.XNB(XNA二進制文件)。
??? GraphicsDevice.Clear(Color.CornflowerBlue);用于擦除當前屏幕內的圖像
spriteBatch 通常用于繪制Sprite,即精靈。
?
二十 DirectDraw編程入門
高速圖形顯示的基本方法是用一種叫做 Page Flipping的技術.
在 Windows95/NT下做 Page Flipping 分為全屏的和窗口的兩種. 在全屏下Page Flipping 叫做Flip, 在窗口下叫做 Blit.
寫所有 DirectDraw的程式, 差不多都有以下幾個步驟,
1. 初始化,
2. 設置顯示模式.
3. 在內存里建立PageFlipping所需要的兩個頁, 前頁和后頁.
4. 給顯示的區域加個畫框以免畫到外面來.
5. 在后頁畫圖, 然后"刷"的一下子換到前頁來.
步驟一: 初始化
DirectDraw 是一個面向對象的函數庫. "面向對象"的意思并不是指面對著你的女朋友, "對象" 在這里, 你可以簡單地想象成是一個模板, 比方說,"政府", 一旦你說:"我成立了一個政府". 別人 就會立即把你套入"政府模板", 自然而然地認為你有印鈔票的功能. 在我們的程式里, 你一旦聲明 一個變量(比如 myDD)是 DirectDraw對象 (DirectDraw對象的正式名為 LPDIRECTDRAW) , 這個myDD就有了 DirectDraw對象的所有的功能和特性. 定義 的語法是:
LPDIRECTDRAW pMyDD;
除了 DD的對象外, 還有幾個重要的對象, "頁面", "裁剪板" 和 "調色板". "頁對象"用來定義"前頁"和"后頁". 定義如下:
LPDIRECTDRAWSURFACE pMyDDSFront;
LPDIRECTDRAWSURFACE pMyDDSBack;
一個"裁剪板對象", 在窗口模式下用來剪去畫出窗口邊界的部份.
LPDIRECTDRAWCLIPPER pMyClipper;
"調色板"設定屏幕的顏色表, 在讀取256色的 Bitmap時要用到.
LPDIRECTDRAWPALETTE myDDPal;
最最重要的"對象"就是這些了. 當然 DirectX還有很多復雜晦澀的對象. 這是速成不起來的.
編制 Windows 程式有一大堆變量和對象是 Windows所要求的, 這也是我最煩 Microsoft的地方. Microsoft 似乎知道這點. 所以在 VC4.0后的版本有了 Wizard的功能幫你自動生成代碼. 盡量地去用它的 Wizard使我們的生活變得容易.
由于我們的程式可能會占用一個窗口, 就給這個窗口一個 handle:
HWND myWnd
初始化的工作還沒有完, 我們要把這些對象指向一個安全的地方 Null.
pMyDD = NULL;
pMyDDSFront = NULL;
pMyDDSBack = NULL;
pMyClipper = NULL;
pMyDDPal=NULL;
最后, 在 Windows系統為我們的 myDD對象開辟相應的區域:
DirectDrawCreate( NULL, //用當前的顯示驅動
&pMyDD, NULL))
Okay, 煩人的初始化總算完了.
步驟二: 設置屏幕的顯示方式.
DirectDraw 有自己的設置屏幕的方式, 而且它的屏幕模式分為"全屏"( exclusive mode)和"窗口"( normal mode). 各有各的設置方法. 設置的主要區別在于 SetCooperativeLeve的參數.
SetCooperativeLeve 在"窗口"模式下這樣設置:
pMyDD->SetCooperativeLevel(AfxGetMainWnd()->GetSafeHwnd(),DDSCL_NORMAL);
而在"全屏"模式下這樣設置:
pMyDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
如果它們的返回值為 DD_OK表示成功. 我們就可以把屏幕調節成我們想要的樣子, 例如 640x480x8. 也就是256色. 究竟有那些屏幕模式可用取決于你的顯示卡
pMyDD->SetDisplayMode( 640, 480, 8 );
現在, 我們已經有了一個屏幕, 不過還不能在上面畫畫, 我們需要步驟三來 替我們建立一個可供畫畫涂涂用的畫板.
步驟三: 建立前后頁(兩塊畫板).
兩塊畫板的好處是可以一邊在一塊上面畫, 一邊給別人看已經畫好的另一塊. 等這塊畫好了, 兩塊板就對調一下, 讓別人看新畫好的這塊. 如果畫的足夠快, 換的足夠快. 看的人就會看到動畫了, 就象電影的效果一樣. 我們把這叫做 Page Flipping.
這里先要介紹的是怎樣在系統中建立兩塊畫板( double buffering), 不過你也可以根據需要建立三塊,四塊畫板.
DDSURFACEDESC ddsd; //這個結構描述"頁"的特徵.
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;//指定我們用的是前頁.
ddsd.dwSize = sizeof(ddsd); //尺寸
// 做前頁:
HRESULT result;
result = pMyDD->CreateSurface(&ddsd, &pMyDDSFront, NULL);
當發生錯誤時, 要記得 Release對象.
if (result!=DD_OK)
{
pMyDD->Release();
pMyDD = NULL;
}
ddsd.dwWidth = scr_width; //設定后頁的大小,
ddsd.dwHeight = scr_height;
//指定 我們要后頁
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
//做后頁
result = pMyDD->CreateSurface(&ddsd, &pMyDDSBack, NULL);
}
步驟四: 給顯示區加一個畫框(裁剪板).
在窗口下. 為了防止 DirectDraw 畫到窗口外面去. 需要加一個畫框(裁剪板). 可以用 CreateClipper來 創建剪貼板.
result = pMyDD->CreateClipper(0, &pMyClipper, NULL);
創建后,把它套到窗口上去, 所以要知道是那一個窗口( Handle).
myWnd = AfxGetMainWnd()->GetSafeHwnd();// 從系統中拿到窗口的 Handle
result = pMyClipper->SetHWnd(0, myWnd);
// 把剪貼板加到窗口上去
result = pMyDDSFront->SetClipper(myClipper);
步驟五: 在后頁畫圖, 前后頁互換.
其實到這里才是真正開始寫游戲的地方, 以前在 DOS下寫游戲, 就是直接從 這個步驟開始的. 以上這些工作, 都是 Microsoft強加給我們的.
寫游戲之前我們先來解決前后互換的問題.
// 如果前頁的內存被 Windows"征用"了, 這里把它要回來. 這個檢察常常會被忘記.
if (pMyDDSFront->IsLost() == DDERR_SURFACELOST)
pMyDDSFront->Restore();
DirectDraw 用來互換的語句有 Blt和 BltFast. BltFast據稱比 Blt快10%.
result = pMyDDSFront->Blt(&rcTo, pMyDDSBack, &rcFrom, DDBLT_WAIT,NULL);
result = pMyDDSFront->BltFast( 0, 0, pMyDDSBack, &rcFrom, DDBLTFAST_SRCCOLORKEY);
如果程式工作在"全屏"模式下. 前后頁互換容易得多, 只是一句:
result = pMyDDSFront->Flip( NULL, 0 );
現在就到了游戲的主要部份了, 我們稱之為"游戲邏輯"部, 在普通的游戲中, "游戲邏輯" 通常 要做很多事, 如畫游戲場景, 故事處理等等. 做完這些事后, 再和前頁做換屏.
?打開Visual C++,? 別忘了檢查一下你的 DirectX SDK 有沒有安裝好. 打開VC, 選擇 MFC app EXE Wizard 來生成程式的框架
。進入 IDE環境后, 加入一個新 CPP file, 把上面用到的子函數的代碼打入.
當然你還需要一個 .H file 來放變量名, 對象名和子程式名.
MFC(Microsoft Fried Checken)的 Wizard會幫你生成 ::InitInstance() 和 ::OnIdle(LONG lCount), 把你的 初始化部份, 建頁等步驟放在 InitInstance子類里. 把"游戲邏輯"和換頁放在 OnIdle里.
?
?三十 微軟BI工具入門
??? Business Intelligence - 連接數據與決策者?????
??? BI是一種運用了數據倉庫、在線分析和數據挖掘等技術來處理和分析數據的嶄新技術,目的是為企業決策者提供決策支持。
??? BI 是一個工廠:
??????? BI 的原材料是海量的數據;
??????? BI 的產品是由數據加工而來的信息和知識;
??????? BI 將這些產品推送給企業決策者;
??????? 企業決策者利用 BI 工廠的產品做出正確的決策,促進企業的發展;這就是 Business Intelligence,即商業智能——連接數據與決策者,變數據為價值。
??? BI 應用的兩大類別是信息類應用 和 知識類應用,其特征如下:
信息類 BI 應用
???? 指由原始數據加工而來的數據查詢、報表圖表、多維分析、數據可視化等應用,這些應用的共同特點是:將數據轉換為決策者可接受的信息,展現給決策者。??? 例如將銀行交易數據加工為銀行財務報表。
???? 僅負責提供信息,而不會主動去分析數據。
???? 例如,銀行財務報表工具沒有深入分析客戶流失和銀行利率之間關系的能力,而只能靠決策者結合信息,通過人的思考,得出知識。
?
知識類 BI 應用
???? 指通過數據挖掘技術和工具,將數據中隱含的關系發掘出來,利用計算機直接將數據加工為知識,展現給決策者。
???? 會主動去數據中探查數據關聯關系,發掘那些決策者人腦無法迅速發掘的隱含知識,并將其以可理解的形式呈現在決策者面前。
?
BI 初級應用模式概覽——數據查詢(Querying)???
??? 數據查詢是最簡單的 BI 應用,屬于 MIS 系統遺產,雖然出身比較老土,但是目前仍然是決策者獲取信息的最直接的方法。
??? 如今,數據查詢界面已經徹底擺脫了傳統 SQL 命令行,大量的下拉菜單、輸入框、列表框等元素甚至是鼠標拖拽界面將后臺干苦力的 SQL 語句包裝成一個妖艷無比的數據獲取系統,而本質仍然沒有離開數據查詢的幾大要素:
?? 查什么
?? 從哪兒查
?? 過濾條件
??? 展示方法
??? 目前國外比較流行的數據查詢應用已經完全釋放了數據查詢的靈活性,如右圖所示的是 Cognos ReportNet 的數據查詢界面 Query Studio,允許用戶通過純瀏覽器界面,以鼠標拖拽操作定義數據查詢要素,并以報表和圖表等多種方式展現數據。
BI 初級應用模式概覽——報表(Reporting)??
??? 報表是國內最熱衷的 BI 應用之一,這與報表在我國企事業單位中的歷史地位是分不開的。我國的報表以其格式詭異、數據集中、規則古怪等特征著稱于世。
??? 報表的兩大要素是數據和格式,如果沒有格式,則報表應用幾乎等同于數據查詢應用。可以說,報表就是將查詢出來的數據按照指定的格式展現。
??? 報表應用包含了報表展現和報表制作兩大模塊。報表展現就是讓決策者看到報表,并允許決策者通過條件定義來選擇報表數據,例如選擇報表年度、部門、機構等等;報表制作面向報表的開發人員,其格式定義靈活性、數據映射靈活性、計算方法的豐富程度等均影響了 BI 報表應用的質量。
??? 需要澄清一下的是,Microsoft Excel 不算是一個 BI 報表工具,因為 Excel 沒有連接數據源的能力,充其量是一個 Spread Sheet。但是 Excel 強大的格式功能讓報表制作人員竟折腰,乃至到后來,幾乎所有 BI 廠商都提供了面向 Microsoft Excel 的插件,通過插件,Excel 可以連接到 BI 的數據源上,搖身一變為 BI 報表工具。
?
三十一 Prolog編程入門
Prolog編程入門
??? 目標子句(goal clause)、事實(facts)、規則(rules)合起來稱為Horn子句,因而得名Horn子句邏輯。
??? Prolog可以作為專家系統來使用,但它本身卻是作為一種程序設計語言而設計出來的。把Horn子句邏輯變為一種程序設計語言的2個重要因素:
(1)?????? 嚴格的搜索順序或程序控制;
(2)?????? 副效應。
1 程序控制
?????? Prolog不使用隨機搜索策略,而總是使用同一種策略。系統保持一個當前目標,始終從左到右進行求解。當求解一個特定子目標時,當前目標中待求解的那個子目標將被其規則右邊的那些子目標所代替。所謂的“謂詞”,就是相當于其他編程語言中的過程或者子例程。它們之間的區別在于一個Prolog謂詞對于一個單個提問可以返回多個結果或者沒有結果(即失敗)。
例:
parent(Person, Parent) :- mother(Person, Parent).
parent(Person, Parent) :- father(Person, Parent).
?
sibling(Person, Sibling) :- mother(Person, Mother), mother(Sibling, Mother).
sibling(Person, Sibling) :- father(Person, Father), father(Sibling, Father).
?
fullBolodeSibling(Person, Sibling) :-
??? mother(Person, Mother),
??? mother(Sibling, Mother),
??? father(Person, Father),
??? father(Sibling, Father).
1.1??? 失敗(fail)
?????? 如果目標失敗了,則說明定理中完全不存在針對該目標的解。
1.2??? 回溯
1.3??? 改進家庭定理
?????? 問題在于:選擇了一個不好的方式來形式化這個定理。原因是從考慮實體間的關系開始的。如果首先考慮實體本身呢?
person("Bill", "male").
person("John", "male").
person("pam", "female").
?
parent("Bill", "John").
parent("Pam", "Bill").
?
father(Person, Father) :- person(Father, "male"), parent(Person, Father).
1.4??? 遞歸
如何定義“祖先”關系?
ancestor(Person, Ancestor) :- parent(Person, Ancestor).
ancestor(Person, Ancestor) :- parent(Person, P1), ancestor(P1, Ancestor).
遞歸具有非常強大的功能,但也有一點難于控制。使用遞歸時,要記住:
(1)?????? 遞歸必須能夠前進;
(2)?????? 遞歸必須能夠終止。
1.5??? 副效應(side effects)
例:
ancestor("Pam",X), write("Ancestor of Pam: ", X), nl().
Ancestor of Pam: Bill
X = Bill
Ancestor of Pam: John
X = John
2 Solutions
PIE給出的結果和自己給出的結果混在一起,怎么辦?一個簡單的辦法是確保該目標沒有解,例如:
ancestor("Pam",X), write("Ancestor of Pam: ", X), nl(),fail.
Ancestor of Pam: Bill
Ancestor of Pam: John
No solutions
Fail是一個預先定義的謂詞,它總是失敗,沒有解。
注意:
(1)?????? 目標本身不存在單一的解,從而使想要的全部解都作為副效應形式給出;
(2)?????? 副效應在失敗計算中也存在。
建議:
將計算性代碼與執行輸入輸出的代碼分開。
?
總結
- 上一篇: SQL应用教程
- 下一篇: Win32汇编扩展教程