程序設計實踐第5章課件_第1頁
程序設計實踐第5章課件_第2頁
程序設計實踐第5章課件_第3頁
程序設計實踐第5章課件_第4頁
程序設計實踐第5章課件_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章綜合程序練習題

主要內容大型程序設計的要求9個大型程序設計題目分析第5章綜合程序練習題大型程序設計的要求題目要求:每道題都給出了問題的描述、基本要求、高級要求、難點分析、主要數據結構及主要算法提示等,以便供大家選擇練習。其中“基本要求”和“高級功能”是兩個不同層次的功能要求。

第5章綜合程序練習題

主要內容大型程序設計的要求9個大型程序設計題目分析第5章綜合程序練習題——打字練習1:問題描述打字練習是一個非常有用的小程序,電腦初學者可以借助它來熟悉鍵位,新手可以利用它來提高打字速度。2:基本功能鍵位練習、單詞練習、文本練習3:高級功能增加音效、暫停功能、繼續(xù)上次未完成的練習第5章綜合程序練習題——打字練習難點分析1)虛擬鍵盤由于有很多按鍵所以繪制時會比較繁瑣。至于如何反像顯示一個按鍵,我們會在在算法提示部分給出。2)鍵位練習部分由于有些鍵是沒有對應的ASCII碼的,所以我們無法使用ASCII碼來識別用戶的按鍵,應當使用鍵盤碼來識別它。函數bioskey可以獲得按鍵的鍵盤碼。第5章綜合程序練習題——打字練習設計及實現要點圖形模式初始化選擇練習模式鍵位練習單詞練習文本練習結束清理模塊打字練習程序的總體結構

第5章綜合程序練習題——打字練習主要數據結構分析(二)2)在鍵位練習的部分,由于要經常對虛擬鍵盤上的某個鍵進行繪制,為了繪制時的方便我們可以使用一個結構來表示虛擬鍵盤上的每個按鍵。structkey{structrectkeyRect;

intkeyNum;

charkeyName[10];};keyRect就代表了按鍵在屏幕上占據的一個矩形區(qū)域。keyNum是按鍵的鍵盤碼。keyName是按鍵的名稱,繪制時顯示在按鍵上。第5章綜合程序練習題——打字練習主要數據結構分析(三)3)使用structkeykeyArray[MAXKEY]數組來保存所有要繪制的按鍵structkeykeyArray[MAXKEY];第5章綜合程序練習題——打字練習主要算法提示1)隨機產生按鍵:通過產生一個隨機數作為索引值訪問keyArray數組,來隨機產生需要用戶輸入的按鍵。然后將對應的按鍵反像顯示。2)反像顯示一個按鍵:假設R1是我們要反像顯示的按鍵在屏幕上占據的一個矩形區(qū)域。(注:R1是一個structrect結構的對象,R1的值可以從keyArray數組中獲得。

3)getimage的作用是將一個矩形區(qū)域的圖像復制到buff中,而putimage的作用是將buff中的圖像輸出到屏幕中的某個位置。而參數NOT_PUT的作用是告訴putimage在輸出時將圖像反像顯示。第5章綜合程序練習題——電子琴難點分析1)曲目文件的格式設計。業(yè)界廣泛采用midi文件,但程序員新接觸時,需要了解它的格式等技術,解碼、編碼也都存在難度。可自行設計一種格式,記錄鍵盤按鍵及時間間隔。這樣編碼和解碼都很簡單。2)圖形描繪。這是本程序最主要的工作。在考慮如何設計出一個美觀的圖形時,好要考慮其它很多方面:背景色、菜單顏色、菜單大小、琴鍵顏色、琴鍵的形狀、顯示琴鍵被按下、顯示波形圖等。3)響應鼠標事件。在DOS環(huán)境下響應鼠標操作比較有難度。第5章綜合程序練習題——電子琴設計及實現要點界面初始化模塊結束清理模塊播放模塊發(fā)聲模塊擊鍵處理模塊實時彈奏模塊曲目編輯模塊電子琴程序的總體結構

第5章綜合程序練習題——電子琴主要數據結構分析(一)/*系統狀態(tài)*/enumsytem_status{system_status_normal,system_status_paused}/*系統模式*/enumsytem_modul{system_modul_intime,system_status_play,system_status_edit}/*定義顏色枚舉*/typedefenumcolor{intblue,intred,…….}COLOR;定義系統常量第5章綜合程序練習題——電子琴主要數據結構分析(三)typedefstructmenu_item_node{char*name;CTRL_KEYhotkey;menu_item_node*next;}MENU_ITEM;#definemenu_item_listMENU_ITEMtypedefstructmenu_group{char*name;CTRL_KEYhotkey;menu_item_listitemList;/*文件菜單組下有幾個菜單項*/}MENU_GROUP;4)一個菜單項5)定義菜單組第5章綜合程序練習題——電子琴主要數據結構分析(四)typedefstructrectangle{POSITIONup_start,//上方的起始位置POSITIONup_end,//上方的結束位置POSITIONdown_start,//下方的起始位置POSITIONdown_start//下方的結束位置}RECTANGLE;typedefstructcoordinate{intx;inty;}POSITION;6)定義某個點的坐標7)定義一個形狀的四個位置,注意邊線均為直線第5章綜合程序練習題——電子琴主要數據結構分析(五)typedefstructkey_record{intkeynum,inttimeinterval}KEY_RECORD;typedefstructgragh{RECTANGLEshape,COLORframeColor,COLORfillColor}GRAGH;8)定義一個圖形,包括形狀、邊框色、填充色9)定義一個擊鍵記錄第5章綜合程序練習題——電子琴主要算法提示參考以下幾個主要函數的定義:初始化函數:初始化全局配置信息intinitConfig(CONFIG*pConfig);描繪界面:此函數可在初始化界面時用,也可在用戶設置了選項后重新描繪界面時調用intpaintFrame(CONFIG*pConfig);畫一個圖形intpaintShape(GRAGH*pShape);在指定位置打一個指定大小的字intpaintChar(GRAGH*pShape,char*name);一些大的處理函數,如處理新建文件,自行補充intonNewOpen();第5章綜合程序練習題——簡易畫圖板1:問題描述簡易畫圖板是一個簡單的繪圖工具,它提供了一些基本的畫圖功能。界面由工具欄、調色板和繪圖區(qū)組成。

2:基本功能繪制直線、矩形、橢圓、圓、橡皮擦、填充3:高級功能支持對選定圖像中的一個矩形區(qū)可以將繪制的圖案保存為16色的BMP文件。可以打開一幅16色的BMP圖片進行修改。第5章綜合程序練習題——簡易畫圖板難點分析1)填充功能。雖然Tc圖形庫中有填充函數floodfill,但是這個填充函數不符合我們的要求。因為這個填充函數在調用時除了要指定填充區(qū)域中的一點,還需要指定要填充的區(qū)域邊界的顏色,獲取圖像邊界顏色的操作對于用戶來說是比較麻煩的。此外,我們希望填充區(qū)域的邊界可以是不同顏色的。所以,需要設計自己的填充函數。2)BMP文件的打開和保存。必須了解BMP文件的結構,以知道如何從文件中讀出需要的數據以及如何將數據保存到bmp文件中。第5章綜合程序練習題——簡易畫圖板主要算法提示首先由用戶指定填充區(qū)域中的任一點,以該點作為種子點,然后分別向上下左右四個方向檢查該點的相鄰點。如果這些點和種子點的顏色相同,則填充它,否則,就視為邊界點。然后再以那些檢測到的非邊界點作為種子點,以同樣的方式檢查它們的相鄰點。這樣不斷的檢測、填充就可以將區(qū)域填充滿。推薦使用隊列來實現一個非遞歸的算法。非遞歸的填充算法:a、將第一個種子點放入隊列b、當隊列非空b1、從隊列中取出一點b2、將該點置為填充色b3、分別檢查上下左右四點,如果是非邊界點則將其放入隊列中c、算法結束第5章綜合程序練習題——貪吃蛇1:問題描述貪吃蛇游戲是一個深受人們喜歡的游戲:一條蛇在密閉的圍墻內,在圍墻內隨機出現食物,通過按鍵控制蛇向上下左右四個方向移動,蛇撞到食物,則食物被吃掉,蛇的身體增加一節(jié)。如果蛇在移動過程中,撞到墻壁或身體交叉(蛇頭撞到自己的身體)游戲結束?,F要求利用TurboC2.0來實現該游戲。

2:基本功能提供圖形界面、鍵盤控制游戲、計分機制、結束判斷3:高級功能暫停功能:能隨時通過按鍵來暫停游戲,再按一次則繼續(xù)游戲。速度調節(jié)功能獎勵機制音效功能第5章綜合程序練習題——貪吃蛇主要數據結構提示(一)charGameBoard[ROW][COL];/*游戲板所有單元的坐標*/enumUnitState{FREE,BOARDER,SNAKE,FOOD,BONUS};enumDirection{LEFT,RIGHT,UP,DOWN};游戲場景用一個二維數組表示2)游戲場景內各單元的狀態(tài)用枚舉類型來表示3)移動方向利用枚舉類型來表示第5章綜合程序練習題——貪吃蛇主要數據結構提示(二)structFood{intx;inty;intdie;/*食物是否已經被吃*/intisBonus;/*是否為獎勵食物*/};structSnakeNode{intx;inty;structSnakeNode*pre;structSnakeNode*next;};4)利用結構體來表示蛇身體的一節(jié),最后用循環(huán)鏈表來表示整條蛇5)食物(包括獎勵食物)用結構體來表示第5章綜合程序練習題——貪吃蛇主要算法提示碰撞檢測模塊:蛇移動模塊:在程序中定義循環(huán)鏈表來表示蛇,并記錄蛇頭指針以及蛇尾指針、當前移動方向。若有方向按鍵信息:a1.按鍵方向跟當前方向相同或是相反,則不做處理;a2.否則將當前方向設置為新的方向;按當前方向得到蛇頭的下一位置;對該位置進行碰撞檢測,判斷該位置是什么狀態(tài)c1.若是蛇身和墻壁,跳到步驟e;c2.若是空白,則將蛇尾設為蛇頭,將倒數第二節(jié)設為蛇尾,更新蛇頭的位置為當前的新位置。界面上就把當前最新位置用蛇的顏色畫上,并把原蛇尾用背景色擦除。c3.若是食物,則新增加當前位置做為蛇頭,蛇尾不變。利用記分模塊更新分數。并再重新隨機產生食物。返回a做循環(huán);游戲結束第5章綜合程序練習題——五子棋1:問題描述五子棋基本規(guī)則:棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個棋子稱為“五連”。黑白雙方先在棋盤上形成五連的一方為勝。若對局雙方均認為不可能形成五連或是剩余棋盤空間已不足以形成五連則為和棋。下棋過程中不考慮各種禁手規(guī)則。2:基本功能提供圖形界面、鍵盤操作、人人對戰(zhàn)、支持某方先下、棋盤15*15,顯示網格線,黑白棋子、當前光標所在;顯示當前執(zhí)棋方3:高級功能支持人機對戰(zhàn),顯示人機對子情況和勝負判別悔棋功能音效功能第5章綜合程序練習題——五子棋難點分析1)勝負判別2)悔棋功能3)人機對戰(zhàn)的人工智能部分五子棋的人機對戰(zhàn)是一個典型的博弈問題。博弈問題一般可用極大-極小法和α-β法求解(讀者可找相關資料,一般人工智能或博弈論教材中會涉及這些內容)。而即便是用α-β法,五子棋的搜索空間還是相當龐大。第5章綜合程序練習題——五子棋設計及實現要點游戲初始化模塊主循環(huán)控制模塊鍵盤處理模塊勝負判別模塊人工智能模塊游戲結束清理模塊五子棋程序的總體結構

第5章綜合程序練習題——五子棋主要數據結構提示(一)1)棋盤用15*15的二維數組表示,數組的每一個元素對應棋盤上的一個交叉點,用‘0’表示空位、‘1’代表玩家1的子、‘2’代表玩家2的子:charChessBoard[15][15];第5章綜合程序練習題——五子棋主要數據結構提示(二)2)用于搜索過程的結構體:typedefstructfive_chess*point;structfive_chess{

intx;

inty;

intlayer;

intvalue;

intscore;

intchess[LENGTH][LENGTH];

intrecord[LENGTH][LENGTH];};其中,x,y表示在某個位置上擴展出來的新節(jié)點,layer是表示第幾層擴展,用于控制擴展深度。value表示該點上極大極小值,score表示葉子節(jié)點的得分,用于推算父輩節(jié)點的value,chess這個二維數組表示擴展出來的棋盤信息,record記錄在x、y點上擴展過的節(jié)點,如果沒有擴展record中對應某個值為0。如果record中沒有可以擴展的節(jié)點,那么該層擴展結束,返回一個特定值。第5章綜合程序練習題——五子棋主要算法提示(一)對棋盤的評分算法。評估一個棋盤的分數,主要通過掃描整個棋盤,對每個點評分。對某個點上評分從四個方向(角度分別為0、45、90、135的四個方向)分別統計,進而累積該點總分,最后得到整個棋盤的分數。實際上對當前的局面按照下面規(guī)則的順序進行比較,如果滿足某一條規(guī)則的話,就給該局面打分并保存,然后退出規(guī)則的匹配。注意這里的規(guī)則是根據一般的下棋規(guī)律的一個總結,在實際運行的時候,可以添加規(guī)則和對評分機制加以修正。第5章綜合程序練習題——五子棋主要算法提示(二)人工智能部分的搜索算法流程如下(以擴展兩層為例):根據棋盤信息chessman[15][15]建立根結點s0(數據結構:five_chesman),并把s0壓入堆棧中擴展s1=top();判斷s1->layer是否等于-1s1->layer等于-1,push(s1),擴展s2=top(),查看s2->layer是否-1s2->layer!=-1,計算此時棋盤得分score,并判斷是否要更改上一層的極小值s2->layer==-1,pop():判斷是否更改極大值,max_chess指向得分最高的棋盤如果s1->layer=-1,表示搜索結束,返回最大棋盤信息max_chess第5章綜合程序練習題——搬運工1:問題描述

在一個四周有圍墻的倉庫的中,堆放著若干箱子、阻擋箱子前進的障礙物,以及標識出了箱子需要被推到的目標位置。游戲者通過觀查分析,找到合適的策略,然后只能用推的方法把所有散落在場地中的箱子借助于空閑區(qū)間推到目標位置,即獲得勝利;否則失敗2:基本功能場地元素定義與設計

、箱子的搬運動作

、提供一定數量的按鍵功能實現游戲者對搬運工的多種操作

3:高級功能提供多套場地

提供視聽效果智能識別游戲的終止自動完成移動第5章綜合程序練習題——搬運工難點分析墻壁箱子xy死角判定:這里舉一個例子,如下圖所示:

死角判定第5章綜合程序練習題——搬運工設計及實現要點搬運工程序的總體結構

第5章綜合程序練習題——搬運工主要數據結構提示系統的組成元素主要包含外圍墻壁、內部障礙物、箱子、搬運工。我們先建立一個虛擬的元素(不妨稱之為容器),它用來將整個圖形界面網格化,并記錄各種圖形元素的位置等屬性。然后,再為各個圖形元素建立相應的保存其特有信息的數據結構。先定義兩個基本結構,在后面也會用到:typedefstructtagRect /*矩形*/{PointleftTop,rightButton;/*矩形左上定點和右下定點*/}Rect;typedefstructtagPoint /*直角坐標系點*/{ intx,y; }Point;第5章綜合程序練習題——搬運工主要數據結構提示1)虛擬的容器結構體:typedefstructtagContainer{ RectcRect; /*確定整個容器在屏幕上的坐標*/ intcBoard[N][M]; /*N、M是事先設定的網格行數和列數*/}Container;其中數組cBoard其取值代表各網格是何種圖形元素:箱子、空格、障礙、目標位置,其它必要屬性,可自行酌情添加。第5章綜合程序練習題——搬運工主要數據結構提示2)搬運工和箱子的結構體:由于墻壁、障礙物和箱子的目標位置都是固定不變的,它們的圖形可以在初始化時一次性完成,而其位置則可保存在上面的Container中,下面是搬運工和箱子的結構體:typedefstructtagObject{ char*oImage; /*指向圖像緩沖區(qū)的指針*/ size_toImageSize;/*stddef.h中size_t定義為unsigned,這里表示圖像大小*/ PointoLocation; /*記錄對象在網格中的坐標*/ }Object;第5章綜合程序練習題——搬運工主要算法提示1)搬運工游戲的圖形界面中除了搬運工和箱子,都是固定元素,因此可以將整個場地網格化,對整個圖形界面的管理簡化為對各個網格的管理即可。2)對于搬運工和箱子的移動效果,可以直接在一個頁面上(即無需使用換頁機制)操作。3)對于智能識別和自動移動功能,只要根據網格的狀態(tài)屬性(即當前各網格是何種物體)加以處理即可。第5章綜合程序練習題——大富翁1:問題描述本游戲基于雙人游戲模式的簡單版本。游戲在一個由城市、道路、及其他特殊建筑組成的地圖上進行,游戲雙方通過擲骰子獲得的前進或后退步數不斷地前進或后退,當落在可以購買空地的位置時,如果現金足夠則可選擇購買之;當落在自己已買下地產的位置時,如現金足夠則可選擇建設之;當落在對手地產的位置上時,則要支付相應的罰金;落在地圖中某些特殊位置還會有特殊的懲罰或獎勵。最后當一方現金為零時游戲結束,現金為零的一方失敗,另一方獲,現金為零的一方失敗,另一方獲勝。2:基本功能游戲的環(huán)境地圖構建、游戲狀態(tài)顯示、游戲階段的輸入只包含擲骰子及確定相關選項3:高級功能提供更多的特殊地區(qū),如旅館、監(jiān)獄、股票交易中心、銀行,并為之設計相應的活動規(guī)則。在特殊位置提供更多的活動內容,如獲得幾輪之內不用交罰款、可以奪取他人地產等特權。提供游戲進度保存功能第5章綜合程序練習題——大富翁難點分析本游戲的難點主要集中在圖形處理和數據處理的簡化設計上。數據處理設計將在數據結構中提示,下面先提供一個簡化圖形處理的方案。由于實際活動的圖形元素只有游戲者代表人物,其移動只取決于當前位置和下一個位置。所以,實際編程時只需要把游戲中各個位置的坐標從初始位置開始,按實際到達順序用一線性表來管理。每走一步就將線性表的指針后移一位,就可取得下一個城市的位置。當指針越過最后一位時,重新指到初始位置,進入下一輪循環(huán)。第5章綜合程序練習題——大富翁設計及實現要點大富翁程序的總體結構

第5章綜合程序練習題——大富翁主要數據結構提示(一)typedefstructtagCity{PointcCenter; /*記錄人物進入城市時,其圖像左上角對應在當前圖形模式坐標系中的坐標*/ intcSpecialEvent;/*該城市的特殊地區(qū)、特殊位置;為了處理方便,可自行定義一組描述這些地區(qū)和位置的宏定義*/ }City;1)城市和特殊地區(qū)的結構體:前面提及的那個線性表就可以由City作為元素構成,這樣只要在初始化時畫出整個地圖,然后將每個城市的City結構按“難點分析”中所說方法保存下來即可。第5章綜合程序練習題——大富翁主要數據結構提示(二)2)人物的結構體:typedefstructtagPeople{ char*pImage; /*指向人物圖像緩沖區(qū)的指針*/ char*pBackgroundImage; /*指向被人物圖像覆蓋的圖像緩沖區(qū)的指針*/ size_tpImageSize; /*圖像大小*/ PointpCoordinate; /*人物圖像左上角坐標*/ intpCash;/*記錄該人物的剩余現金*/ intpStatus; /*標示該人物的狀態(tài),即是處于可移動還是在醫(yī)院狀態(tài)中,當pStatus為0時可移動,正值表示住院,負值表示原地停留;絕對值為還需停留的天數*/}People;狀態(tài)欄和消息欄的管理比較簡單,只需要隨游戲進行更新相關信息就可以了。第5章綜合程序練習題——大富翁主要算法提示通過位圖在屏幕上顯示出一個基本的環(huán)境地圖、游戲雙方的人物形象、狀態(tài)欄和消息欄。注意:由于畫面比較復雜,最好是調用位圖或已轉換成其它圖像格式的文件,否則單獨繪制一個地圖就會有較大的工作量。同時應記錄下各圖形元素的位置,以供數據處理模塊使用。開始后輪流為每位游戲者提供一個前進的步數,游戲者到達一個地方后,系統根據游戲規(guī)則,做出相應的判定并調整其持有的現金數量。第5章綜合程序練習題——賽車1:問題描述這里所講的賽車是基于平面第三視角的,即在一個平面的跑道上,由游戲者操控一輛賽車,與電腦控制的多臺賽車比賽。游戲者能對賽車的操作有:向左、向右、加速、減速、停車。比賽中如果游戲者的賽車與別的賽車相撞,則其速度均減為最小,游戲者必須重新開始加速。游戲者如果第一個到達終點,則獲勝,否則失敗。本游戲的動畫處理較為復雜,要求能夠顯示出各賽車前進的動態(tài)效果,以及一定的視聽功能。

2:基本功能游戲環(huán)境、鍵盤控制賽車、視聽效果、游戲控制、動畫效果顯示3:高級功能高級視聽效果

提供兩人對陣游戲模式提供不同的游戲關卡,不同關卡的賽車數目和速度都可選擇。

第5章綜合程序練習題——賽車難點分析動畫效果顯示刷新賽車位置時,先畫出游戲者賽車,然后計算出其他賽車相對游戲者賽車的位置,如果在屏幕范圍內則畫出,否則不畫。注意,相對位置只應計算在屏幕上的垂直高度,水平位置應保留在各賽車的結構體中。為了方便作圖,跑道最好使用同一種顏色,將賽車圖像四周用這種顏色圍上一圈,如寬度為兩個像素點,這樣每次移動兩個像素點距離后的顯示刷新只需直接對賽車圖像進行一次putimage函數操作即可。用這方法可以避免圖像閃爍現象。當然,更復雜的避免閃爍的方法是使用頁交替法。不過使用頁交替法時仍應盡量減少作圖以使畫面顯示流暢。第5章綜合程序練習題——賽車設計及實現要點初始化圖形界面讀取游戲者輸入修改賽車位置參數根據賽車參數刷新界面,重畫色道到達終點是否退出系統并清理垃圾賽車程序的總體結構

第5章綜合程序練習題——賽車主要數據結構提示(一)typedefstructtagContainer /*賽車場的容器,描述固定元素的位置*/{ RectcRacingGround; /*賽車區(qū)域矩形*/ RectcAutodrome; /*賽車跑道矩形區(qū)*/ RectcColorStrip; /*跑道兩旁的色道矩形區(qū)*/}Container;1)賽車場的容器結構體:描述固定元素的位置typedefstructtagColorStripe{ unsignedcsColor[N];/*N是事先設定的色道條數,該表記錄各色道顏色*/ intcsStripeOff;/*顯示的最上面一條色道在csColor中的下標*/}ColorStripe;2)色道結構體:第5章綜合程序練習題——賽車主要數據結構提示(二)typedefstructtagRacingCar{ char*rcImage; /*指向賽車圖像*/ size_trcImageSize; /*賽車圖像大小*/ unsignedrcSpeed; /*賽車速度*/ unsignedrcDisplacement; /*相對原點位移*/ unsignedrcVertical; /*水平位置*/ PointrcAbosoluteCoordiante;/*相對出發(fā)點的絕對距離即豎直位置*/ intrcFlag; /*標識賽車身份*/}RacingCar;3)賽車結構體:注意,rcAbosoluteCoordinate最好只是游戲賽車使用,其它賽車的位置根據前面提到的方法來計算出其各自位置,這樣可以簡化數據處理過程。第5章綜合程序練習題——賽車主要算法提示為了數據處理的方便,采用直道作為賽車道,并以初始點作為原點。為了表現出賽車前進的效果,可以在車道兩旁加上橫向的顏色不同、相間排列的色道,然后將色道作周期性循環(huán)下移顯示就可以實現動畫效果。游戲中,始終保持游戲者賽車在屏幕上的垂直位置不變,這樣,就可以將游戲者的賽車作為其他物體的參照,方便各輛賽車座標位置的換算。車道兩旁的色道后移速度即為游戲者賽車的前進速度。其它賽車始終保持同一速度,并保存其各自的相對原點的距離,根據游戲者賽車相對原點距離就可算出其他賽車在當前屏幕中的位置。第5章綜合程序練習題——坦克大戰(zhàn)1:問題描述游戲者操控一到兩臺坦克,抵抗電腦控制的多臺坦克,保衛(wèi)金鷹(特指一個游戲者需要保護的物體);雙方通過火炮攻擊對方,坦克被炮彈擊中即被摧毀;對戰(zhàn)雙方如果還有在屏幕上活動的可用坦克,則在有坦克被摧毀后才能補充上來。游戲者坦克被全部摧毀或金鷹被摧毀則電腦方獲勝,若電腦坦克被全部摧毀則游戲者獲勝。2:基本功能游戲場景、游戲者控制的和電腦控制的坦克的運動狀況、游戲狀態(tài)判別勝負、提供足夠的按鍵實現游戲者對坦克的控制

3:高級功能視聽效果鼠標控制電腦坦克智能化第5章綜合程序練習題——坦克大戰(zhàn)難點分析本游戲難點主要集中在對坦克自動化控制的算法上。對于向固定目標前進的算法,可以先對N*M的網格做一次寬度優(yōu)先搜索(BFS),算法中注意判重,避免消耗過多的搜索時間,這樣可以在較短的時間內找出一條最短路徑。由于游戲者坦克運動不確定性太高,為電腦坦克搜索一條正確的攻擊游戲者坦克的路徑難度較高。

第5章綜合程序練習題——坦克大戰(zhàn)設計及實現要點游戲是否結束初始化圖形界面讀取游戲者輸入開炮,并顯示視聽效果根據當前數據移動坦克或不反應電腦坦克按預先設定做出相應反應更新狀態(tài)欄消息游戲者選擇開炮游戲者選擇移動退出系統并清理垃圾是否坦克大戰(zhàn)程序的總體結構

第5章綜合程序練習題——坦克大戰(zhàn)主要數據結構提示(一)typedefstructtagContainer{ Re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論