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