課程設計報告範例

2021-03-03 22:10:41 字數 3469 閱讀 2160

重慶工商大學電腦科學與資訊工程學院

2005級計算機3班:胡清清

指導老師:梁新元

摘要: 有編號為1-52張牌,現以2-52為基數,當遇到他們的倍數時進行翻牌,最後列印出結果。

關鍵字:翻牌陣列結構體

(1)任務定義

編號為1—52張牌,正面向上,從第2張開始,以2為基數,是2的倍數的牌翻一次,直到最後一張牌;然後,從第3張開始,以3為基數,是3的倍數的牌翻一次,直到最後一張牌;直到以52為基數的翻過,輸出:這時輸出正面向上的牌有哪些?

(2)問題分析

1)基本問題分析

該設計是乙個查詢和修改的過程。以下是根據問題程式中需要實現的一些功能:

首先,根據題意,牌是乙個具體的事物,在資料結構中沒有專門描述撲克牌的現成的變數,這就要求在設計的時候,尋找乙個合適的描述,對牌這個變數進行人為的定義。

接著,是對52張牌從以2為基數,按倍數翻牌,一直到以52為基數,按倍數翻牌。那麼,如何實現以2為基數按倍翻完後又開始以3為基數,直至以52為基數呢?這就需要定義乙個可以遞增的變數,來指示該以哪個數字為基數。

還有乙個要解決的問題是如何按倍數翻牌?以2為例子,我們知道,需翻的是第2,4,6……2n(2n<=52)

可以看出,每次下乙個要翻的牌都是上乙個要翻的牌加上2。同理可推,以k為基數的話,每次下乙個要翻的牌都是上乙個要翻的牌加上k (2<=k<=52)。

最後,題目要求輸出正面向上的牌。這裡引發了乙個問題,如何判斷哪些為牌面向上的牌?可以用乙個變數以不同的值來表示牌的正面和反面,至於具體如何實現,是程式裡要考慮的問題。

2)問題的延伸

問題一:在問題分析中,分析的是該設計的基本功能。而該設計既然是乙個關於紙牌的遊戲,那麼,人機互動的友好介面是必不可少的。

問題二:在該設計中,最基本的是將牌序為1—52是順序牌序按2—52的倍數翻牌,而這些可能在程式中有已經是事先定義好的,使用者並沒有參與進去,也就不能稱之為遊戲。假設我們將這個有序的牌,經過洗牌以後形成新的序列,那麼,就要求設計乙個演算法,讓本來有序的牌面打亂成無序的,然後再進行翻面的過程。

重要的是,洗牌的程度由使用者來參與。在設計中設計難度級別,分別是1.初級 2.

中級 3.高階。牌序被打亂的程度由玩家選擇的級別來決定。

問題三:雖然洗牌是使用者來參與的,但做為遊戲,還缺少一點趣味性。為了解決這個問題,我採用玩家競猜的方式。

具體的來說就是,在洗過牌後,讓玩家從鍵盤輸入乙個牌面值,如果在進行翻面以後,如果玩家輸入的那張牌是正面向上的,則輸出猜對的提示,反之,如果輸入的那張牌是背面向上的,則輸出「再接再厲」的字樣。

問題四:既然是遊戲,那麼遊戲幫助是必不可少的。

當然,為了更好的實現該設計的最終結果,也就是程式,這裡有必要對設計思路有條理地整理出來。以下僅僅是每個子模組應該實現的功能,而具體的演算法在實際的程式中再做介紹,下面是設想的步驟:

第一步,定義撲克牌的資料結構。要求可以儲存牌的面值和表示該牌是正面向上還是背面向上。並且定義乙個長度為52的該資料結構陣列,用來表示52張這樣的牌。

typedef struct //定義乙個結構體

p;p a[52];

第二步,主程式。其功能是一開始輸出乙個選單,讓玩家做出選擇「1.測試該遊戲,2.

開始遊戲 3.遊戲幫助。 4.

退出遊戲」玩家從鍵盤輸入做出選擇後,分別呼叫相應的4個子程式。

第三步,對玩家的選擇進行接收的子程式。當玩家輸入1,2,3或者4是時候,該程式可以將玩家的選擇反饋給主程式。如果玩家輸入的是這三個數字之外,則反饋0給主程式。

第四步,對紙牌的初始化的子程式。初始的要求是每張牌按從1到52順序排列,並且每張牌初始時,都要求正面向上。

第五步,對遊戲進行測試的子程式。按設計的要求,對初始化後的牌進行翻面並顯示所有正面向上的牌。

第六步,洗牌子程式。通過玩家輸入的隨機數和難度級別,對52張牌進行不同程度的洗牌,即打亂牌的順序。然後將打亂次序後的牌的排列順序在螢幕上顯示出來。

第七步,開始遊戲子程式。首先列出選單「1.初級 2.

中級 3.高階」。讓玩家選擇輸入,然後讓玩家輸入乙個隨即的數字,呼叫洗牌的子程式,根據玩家的這兩個輸入對牌進行不同程度的打亂。

接著讓玩家輸入1-52中任意牌,呼叫玩家競猜子程式,判斷玩家猜的這張牌是否正面向上。

第八步,玩家競猜子程式。如果玩家輸入的那張牌是正面向上的,則輸出猜對的提示,反之,如果輸入的那張牌是背面向上的,則輸出「再接再厲」的字樣。

第九步,對牌面進行翻轉的子程式。從第2張開始,以2為基數,是2的倍數的牌翻一次,直到最後一張牌;然後,從第3張開始,以3為基數,是3的倍數的牌翻一次,直到最68後一張牌;直到以52為基數的翻過,輸出:這時輸出正面向上的牌。

第十步,遊戲幫助子程式。以文字的方式的輸出向玩家介紹支紙牌遊戲的具體玩法。

第十一步,判斷子程式。其功能是要實現每次呼叫選單選擇子程式和執行完玩家要求的操作後,重新輸出主選單,讓玩家選擇新的操作。直到玩家選擇4.退出遊戲時,整個程式結束。

第十二步,遊戲結束子程式。以文字的方式在螢幕上輸出遊戲結束的提示字。

nyy nyy

ny(1)撲克牌資料結構的定義

typedef struct //定義乙個結構體

p;p a[52];

在這裡,id用來儲存的是紙牌的面值,即1—52中的乙個數字,flag相當於乙個標誌位,設想是初始時均賦值為0。

(2) 主程式的編寫

void main()

這裡,主程式看起來非常簡單,主要的功能是先在螢幕上顯示歡迎詞,以建立良好的介面。然後再呼叫子程式judge().該子程式的功能和設計思路將在下面講到,在這裡就不做贅述了。

(3) 對玩家的選擇進行接收的子程式choose()

int choose() //選單選擇函式

該演算法實現的功能是:首先定義乙個整型變數k,然後讓使用者從鍵盤輸入乙個字元存入k中。接著的判斷語句,實現的是過濾的功能,即如果輸入的不是1,2,3或者4,均屬於非正確的輸入,這時返回值為0,反之,就返回輸入的字元。

(4) 對紙牌的初始化的子程式init()

void init紙牌的初始化子程式

這個部分是對52張牌的初始化。利用乙個for語句分別給52張牌順序賦上1-52的數字。同時,每張牌的標誌位flag均初始為0 (0為偶數)。並將牌面依次在螢幕上顯示出來。

(5) 對遊戲進行測試的子程式test()

void test() //測試遊戲的子程式

呼叫init()是先進行初始化,呼叫result(1)是對初始的牌進行初級難度(1代表初級難度)並在螢幕上顯示最終所有正面向上的牌。

(6) 洗牌子程式wash(int k,int m)

void wash(int k,int m)//洗牌子程式

} 這是乙個打亂牌序的演算法,主要是利用若干張牌的位置的對調實現的,最內層迴圈是從第1張開始將(張牌的位置)和(玩家輸入的隨即數+這張牌的位置)對調.一直到(玩家輸入的隨即數+這張牌的位置)超過52,即越界為止.第二曾迴圈是執行(玩家輸入的隨即數)次最內層迴圈.

最外層迴圈執行的次數是根據玩家選擇的難度決定的,難度越高,執行第二層迴圈的次數就越多,牌序被打亂的程度越大.同時,這也是增加遊戲難度的方法.

課程設計報告範例

課程名稱 visual foxpro 程式設計 課題名稱英語單詞測試系統 專業統計學 班級1201 學號姓名 指導教師田媛韓寧 2013年月日 湖南工程學院 課程設計任務書 課程名稱 visual foxpro 程式設計 課題英語單詞測試系統 專業班級統計學1201 學生姓名 學號指導教師田媛韓寧 ...

課程設計報告範例

目錄1需求分析 3 1.1系統設計目標 3 1.2系統執行過程 3 2詳細設計 3 2.1資料結構設計 3 2.2選單設計 3 2.3系統功能的實現 3 3程式除錯 4 4總結 4 4.1本系統特色 4 4.2心得 5 通訊錄 主要是介紹你的系統所要完成的功能。你的系統有哪些功能,起個標題,然後進行...

C語言課程設計報告範例

宿遷學院教育技術學專業 c程式設計課程設計報告 設計題目 使用選單選擇趣味程式 學生姓名 宋佳鳳 學號 20090501131 指導老師 聶倩 日期 2010年12月25日 1.題目與要求 1.1 問題提出 詳細敘述本人所要實現的課題中的問題,如下 使用選單選擇趣味程式 設計乙個含有多個選單項的選單...