版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計說明書課程名稱: 數(shù) 據(jù) 結(jié) 構(gòu) 與 算 法 專業(yè): 計算機(jī)科學(xué)與技術(shù) 班級: 103013 姓名: 徐粵玲 學(xué)號: 03 指導(dǎo)教師: 苑擎飏 成績: 完成日期: 2012 年 1 月 12 日任 務(wù) 書題目:黑白棋系統(tǒng)設(shè)計內(nèi)容及要求:1.課程設(shè)計任務(wù)內(nèi)容 通過玩家與電腦雙方的交替下棋,在一個8行8列的方格中,進(jìn)行棋子的相互交替翻轉(zhuǎn)。反復(fù)循環(huán)下棋,最后讓雙方的棋子填滿整個方格。再根據(jù)循環(huán)遍歷方格程序,判斷玩家與電腦雙方的棋子數(shù)。進(jìn)行大小判斷,最紅給出勝負(fù)的一方。并根據(jù)y/n選項(xiàng),判斷是否要進(jìn)行下一局的游戲。2.課程設(shè)計要求實(shí)現(xiàn)黑白兩色棋子的對峙開發(fā)環(huán)境:vc+6.0實(shí)現(xiàn)目標(biāo):(1) 熟
2、悉的運(yùn)用c語言程序編寫代碼。(2) 能夠理清整個程序的運(yùn)行過程并繪畫流程圖(3) 了解如何定義局部變量和整體變量;(4) 學(xué)會上機(jī)調(diào)試程序,發(fā)現(xiàn)問題,并解決(5) 學(xué)習(xí)使用c+程序來了解游戲原理。(6) 學(xué)習(xí)用文檔書寫程序說明摘 要本文的研究工作在于利用計算機(jī)模擬人腦進(jìn)行下黑白棋,計算機(jī)下棋是人工智能領(lǐng)域中的一個研究熱點(diǎn),多年以來,隨著計算機(jī)技術(shù)和人工智能技術(shù)的不斷發(fā)展,計算機(jī)下棋的水平得到了長足的進(jìn)步該程序的最終勝負(fù)是由棋盤上崗雙方的棋子的個數(shù)來判斷的,多的一方為勝,少的一方為負(fù)。所以該程序主要運(yùn)用的戰(zhàn)術(shù)有削弱對手行動戰(zhàn)術(shù)、四角優(yōu)先戰(zhàn)術(shù)、在游戲開局和中局時,程序采用削弱對手行動力戰(zhàn)術(shù),即盡量
3、減少對手能夠落子的位置;在游戲終局時則采用最大貪吃戰(zhàn)術(shù),即盡可能多的吃掉對手的棋子;而四角優(yōu)先戰(zhàn)術(shù)則是貫穿游戲的始終,棋盤的四角圍穩(wěn)定角,不會被對手吃掉,所以這里是兵家的必爭之地,在阻止對手進(jìn)角的同時,自己卻又要努力的進(jìn)角。關(guān)鍵詞:黑白棋 編程 設(shè)計s目 錄1.引 言42.課題分析73.具體設(shè)計過程83.1設(shè)計思路83.2程序設(shè)計流程圖83.3.函數(shù)實(shí)現(xiàn)說明124.程序運(yùn)行結(jié)果145.軟件使用說明186.結(jié)論21參 考 文 獻(xiàn)23附錄:源代碼241.引 言數(shù)據(jù)結(jié)構(gòu)在計算機(jī)科學(xué)界至今沒有標(biāo)準(zhǔn)的定義。個人根據(jù)各自的理解的不同而有不同的表述方法:sartaj sahni在他的數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用一書
4、中稱:“數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)對象,以及存在于該對象的實(shí)例和組成實(shí) 例的數(shù)據(jù)元素之間的各種聯(lián)系。這些聯(lián)系可以通過定義相關(guān)的函數(shù)來給出。”他將數(shù)據(jù)對象(data object)定義為“一個數(shù)據(jù)對象是實(shí)例或值的集合”。clifford a.shaffer在數(shù)據(jù)結(jié)構(gòu)與算法分析一書中的定義是:“數(shù)據(jù)結(jié)構(gòu)是 adt(抽象數(shù)據(jù)類型abstract data type) 的物理實(shí)現(xiàn)?!?lobert l.kruse在數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計一書中,將一個數(shù)據(jù)結(jié)構(gòu)的設(shè)計過程分成抽象層、數(shù)據(jù)結(jié)構(gòu)層和實(shí)現(xiàn)層。其中,抽象層是指抽象數(shù)據(jù)類型層,它討論數(shù)據(jù)的邏輯結(jié)構(gòu)及其運(yùn)算,數(shù)據(jù)結(jié)構(gòu)層和實(shí)現(xiàn)層討論一個數(shù)據(jù)結(jié)構(gòu)的表示和在計算機(jī)內(nèi)的存儲
5、細(xì)節(jié)以及運(yùn)算的實(shí)現(xiàn)。數(shù)據(jù)結(jié)構(gòu)具體指同一類數(shù)據(jù)元素中,各元素之間的相互關(guān)系,包括三個組成成分,數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)的存儲結(jié)構(gòu)和數(shù)據(jù)運(yùn)算結(jié)構(gòu)。 1.1. 重要意義一般認(rèn)為,一個數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)元素依據(jù)某種邏輯聯(lián)系組織起來的。對數(shù)據(jù)元素間邏輯關(guān)系的描述稱為數(shù)據(jù)的邏輯結(jié)構(gòu);數(shù)據(jù)必須在計算機(jī)內(nèi)存儲,數(shù)據(jù)的存儲結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)形式,是其在計算機(jī)內(nèi)的表示;此外討論一個數(shù)據(jù)結(jié)構(gòu)必須同時討論在該類數(shù)據(jù)上執(zhí)行的運(yùn)算才有意義。 在許多類型的程序的設(shè)計中,數(shù)據(jù)結(jié)構(gòu)的選擇是一個基本的設(shè)計考慮因素。許多大型系統(tǒng)的構(gòu)造經(jīng)驗(yàn)表明,系統(tǒng)實(shí)現(xiàn)的困難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴(yán)重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。許多時候,確定了數(shù)
6、據(jù)結(jié)構(gòu)后,算法就容易得到了。有些時候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結(jié)構(gòu)與之適應(yīng)。不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常重要的。 選擇了數(shù)據(jù)結(jié)構(gòu),算法也隨之確定,是數(shù)據(jù)而不是算法是系統(tǒng)構(gòu)造的關(guān)鍵因素。這種洞見導(dǎo)致了許多種軟件設(shè)計方法和程序設(shè)計語言的出現(xiàn),面向?qū)ο蟮某绦蛟O(shè)計語言就是其中之一。 1.2. 研究內(nèi)容 在計算機(jī)科學(xué)中,數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中計算機(jī)的操作對象(數(shù)據(jù)元素)以及它們之間的關(guān)系和運(yùn)算等的學(xué)科,而且確保經(jīng)過這些運(yùn)算后所得到的新結(jié)構(gòu)仍然是原來的結(jié)構(gòu)類型。 “數(shù)據(jù)結(jié)構(gòu)”作為一門獨(dú)立的課程在國外是從1968年才開始設(shè)立的。 1968年美國唐歐克努特教授
7、開創(chuàng)了數(shù)據(jù)結(jié)構(gòu)的最初體系,他所著的計算機(jī)程序設(shè)計技巧第一卷基本算法是第一本較系統(tǒng)地闡述數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)及其操作的著作?!皵?shù)據(jù)結(jié)構(gòu)”在計算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機(jī)硬件和計算機(jī)軟件三者之間的一門核心課程。數(shù)據(jù)結(jié)構(gòu)這一門課的內(nèi)容不僅是一般程序設(shè)計(特別是非數(shù)值性程序設(shè)計)的基礎(chǔ),而且是設(shè)計和實(shí)現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基礎(chǔ)。 計算機(jī)是一門研究用計算機(jī)進(jìn)行信息表示和處理的科學(xué)。這里面涉及到兩個問題:信息的表示,信息的處理 。 而信息的表示和組織又直接關(guān)系到處理信息的程序的效率。隨著計算機(jī)的普及,信息量的增加,信息范圍的拓寬,使許多系
8、統(tǒng)程序和應(yīng)用程序的規(guī)模很大,結(jié)構(gòu)又相當(dāng)復(fù)雜。因此,為了編寫出一個“好”的程序,必須分析待處理的對象的特征及各對象之間存在的關(guān)系,這就是數(shù)據(jù)結(jié)構(gòu)這門課所要研究的問題。眾所周知,計算機(jī)的程序是對信息進(jìn)行加工處理。在大多數(shù)情況下,這些信息并不是沒有組織,信息(數(shù)據(jù))之間往往具有重要的結(jié)構(gòu)關(guān)系,這就是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。數(shù)據(jù)的結(jié)構(gòu),直接影響算法的選擇和效率。 計算機(jī)解決一個具體問題時,大致需要經(jīng)過下列幾個步驟:首先要從具體問題中抽象出一個適當(dāng)?shù)臄?shù)學(xué)模型,然后設(shè)計一個解此數(shù)學(xué)模型的算法(algorithm),最后編出程序、進(jìn)行測試、調(diào)整直至得到最終解答。尋求數(shù)學(xué)模型的實(shí)質(zhì)是分析問題,從中提取操作的對象,并找
9、出這些操作對象之間含有的關(guān)系,然后用數(shù)學(xué)的語言加以描述。計算機(jī)算法與數(shù)據(jù)的結(jié)構(gòu)密切相關(guān),算法無不依附于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率。運(yùn)算是由計算機(jī)來完成,這就要設(shè)計相應(yīng)的插入、刪除和修改的算法 。也就是說,數(shù)據(jù)結(jié)構(gòu)還需要給出每種結(jié)構(gòu)類型所定義的各種運(yùn)算的算法。 數(shù)據(jù)是對客觀事物的符號表示,在計算機(jī)科學(xué)中是指所有能輸入到計算機(jī)中并由計算機(jī)程序處理的符號的總稱。 數(shù)據(jù)元素是數(shù)據(jù)的基本單位,在計算機(jī)程序中通常作為一個整體考慮。一個數(shù)據(jù)元素由若干個數(shù)據(jù)項(xiàng)組成。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。有兩類數(shù)據(jù)元素:一類是不可分割的原子型數(shù)據(jù)元素,如:整數(shù)5,字符 n 等;另一類是由多個
10、款項(xiàng)構(gòu)成的數(shù)據(jù)元素,其中每個款項(xiàng)被稱為一個數(shù)據(jù)項(xiàng)。例如描述一個學(xué)生的信息的數(shù)據(jù)元素可由下列6個數(shù)據(jù)項(xiàng)組成。其中的出生日期又可以由三個數(shù)據(jù)項(xiàng):年、月和日組成,則稱出生日期為組合項(xiàng),而其它不可分割的數(shù)據(jù)項(xiàng)為原子項(xiàng)。關(guān)鍵字指的是能識別一個或多個數(shù)據(jù)元素的數(shù)據(jù)項(xiàng)。若能起唯一識別作用,則稱之為 主 關(guān)鍵字,否則稱之為 次 關(guān)鍵字。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)對象可以是有限的,也可以是無限的。 數(shù)據(jù)處理是指對數(shù)據(jù)進(jìn)行查找、插入、刪除、合并、排序、統(tǒng)計以及簡單計算等的操作過程。在早期,計算機(jī)主要用于科學(xué)和工程計算,進(jìn)入八十年代以后,計算機(jī)主要用于數(shù)據(jù)處理。據(jù)有關(guān)統(tǒng)計資料表明,現(xiàn)
11、在計算機(jī)用于數(shù)據(jù)處理的時間比例達(dá)到80%以上,隨著時間的推移和計算機(jī)應(yīng)用的進(jìn)一步普及,計算機(jī)用于數(shù)據(jù)處理的時間比例必將進(jìn)一步增大。2.課題分析編寫一個黑白棋游戲的c程序,包括以下功能:初始狀態(tài):在一個8*8的棋盤中央交叉排放黑白棋子各兩枚,白棋先走。(1)每個棋手下棋時,擺子的位置必須是以自己的棋子能包圍住對方一個或多個棋子,被包圍住的對方棋子將成為自己的棋子。包圍的方向可以是上下左右以及斜線8個方向,只要能連成一線即可。(2)當(dāng)輪到某一個棋手下子,但是他沒有可以包圍對方棋子的位置時,他必須停步,讓對方走棋,直到他可以走為止。(3)當(dāng)棋盤上一方的棋子為0或者下滿64格,游戲結(jié)束,棋子少者輸。(
12、4)當(dāng)一局結(jié)束后,可以選擇y/n選擇是否繼續(xù)下一局游戲3.具體設(shè)計過程3.1設(shè)計思路 程序界面應(yīng)是一個二維平面圖,所以數(shù)據(jù)的表示用二維數(shù)組,數(shù)組兩個下標(biāo)可以表示棋盤上的位置,數(shù)組元素的值代表棋格中的狀態(tài),共有三種情況,分別是空格、黑棋和白棋。這樣給數(shù)組元素的取值設(shè)定為0、1、2,其中0代表空格,*代表白色棋子,0代表黑色棋子。這樣程序的主要工作是接收棋手按鍵操作,一旦接收到回車鍵,說明棋手?jǐn)[子,先判斷是不是有效位置,也就是能不能包圍住對方棋子,如果能,便為棋子所在的位置往上下、左右、左上、左下、右上、右下8個方向?qū)ふ冶话鼑〉乃衅遄樱ū仨毷沁B續(xù)的,中間不能有空格),將這些被包圍住的對方棋子都
13、變成自己的棋子,然后對當(dāng)前棋盤中的黑白棋個數(shù)進(jìn)行統(tǒng)計并輸出結(jié)果。如果沒有這樣的位置可以落子,則停步,讓對方走棋,重復(fù)上述步驟,直到游戲結(jié)束。3.2程序設(shè)計流程圖 系統(tǒng)功能流程圖,首先我們先初始化系統(tǒng)功能,定義各項(xiàng)函數(shù),并初始化一些參數(shù)變量。然后繪制棋盤。然后按enter鍵進(jìn)行游戲,當(dāng)我們輸入一個橫縱坐標(biāo)時,系統(tǒng)會判斷此坐標(biāo)是否合法,若合法則落子,并翻轉(zhuǎn)相應(yīng)的棋子。最終判斷雙方的勝負(fù)情況。如圖3.1所示:開 始結(jié) 束 游 戲初始化系統(tǒng)功能畫出棋盤按鍵操作是否為有效位置?按鍵是否為回車鍵?落 棋變成自己的棋子統(tǒng)計黑白棋個數(shù),輸出成績。輸出勝利者信息關(guān)閉圖形系統(tǒng)否是否是圖3.1 程序整體流程圖圖3.
14、2為下棋流程圖。首先我們進(jìn)入游戲,然后由玩家先落子。先判斷落子位置是否已經(jīng)有棋子了,若有則重新輸入。若沒有,再判斷是否能夠引起棋子的翻轉(zhuǎn),若可以則落子,將對方的棋子變成自己的棋子,反之換由對方下子。當(dāng)一方走完之后,換另一方走。如下圖所示: 開始玩家走棋落子位置是否有棋子是否引起棋盤變化落棋變?yōu)樽约旱奈移?,得分換電腦走棋結(jié)束是否否是 圖3.2 人機(jī)對戰(zhàn)模塊流程圖 圖3.3為成績運(yùn)行流程圖,當(dāng)棋盤上的每一個格子都有棋子的時候,系統(tǒng)將遍歷棋盤,然后根據(jù)棋盤上棋子的花色分別代表的是哪一方,在哪一方的成績上+1.遍歷完后,判斷雙方分?jǐn)?shù)的大小,并輸出結(jié)果。如下圖所示:開始輸出初始成績ifij=0ifij=
15、*玩家score+1電腦score+1玩家score電腦scorecscorescorescore玩家贏電腦贏否是是是否否圖3.3 成績輸出模塊程序流程圖3.3.函數(shù)實(shí)現(xiàn)說明(1)void main()主函數(shù)功能:在主函數(shù)中,首先定義使用到的常數(shù)、全局變量、函數(shù)原型說明。盤狀態(tài)用數(shù)組 a88,初值為0,表示空格。函數(shù)的實(shí)體部分,開始初始化圖形系統(tǒng),然后通過調(diào)用函數(shù)display()先畫出棋盤,調(diào)用make_move()和computer_move()進(jìn)行人機(jī)對戰(zhàn)函數(shù)開始游戲,一旦游戲結(jié)束后,關(guān)閉圖形系統(tǒng),程序結(jié)束。(2)void display()棋盤繪制函數(shù)功能:函數(shù)display()通過f
16、or循環(huán),對棋盤界面進(jìn)行了繪制用法:此函數(shù)調(diào)用方式為void display(char boardsize);說明:參數(shù)是一個二維數(shù)組,size為定義的長度。值為8返回值:無(3)int valid_moves() 有效步驟函數(shù)功能:通過此函數(shù)來判斷電腦或玩家下的棋子是否是有效的。用法:此函數(shù)調(diào)用方式為int valid_moves(char boardsize,int movessize,char player);說明:char boardsize為棋盤,int movessize為玩家輸入的橫縱坐標(biāo),char player為判斷的玩家為電腦還是人返回值: int(4)void make_m
17、ove()下棋函數(shù)功能:定義坐標(biāo),控制變量并通過for循環(huán)來判斷翻轉(zhuǎn)棋子。達(dá)到同一方向上將對方 的棋子翻轉(zhuǎn)為自己的棋子。用法:此函數(shù)調(diào)用方式為void make_move(char boardsize,int row,int col,char player)說明:int row,int col分別代表其中的橫縱坐標(biāo)返回值: 無(5)void computer_move()電腦下棋函數(shù)功能: 主函數(shù)通過調(diào)用該函數(shù),獲取電腦的下棋位置。該函數(shù)分別又調(diào)用make_move(); valid_moves();new_score=best_move();函數(shù),以獲取最佳的下棋位置用法:此函數(shù)調(diào)用方式為v
18、oid computer_move(char boardsize,int movessize,char player);說明:int movessize為玩家輸入的橫縱坐標(biāo),char player為判斷的玩家為電腦 還是人返回值: 無(6)int get_score()分?jǐn)?shù)獲取函數(shù)的聲明功能:用此函數(shù)來獲取電腦和玩家的分?jǐn)?shù),以便判斷最終的勝負(fù)用法:此函數(shù)調(diào)用方式為(char boardsize,char player);說明:char boardsize是一個二維數(shù)組,來控制棋盤變量。char player是代表玩 家的一個參數(shù)返回值: int(7)int best_move()功能:best
19、_move是電腦下子最佳位置判斷的一個函數(shù),通過不斷地比較,用了兩次 for循環(huán),并遍歷棋盤上*的個數(shù),來獲取最佳位置。用法:此函數(shù)調(diào)用方式為int best_move(char boardsize,int movessize, char player);說明:同void computer_move()返回值: int4.程序運(yùn)行結(jié)果 圖4.1為初始界面,當(dāng)我們選擇運(yùn)行程序時,便會出現(xiàn)如下圖的界面。根據(jù)上面文字的內(nèi)容,我們可以了解游戲的規(guī)則。并按enter鍵,進(jìn)行游戲。如下圖所示:圖4.1初始界面圖 圖4.2為進(jìn)入游戲后的首界面,下圖是按enter鍵之后進(jìn)入的游戲界面。第一局游戲時,玩家的棋子
20、用0代替,電腦的棋子用*代替。初始界面中,棋盤上便已有了在棋盤正中央的相互交叉的棋子。這是初始界面的一種情況。如下圖所示:圖4.2游戲首界面圖 圖4.3為運(yùn)行過程中,雙方對峙的截圖。在游戲過程中,輪到玩家下棋的時候,系統(tǒng)會出現(xiàn):輸入坐標(biāo)的提示,此時,我們的輸入方式是第一個為數(shù)字,代表棋盤的橫坐標(biāo),第二個為字母,代表棋盤的縱坐標(biāo),中間無空格。如下圖所示:圖4.3對峙過程圖 圖4.4為對峙結(jié)束后,得到分值的結(jié)果圖。最后,系統(tǒng)會提示,是否要重新開始游戲,我們可以通過y/n選擇是否繼續(xù)。如果選擇y系統(tǒng)將會開始一局新的游戲,并初始化棋盤。若輸入n,系統(tǒng)將不再進(jìn)行游戲,退出。如下圖所示:圖4.4雙方對峙結(jié)
21、果圖5.軟件使用說明黑白棋是一款娛樂型的游戲,在與鍛煉人的腦力和反應(yīng)能力的。在本程序中,先切換到相應(yīng)的界面下,然后根據(jù)提示來完成下一步操作。在本程序中縱坐標(biāo)是數(shù)字,橫坐標(biāo)是字母。根據(jù)坐標(biāo)軸的性質(zhì)來確定每一步棋的位置。并根據(jù)與之相對應(yīng)的提示來完成結(jié)果。例如:電腦無棋可走,這是一步無效操作等。圖5.1為程序進(jìn)入游戲后的初始界面圖5.1程序初始界面圖 下圖為圖5.2,是程序運(yùn)行過程中的截圖。當(dāng)我們輸入1a是,提示我們無效,請重新輸入,當(dāng)輸入3f是,亦是如此。此程序過程是輸入不合法的過程。在做了相應(yīng)的操作后,再繼續(xù)操作。玩家一定要根據(jù)提示來進(jìn)行下一步操作,所以上圖的正確坐標(biāo)是6e。圖5.2無效運(yùn)行的過
22、程圖 圖5.3是玩家要盡可能的使盤上的的子來變成己方的,避免不必要的損失。有是電腦會沒有棋可走,你可以在繼續(xù)走!圖5.3無棋可走情況圖6.結(jié)論課程設(shè)計是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識 ,發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對我們的實(shí)際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計算機(jī)應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握程序開發(fā)技術(shù)是十分重要的,而c語言又是最常見,功能最強(qiáng)大的一種高級語言,因此做好c語言課程設(shè)計是十分必要的?;仡櫰鸫舜握n程設(shè)計,至今我們?nèi)愿锌H多,的確,自從拿到題目到完成整個編程,從理論到實(shí)踐,在整整半個月的日子里,
23、可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體,指針,鏈表通過這次課程設(shè)計之后,我們把前面所學(xué)過的知識又重新溫故了一遍。我做的是黑白棋的課程設(shè)計,雖
24、然是很簡單的一個小的程序,但對我一個初學(xué)者來說卻是一個很大的困難。更加是第一次做課程設(shè)計,所以第一天下午在機(jī)房做了一個下午卻絲毫沒有進(jìn)展,最主要是不知從何開始,這個時候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個時候才后悔上課的時候沒有認(rèn)真的聽講。可是現(xiàn)在一切都晚了,還好時間還算是充裕,只好拿出書本重新復(fù)習(xí)一下。特別是結(jié)構(gòu)體,繪制棋盤的部分,幾乎是一片空白,不知從何著手。不過經(jīng)過幾天的努力,大體上把課本上的知識點(diǎn)看了一遍,知識點(diǎn)也都基本是撐握了,所以一下一步就是開始正式的編程序了。不過畢竟是個新手,還是不知如何下手,于是就在網(wǎng)上下了一篇類似的程序,經(jīng)過仔細(xì)的研究,終于讀懂了c語言編程的基本
25、過程和方法。經(jīng)過一波三折,終于開始正式編程。編程是一件很枯燥很無聊的事情,但是出于完成作業(yè),得到學(xué)分的壓力,還必須強(qiáng)破自己堅持下去,按照老師所說的模塊化思想,分部分的進(jìn)行編寫。而且編程是一件高精度、模范化的事情,稍有疏乎都會影響全局,也可能因?yàn)槟骋惶幍男〉腻e誤而導(dǎo)致整個程序的無法運(yùn)行。所以認(rèn)真仔細(xì)就是非常重要的了。開始的時候真的感覺編程是一件很無聊的事情,不過當(dāng)一個程序運(yùn)行成功的時候那種喜悅是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終于把程序完成了,盡管程序還是有很多錯誤和漏洞,不過還是很高興的。無論如何是自己的勞動成果,是自己經(jīng)過努力得到的成績,同時也是學(xué)習(xí)c語言的一次實(shí)踐作業(yè)
26、,自己進(jìn)步的證明。通過這次課程設(shè)計,使我對c語言有了更進(jìn)一步的認(rèn)識和了解,要想學(xué)好它要重在實(shí)踐,要通過不斷的上機(jī)操作才能更好地學(xué)習(xí)它,我也發(fā)現(xiàn)我的好多不足之處,首先是自己在指法上還不行,經(jīng)常按錯字母,通過學(xué)習(xí)也有所改進(jìn);再有對c語言的一些標(biāo)準(zhǔn)庫函數(shù)不太了解,還有對函數(shù)調(diào)用的正確使用不夠熟悉,還有對c語言中經(jīng)常出現(xiàn)的錯誤也不了解,通過實(shí)踐的學(xué)習(xí),我認(rèn)識到學(xué)好計算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)c語言,還是其它的語言,以及其它的計算機(jī)方面的知識都要重在實(shí)踐,所以后在學(xué)習(xí)過程中,我會更加注視實(shí)踐操作,使自己便好地學(xué)好計算機(jī)。 在課程設(shè)計過程中,收獲知識,提高能力的同時,我也學(xué)到了很多人生的哲理,懂得怎
27、么樣去制定計劃,怎么樣去實(shí)現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會把課程設(shè)計的精神帶到生活中,不畏艱難,勇往直前!參 考 文 獻(xiàn) 1 譚浩強(qiáng).c程序設(shè)計(第三版),清華大學(xué)出版社,2005.72 郭翠英.c語言課程設(shè)計案例精編, 中國水利水電出版社,2004.33 朱振元.數(shù)據(jù)結(jié)構(gòu)(面向?qū)ο笳Z言描述),清華大學(xué)出版社,2004.24 張翔.c語言函數(shù)大全,電子工業(yè)出版社,2002.45徐金梧.turbo c實(shí)用大全,機(jī)械工業(yè)出版社,1996.5附錄:源代碼#include #include #define size 8void di
28、splay(char boardsize);int valid_moves(char boardsize,int movessize,char player);void make_move(char boardsize,int row,int col,char player);void computer_move(char boardsize,int movessize,char player);int get_score(char boardsize,char player);int best_move(char boardsize,int movessize,char player);vo
29、id main() char boardsizesize=0; int movessizesize=0; int row=0; int col=0; int no_of_games=0; int no_of_moves=0; int invalid_moves=0; int comp_score=0; int user_score=0; char y=0; char x=0; char again=0; int player=0;printf(玩法說明n);printf(1.開辟新局者持黑子,加入者持白子。n);printf( 我先執(zhí)白棋 - (*)n 你執(zhí)黑棋 - (0).n);printf
30、(n祝你好運(yùn)! 請按enter鍵,進(jìn)行游戲.n);scanf(%c,&again); do player=+no_of_games%2; no_of_moves=4; for(row=0;rowsize;row+) for(col=0;col=0&y=0&xsize&ysize&movesxy) make_move(board,x,y,0); no_of_moves+; break; else printf(不是有效位置,請重新輸入。n); else if(+invalid_moves2) fflush(stdin); printf(n沒有可下位置,電腦下棋。n); scanf(%c,&aga
31、in); else printf(n沒有多余位置,本局游戲結(jié)束。n); else if(valid_moves(board,moves,*) invalid_moves=0; computer_move(board,moves,*); no_of_moves+; else if(+invalid_moves2) printf(n沒有可下位置,你下棋。n); else printf(n沒有多余位置,本局游戲結(jié)束。n); while(no_of_movessize*size&invalid_moves2); display(board); comp_score=user_score=0; for(
32、row=0;rowsize;row+) for(col=0;colsize;col+) comp_score+=boardrowcol=*; user_score+=boardrowcol=0; printf(最后分?jǐn)?shù):); printf(電腦: %dt玩家: %dnn,comp_score,user_score); fflush(stdin); printf(你還想玩一次嗎?(y/n):); scanf(%c,&again); while(tolower(again)=y); printf(n謝謝使用此游戲。n);void display(char boardsize) int row=0;
33、 int col=0; char col_label=a; printf(n ); for(col=0;colsize;col+) printf( %c,col_label+col); printf(n); for(row=0;rowsize;row+) printf( +); for(col=0;colsize;col+) printf(-+); printf(n%2d|,row+1); for(col=0;colsize;col+) printf( %c |,boardrowcol); printf(n); printf( +); for(col=0;colsize;col+) print
34、f(-+); printf(n);int valid_moves(char boardsize,int movessize,char player) int rowdelta=0; int coldelta=0; int row=0; int col=0; int x=0; int y=0; int no_of_moves=0; char opponent=(player=0)?*:0; for(row=0;rowsize;row+) for(col=0;colsize;col+) movesrowcol=0; for(row=0;rowsize;row+) for(col=0;colsize
35、;col+) if(boardrowcol!= ) continue; for(rowdelta=-1;rowdelta=1;rowdelta+) for(coldelta=-1;coldelta=1;coldelta+) if(row+rowdelta=size| col+coldelta=size| (rowdelta=0&coldelta=0) continue; if(boardrow+rowdeltacol+coldelta=opponent) x=row+rowdelta; y=col+coldelta; for(;) x+=rowdelta; y+=coldelta; if(x=
36、size|y=size) break; if(boardxy= ) break; if(boardxy=player) movesrowcol=1; no_of_moves+; break; return no_of_moves;void make_move(char boardsize,int row,int col,char player) int rowdelta=0; int coldelta=0; int x=0; int y=0; char opponent=(player=0)?*:0; boardrowcol=player; for(rowdelta=-1;rowdelta=1
37、;rowdelta+) for(coldelta=-1;coldelta=1;coldelta+) if(row+rowdelta=size| col+coldelta=size| (rowdelta=0&coldelta=0) continue; if(boardrow+rowdeltacol+coldelta=opponent) x=row+rowdelta; y=col+coldelta; for(;) x+=rowdelta; y+=coldelta; if(x=size|y=size) break; if(boardxy= ) break; if(boardxy=player) while(boardx-=rowdeltay-=coldelta=opponent) boardxy=player; break; int get_score(char boardsize,char player) int score=0; int row
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 7711-1:2021/Amd 1:2025 EN Dentistry - Diamond rotary instruments - Part 1: General requirements - Amendment 1
- 2025-2030年中國金融押運(yùn)行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國人才尋獵(獵頭)行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國旅行社行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國電子熱管理產(chǎn)品行業(yè)全國市場開拓戰(zhàn)略制定與實(shí)施研究報告
- 新形勢下知識產(chǎn)權(quán)保護(hù)行業(yè)快速做大市場規(guī)模戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國在線招聘行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報告
- 自動扶梯運(yùn)行管理制度
- 織金縣教育局2013年學(xué)前教育宣傳月活動方案
- 建設(shè)局年度工作計劃
- 大學(xué)宣傳部工作總結(jié)學(xué)生會
- 2024年永州職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 藥物分離與純化技術(shù)
- 餐廳各類食材原材料供貨驗(yàn)收標(biāo)準(zhǔn)
- 物理實(shí)驗(yàn):測量電容器的電容和電荷量
- 免疫相關(guān)不良反應(yīng)的預(yù)防和處理
- 【區(qū)域開發(fā)戰(zhàn)略中環(huán)境保護(hù)政策的現(xiàn)存問題及優(yōu)化建議分析6800字(論文)】
- 2020年高級統(tǒng)計實(shí)務(wù)與案例分析真題及答案
- 新型農(nóng)村集體經(jīng)濟(jì)研究綜述
- 人教版數(shù)學(xué)八年級上冊第十一章 三角形 作業(yè)設(shè)計 教案(含答案)
- 管理人履職工作報告
評論
0/150
提交評論