版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析前言目的: 通過案例解析,領(lǐng)略大型程序的設(shè)計思想和開發(fā)方法 ,了解程序評價標(biāo)準(zhǔn)案例: 通訊錄 簡單計算器 俄羅斯方塊第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析主要內(nèi)容主要內(nèi)容通訊錄范例解析簡易計算器范例解析俄羅斯方塊范例解析第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄問題描述:以文件的方式保存用戶錄入的通訊錄數(shù)據(jù) 供用戶查詢和使用通訊錄信息第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄功能分析: 記錄項的基本屬性:姓名、性別、住址、聯(lián)系電話、電子郵件 等操作功能: 錄入:操作添加
2、一條新的記錄項 刪除:刪除一條已經(jīng)存在的記錄項 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄功能分析: 修改:改變記錄項的一個或多個屬性,并用新的記錄項覆蓋已經(jīng)存在的記錄項 查找:根據(jù)用戶輸入的屬性值查找符合條件的記錄項。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄功能分析: 通訊錄數(shù)據(jù)以文件形式存儲在磁盤上,根據(jù)實際需要定義文件的存儲格式;在程序運行中需要對文件進行讀取操作。 程序中還要對輸入數(shù)據(jù)的容錯性進行檢查,可以保證通訊錄數(shù)據(jù)的合法性。 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄設(shè)計:程序總體結(jié)構(gòu):輸入輸出模塊:
3、人機交互,包括程序界面顯示、用戶輸入響應(yīng)、結(jié)果輸出等 管理模塊:管理模塊從輸入輸出模塊讀取用戶命令并進行相應(yīng)的操作,包括錄入、刪除、修改、查找、列表等 文件操作模塊:進行存儲文件的讀寫 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄模塊結(jié)構(gòu)圖模塊結(jié)構(gòu)圖輸入輸出終端輸入輸出模塊管理模塊文件操作模塊存儲文件用戶輸入系統(tǒng)輸出文件寫入文件讀出第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄界面設(shè)計 :第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計: struct myrecordunsigned int num;unsigne
4、d int group;char namemaxlen+1;char gender;date birthday;char addressmaxlen+1;char phonemaxlen+1;char emailmaxlen+1; 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計: struct mydateunsigned int year;unsigned int month;unsigned int day;typedef struct mydate date; 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計:三個查詢關(guān)鍵
5、字:記錄編號、組別和聯(lián)系人姓名 union mysearch_entryunsigned int num;unsigned int group;char namemaxlen+1;typedef union mysearch_entry search_entry; 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄-函數(shù)設(shè)計函數(shù)設(shè)計函數(shù)原型函數(shù)原型函數(shù)功能函數(shù)功能函數(shù)處理描述函數(shù)處理描述void menulist(void)以文本方式顯示程序主菜單,同時響應(yīng)用戶輸入調(diào)用bioske(0),獲取按鍵的值void upbar(int y)向上滾動光標(biāo)條通過改變字體顏色實現(xiàn)光標(biāo)條移
6、動void downbar(int y)向下滾動光標(biāo)條通過改變字體顏色實現(xiàn)光標(biāo)條移動void mydelay(void)等待用戶響應(yīng)調(diào)用getch()實現(xiàn)void format(void)結(jié)果輸出時打印輸出的格式信息調(diào)用printf()實現(xiàn)void searchmenu(void)輸出查詢功能的子菜單調(diào)用printf()實現(xiàn)void input_search(char ch)處理查詢時用戶的輸入,將關(guān)鍵字讀入根據(jù)輸入?yún)?shù)ch,執(zhí)行相應(yīng)的操作int input_num(void)讀入一個整型數(shù)值(記錄編號),進行合法性檢查采用了遞歸的方法循環(huán)讀取數(shù)據(jù)int input_new(myrecord
7、*p)進行數(shù)據(jù)修改時,讀入一個新的記錄項,并用它覆蓋輸入?yún)?shù)所指向的數(shù)據(jù)記錄項。參數(shù):新記錄項的指針返 回 值:返回是否進行了修改的信息,已修改返回 1,否則返回0。myrecord *input_app(void)錄入信息時處理鍵盤輸入,對輸入進行合法性檢查逐項錄入通訊記錄int date_legal(int year,int month,int day)檢查日期是否為合法參數(shù):年、月、日的信息返 回 值:合法日期返回1,否則返回0menu.c輸入輸出文件第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄-函數(shù)設(shè)計函數(shù)設(shè)計file.c文件處理文件int file_app(m
8、yrecord *p)添加一條新的記錄項參 數(shù):要錄入的記錄項的指針返 回 值:操作結(jié)果(插入成功返回1,失敗返回0)myrecord *read_record(int n)從文件中讀出下標(biāo)為n的塊(記錄項)參 數(shù):下標(biāo)值返 回 值:讀取結(jié)果的指針int write_record(myrecord *p,int n)向文件中寫入某一塊(如果該塊已經(jīng)存在,將進行覆蓋)參 數(shù):指向記錄項的指針和要寫入的塊位置返 回 值:操作結(jié)果(插入成功返回1,失敗返回0)int file_search(search_entry *s,int f)對存儲文件進行遍歷,查找符合輸入的記錄項并輸出參 數(shù):指向查詢項的
9、指針和查詢類型返 回 值:符合條件的記錄項總數(shù)(如果是0則查找失敗)int file_delete(int n)刪除文件中某個記錄塊參 數(shù):下標(biāo)值返 回 值:操作結(jié)果(插入成功返回1,失敗返回0)第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄-函數(shù)設(shè)計函數(shù)設(shè)計control.c控制文件void append(void)執(zhí)行數(shù)據(jù)錄入操作調(diào)用input_app()完成數(shù)據(jù)錄入,調(diào)用file_app()完成數(shù)據(jù)保存。void delet(void)執(zhí)行數(shù)據(jù)記錄項刪除操作調(diào)用file_search查找要刪除的記錄,然后調(diào)用file_delete()進行刪除void search(
10、void)執(zhí)行數(shù)據(jù)查找操作調(diào)用searchmenu()進入查找的菜單,調(diào)用input_search(ch)獲得要查找的內(nèi)容,file_search()進行查找void change(void)執(zhí)行數(shù)據(jù)記錄項修改操作調(diào)用input_num()輸入待修改的記錄,調(diào)用file_search()進行查找,調(diào)用input_new()輸入新的內(nèi)容,調(diào)用write_record()進行更新void list_all(void)列出當(dāng)前所有聯(lián)系人信息打開文件,遍歷所有記錄并輸出void init(void)系統(tǒng)初試化操作,保證文件的正確性和合法性調(diào)用fopen()打開文件,初始化void quit(void)
11、系統(tǒng)退出函數(shù),寫回文件以保證數(shù)據(jù)的一致性關(guān)閉文件,退出系統(tǒng)第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄-程序運行示意圖程序運行示意圖第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析通訊錄通訊錄源程序: 略第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析主要內(nèi)容主要內(nèi)容通訊錄范例解析簡易計算器范例解析俄羅斯方塊范例解析第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器問題描述: windows操作系統(tǒng)提供了計算器應(yīng)用程序,它有標(biāo)準(zhǔn)型和科學(xué)型兩種模式,是標(biāo)準(zhǔn)的windows圖形界面應(yīng)用程序,支持鼠標(biāo)和鍵盤操作。windows提供的計
12、算器第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器功能分析: 簡單計算器是對windows計算器的模擬,設(shè)計其功能如下: 具有加(+)、減(-)、乘(*)、除(/)四則運算和求百分運算;通過鼠標(biāo)輸入一個數(shù),單擊s按鈕還可計算該數(shù)的平方根第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器設(shè)計: 簡單計算器的處理過程:首先進行圖形和鼠標(biāo)初始化,接著顯示簡單計算器外觀,并接受用戶的鼠標(biāo)控制使用。如果單擊了鼠標(biāo)右鍵,則程序關(guān)閉圖形方式并結(jié)束運行。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器 圖形初始化 鼠標(biāo)初始化
13、輸出計算器外觀 鼠標(biāo)控制計算器的使用 結(jié) 束 簡單計算器的流程圖主程序流程:void main()graphinit();initmouse();picture();compute ();closegraph();第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器界面外觀 :第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器界面設(shè)計:(1)背景采用淺藍色,用灰色作底色和紅色作前景色畫一個bar3d圖形,模擬立體效果;(2)第1行是數(shù)據(jù)輸入和結(jié)果輸出的信息顯示框,使用bar函數(shù),用黃色填充;(3)信息顯示框下面是4排按鈕,每排5個,同樣使用ba
14、r函數(shù)。按鈕被設(shè)計成有按下和彈起兩種狀態(tài),初始是彈起狀態(tài);(4)在每個按鈕框上顯示相應(yīng)的按鈕標(biāo)簽;(5)在簡單計算器下方輸出使用說明和設(shè)計單位信息。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器數(shù)據(jù)結(jié)構(gòu)設(shè)計: 簡單計算器沒有用到復(fù)雜的數(shù)據(jù)結(jié)構(gòu),計算時定義了兩個double變量u、v和一個字符數(shù)組s及幾個標(biāo)志變量。開始使用時u和v變量分別存儲第1次和第2次輸入的數(shù)據(jù),計算結(jié)果始終保存在u中。繼續(xù)運算時,輸入的數(shù)據(jù)存于v,并與u中的數(shù)據(jù)運算后結(jié)果保存于u中。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器數(shù)據(jù)結(jié)構(gòu)設(shè)計: 簡單計算器進行加減乘
15、除運算的函數(shù)compute()中,定義以下主要標(biāo)志變量:(1) sign:表示+、-、*、/等運算符的整數(shù)變量。值為0表示當(dāng)前未單擊過運算符。(2) flag:輸入數(shù)據(jù)時是否單擊了小數(shù)點。單擊了小數(shù)點,flag為1,否則為0。 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器函數(shù)設(shè)計: 簡單計算器采用了結(jié)構(gòu)化程序設(shè)計思想,由一個.h文件和四個.c文件組成,并構(gòu)造了tc工程文件來管理和生成簡單計算器應(yīng)用。每個源文件包含多個函數(shù)的設(shè)計,這些函數(shù)的功能設(shè)計及處理描述見下表。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器-函數(shù)設(shè)計函數(shù)設(shè)計文件名
16、文件名函數(shù)原型函數(shù)原型函數(shù)功能函數(shù)功能處理描述處理描述mouse.cvoid initmouse()鼠標(biāo)初始化調(diào)用0 x33中斷的0號功能寄存器ax返回值不是-1,表明鼠標(biāo)初始化失敗void get_mouse_position(int *x,int *y)獲取鼠標(biāo)位置坐標(biāo)調(diào)用0 x33中斷的3號功能鼠標(biāo)位置存于寄存器cx和dx中,然后存于x、y指針變量指向的單元返回調(diào)用函數(shù)int leftpress()判斷鼠標(biāo)左鍵是否單擊調(diào)用0 x33中斷的3號功能鼠標(biāo)狀態(tài)存于寄存器bx,其第0位是1表明左鍵被按下int rightpress()判斷鼠標(biāo)右鍵是否單擊調(diào)用0 x33中斷的3號功能鼠標(biāo)狀態(tài)存于寄
17、存器bx,其第1位是1表明右鍵被按下第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器-函數(shù)設(shè)計函數(shù)設(shè)計picture.cvoid picture()繪制計算器界面 使用圖形函數(shù)繪制計算器外框 調(diào)用公用函數(shù)bottonup()繪制彈起效果的按鈕 調(diào)用系統(tǒng)outtextxy()輸出按鈕標(biāo)簽 調(diào)用系統(tǒng)outtextxy()輸出使用說明等信息注:函數(shù)開始繪制鼠標(biāo)圖標(biāo)并保存在全局變量imagep中,在compute()函數(shù)(見compute.c文件)中涉及顯示、移動鼠標(biāo)等操作第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器-函數(shù)設(shè)計函數(shù)設(shè)計util
18、.c void graphinit()圖形初始化調(diào)用系統(tǒng)函數(shù)initgraph()進行初始化失敗則程序結(jié)束運行void bottondown(int x,int y)畫按下效果的按鈕框調(diào)用畫線及顏色設(shè)置函數(shù)繪制按下效果的按鈕框(x,y)表示按鈕框的左上角坐標(biāo)void bottonup(int x,int y)畫彈起效果的按鈕框調(diào)用畫線及顏色設(shè)置函數(shù)繪制彈起效果的按鈕框(x,y)表示按鈕框的左上角坐標(biāo)void show(int x,int y)單擊按鈕的效果顯示顯示按下的按鈕延時顯示彈起的按鈕注: 模擬按鈕被單擊簡單計算器簡單計算器-函數(shù)設(shè)計函數(shù)設(shè)計util.c char getnumber(i
19、nt x,int y)獲取單擊按鈕圖標(biāo) 每個按鈕的位置是確定的(即矩形框的左上角坐標(biāo)和大小已知) 根據(jù)單擊按鈕時鼠標(biāo)的(x,y)可確定單擊了哪個按鈕,函數(shù)返回按鈕的標(biāo)簽例:左上角坐標(biāo)為(150,105)和右下角為(200,135)的矩形框表示計算器上數(shù)字7按鈕void clearscreen()清信息顯示框清除信息顯示框中的數(shù)據(jù)(可能是輸入的數(shù)或輸出的計算結(jié)果)int kx(char d)獲取按鈕的左上角x坐標(biāo)d表示按鈕的圖標(biāo)根據(jù)d返回按鈕的左上角x坐標(biāo)按鈕左上角坐標(biāo)為模擬單擊按鈕服務(wù)第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器-函數(shù)設(shè)計函數(shù)設(shè)計util.c i
20、nt ky(char d)獲取按鈕的左上角y坐標(biāo)d表示按鈕的圖標(biāo)根據(jù)d返回按鈕的左上角y坐標(biāo)按鈕左上角坐標(biāo)為模擬單擊按鈕服務(wù)void outch(double sum)在信息顯示框中輸出sumsum的絕對值大于1e20,輸出e,即對太大或太小的數(shù)顯示出錯sum小于等于1e20且大于等于1e8,顯示格式為d.dexxsum大于等于-1e20且小于等于-1e8,顯示格式為-d.dexxsum的值在-1e8和1e8之間,若是0,顯示0.其他,按實際顯示第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析compute.cvoid compute()簡單計算器的主處理函數(shù)最外層循環(huán)由鼠標(biāo)右鍵控制,
21、單擊右鍵則計算器退出在其內(nèi)層,判斷鼠標(biāo)左鍵是否單擊,無則僅做移動鼠標(biāo)光標(biāo)處理若單擊左鍵,且mouseleftflag全局變量為1,則置該變量為0,避免重復(fù)進入,并進行相應(yīng)處理若單擊的是c,則啟用計算器若單擊0-9數(shù)字鍵,則進行第1個或第2個輸入數(shù)據(jù)的處理若單擊加,減,乘,除,等號按鈕,進行相應(yīng)的計算處理若單擊小數(shù)點按鈕的處理若單擊求平方根按鈕的處理若單擊+/-按鈕的處理double calculate(double u,double v,int sign)加減乘除計算處理根據(jù)sign的運算符進行加減乘除的計算處理計算結(jié)果保存在u中,但由函數(shù)返回void main()計算器的main()函數(shù)應(yīng)用
22、程序由多個文件組成時,僅能有一個main()函數(shù)簡單計算器簡單計算器-函數(shù)設(shè)計函數(shù)設(shè)計第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器源程序: 略第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析簡單計算器簡單計算器測試: 關(guān)于測試方法和特殊輸入的測試,針對簡單計算器程序,我們可以從以下幾個方面來檢驗程序功能是否正確。1界面及按鈕單擊測試 檢查界面布局是否合理、正確,單擊按鈕是否有按下再彈起效果,單擊按鈕的輸入是否正確。簡單計算器簡單計算器第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析測試:簡單
23、計算器的功能測試(1) 加、減、乘、除四則運算的測試。(2) 優(yōu)先級處理的測試 單擊1、+、2、* 、4、=按鈕,結(jié)果是12,即不支持四則運算的優(yōu)先級。因為單擊*按鈕時,1+2的結(jié)果3已經(jīng)計算并顯示在信息顯示框中,此時繼續(xù)計算乘4得結(jié)果12。簡單計算器簡單計算器第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析測試: (3) 求平方根運算的測試 1)計算sqrt(9) 先單擊9、再s按鈕,看結(jié)果是否正確。 2)計算1+sqrt(9) 檢查是否能正確1+sqrt(9)。 通過以上測試可以基本確定計算器程序是否實現(xiàn)了預(yù)定的功能。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析主要內(nèi)容
24、主要內(nèi)容通訊錄范例解析簡易計算器范例解析俄羅斯方塊范例解析第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊問題描述: 要求支持鍵盤操作和7種不同類型方塊的旋轉(zhuǎn)變換,并且界面上顯示下一個方塊的提示以及當(dāng)前的玩家得分 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊功能分析: 俄羅斯方塊游戲需要解決的問題包括:( 1)整個游戲界面的圖形顯示;(2)各種方塊形狀的表示;(3)如何控制方塊的移動、旋轉(zhuǎn)和下落速度;(4)如何判斷方塊是否到底;(5)如何判斷一行是否填滿以及如何消去填滿的行;(6)如何判斷游戲的結(jié)束及如何終止游戲;(7)游戲難度的設(shè)計
25、和得分規(guī)則 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊功能分析:重點:游戲面板的數(shù)據(jù)結(jié)構(gòu) :二維數(shù)組 7種形狀方塊的數(shù)據(jù)結(jié)構(gòu) :結(jié)構(gòu)體保存每種形狀方塊的坐標(biāo)、顏色 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊設(shè)計:程序總體結(jié)構(gòu):void main()initializegraph();settimer(newtimer); /*設(shè)置新的時鐘中斷*/while(1)startgame();processingame();if(bover) break;killtimer();closegraph();第第4 4章章 大型綜合程序范
26、例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊界面設(shè)計 :分為左右兩個部分:左邊為游戲面板右邊有三個框:下一形狀提示框、速度框和記分框 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊數(shù)據(jù)結(jié)構(gòu)設(shè)計:定義如下的結(jié)構(gòu)體來表示每一個形狀:struct block int arrxy8; int ncolor; int nnext;可用4*4的格子顯示7種形狀,并用4個數(shù)對來表示: arrxy 0、arrxy 1表示第一個數(shù)對,arrxy 2、arrxy 3表示第二個數(shù)對 。 例如, (-2,0)、(-1,0)、(0,0)、(1,0) 表示左邊的方塊 -1 0 1 2-3-
27、2-10 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊數(shù)據(jù)結(jié)構(gòu)設(shè)計:每一種形狀都可以進行旋轉(zhuǎn),旋轉(zhuǎn)后的變形體同樣可用結(jié)構(gòu)體block表示。所有的7種形狀和它們的旋轉(zhuǎn)體(共19個)可保存在一個全局?jǐn)?shù)組arrayblock中。block中的nnext就是當(dāng)前形狀逆時針旋轉(zhuǎn)后的下一個形狀在該全局?jǐn)?shù)組中的索引。 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊數(shù)據(jù)結(jié)構(gòu)設(shè)計:第一個形狀和它的旋轉(zhuǎn)體在arrayblock中的表示 block arrayblock19=/*x1,y1,x2,y2,x3,y3,x4,y4, color, next,第
28、一種形狀*/ 0,-2, 0,-1, 0, 0, 1, 0, cyan, 1, /*第一種形狀,對應(yīng)圖3-12的第一個*/-1, 0, 0, 0, 1,-1, 1, 0, cyan, 2, /*一種旋轉(zhuǎn)體,對應(yīng)圖3-12的第二個*/ 0,-2, 1,-2, 1,-1, 1, 0, cyan, 3, /*另一種旋轉(zhuǎn)體,對應(yīng)圖3-12的第三個*/-1,-1,-1, 0, 0,-1, 1,-1, cyan, 0, /*第三種旋轉(zhuǎn)體,對應(yīng)圖3-12的第四個*/.第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊數(shù)據(jù)結(jié)構(gòu)設(shè)計:游戲的主界面游戲的主界面:寬10、高20的游戲板數(shù)據(jù)
29、結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu):全局?jǐn)?shù)組gameboard1222, 1表示已有方塊,0表示這個位置空著。在10*20基礎(chǔ)上各加2行、2列為了便于判斷形狀在移動時是否到邊、到底。整個屏幕的坐標(biāo)坐標(biāo)系原先為640*480。在此游戲中,將16個像素定義為一個方格的邊長,所以坐標(biāo)系轉(zhuǎn)變成為了40*30(640/16=40,480/16=30)。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊數(shù)據(jù)結(jié)構(gòu)設(shè)計:絕對坐標(biāo)和相對坐標(biāo)的轉(zhuǎn)換 相對坐標(biāo)即指在結(jié)構(gòu)體block中的4對坐標(biāo) 某個形狀的絕對坐標(biāo):指原點方塊(4*4格子中的第2列、第4行的方塊)在10*20的游戲面板中的坐標(biāo) 第第4 4章章 大
30、型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊-程序結(jié)構(gòu)程序結(jié)構(gòu) 1個.h文件和4個.c文件,共20個函數(shù);函數(shù)相互關(guān)系見右圖 第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊-函數(shù)設(shè)計函數(shù)設(shè)計timer.c文件文件名函數(shù)原型函數(shù)功能函數(shù)處理描述timer.cvoid interrupt (*oldtimer)(void)指向原來時鐘中斷處理過程入口的中斷處理函數(shù)指針(句柄)void interrupt newtimer(void)新的時鐘中斷處理函數(shù)調(diào)用(*oldtimer)()函數(shù)句柄,計時器自加1void settimer(void interru
31、pt(*intproc)(void)設(shè)置新的時鐘中斷處理過程調(diào)用setvect()設(shè)置新的時鐘中斷處理過程void killtimer()恢復(fù)原有的時鐘中斷處理過程調(diào)用setvect()恢復(fù)原有的時鐘中斷處理過程第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊-函數(shù)設(shè)計函數(shù)設(shè)計drawing.c文件文件名函數(shù)原型函數(shù)功能函數(shù)處理描述drawing.cvoid initializegraph()初始化圖形模式調(diào)用initgraph()切換到圖形模式初始化若發(fā)生錯誤,則返回錯誤碼。void initializegameboard()初始化游戲面板以及下一形狀提示框、計分
32、框和難度框調(diào)用bar()、rectangle()等庫函數(shù)繪圖函數(shù)繪制游戲界面。調(diào)用outtextxy()函數(shù)顯示文字。第第4 4章章 大型綜合程序范例解析大型綜合程序范例解析俄羅斯方塊俄羅斯方塊-函數(shù)設(shè)計函數(shù)設(shè)計util.c文件函數(shù)原型函數(shù)功能函數(shù)處理描述util.cvoid drawsquare(int x, int y)在坐標(biāo)(x, y)處畫方塊調(diào)用庫函數(shù)bar()繪制方塊void drawblock(int blockindex, int sx, int sy,int color)在坐標(biāo)(sx, sy)處繪制顏色為color的形狀調(diào)用drawsquare()函數(shù)繪制形狀int iscon
33、flict(int blockindex, int x, int y)判斷形狀是否能存在于坐標(biāo)(x, y)處無沖突返回0,有沖突返回1void handleleft(int blockindex,int *x, int *y)按下左方向鍵時的處理函數(shù)調(diào)用isconflic()函數(shù)判斷形狀是否可以左移,void handleright(int blockindex,int *x, int *y)按下右方向鍵時的處理函數(shù)調(diào)用isconflic()函數(shù)判斷形狀是否可以右移,void handleup(int *blockindex,int *x, int *y)按下上方向鍵(旋轉(zhuǎn)鍵)時的處理函數(shù)調(diào)用isconflic()函數(shù)判斷形狀是否可以旋轉(zhuǎn),int handledown(int blockindex,int *x, int *y)按下向下方向鍵或自由下落時的處理函數(shù)形狀在自由下落返回0,無法下落了返回1,并做相應(yīng)處理int islinefull(int y)判斷第y行是否已被填滿填滿返回1,否則返回0void killline(int y)消去第y行將消去的行置為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運營餐廳課程設(shè)計
- 勞動合同法對媒體行業(yè)從業(yè)者的管理探討
- 運動館親子訓(xùn)練課程設(shè)計
- 檢修部副主任安全職責(zé)(4篇)
- 二零二五年度大型活動專用班車租賃合同3篇
- 學(xué)校教職工規(guī)章制度(2篇)
- 安全生產(chǎn)十一項整治方案范例(2篇)
- 二零二五年度房地產(chǎn)項目招投標(biāo)合同范本及審批流程3篇
- 項目申報專員崗位的職責(zé)表述模版(2篇)
- 2024年粵教新版九年級科學(xué)下冊階段測試試卷
- 物業(yè)年終總結(jié)匯報工作
- 金色簡約蛇年年終總結(jié)匯報模板
- 醫(yī)院住院病歷質(zhì)量檢查評分表(評分標(biāo)準(zhǔn))
- 12.1 擁有積極的人生態(tài)度(教學(xué)設(shè)計)2024七年級道德與法治上冊
- 視聽說課程(《走遍美國》)教學(xué)方案
- 2024年內(nèi)蒙古中考語文試卷五套合卷附答案
- 高中體育與健康-短跑教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 廠房廠區(qū)保潔方案
- 汽車租賃服務(wù)方案(投標(biāo)方案)
- 中國鋰離子電池行業(yè)發(fā)展環(huán)境(PEST)分析
- ODM合作合同協(xié)議書范本全面(2024版)
評論
0/150
提交評論