現代程式設計 作業5

2021-09-08 16:59:18 字數 2584 閱讀 3767

在前四個作業中, 我們體會了陣列,子陣列的和,二維陣列,字串和字母的處理, 簡單和複雜的 ui 程式等。大家鍛鍊了命令列的處理,模組的持續重構和演化,單元測試,ui 程式的處理,全域性單例的做法,mvc 設計模式等等。同時我們還學習和練習了兩次結對程式設計,學習了如何用**規範讓自己的程式容易理解,便於維護。

有了前面的基礎,現在我們來嘗試一些更有意思的題目 – 設計 client/server 的程式,做實時的資料處理。

這個作業**於:

創新的時機 – **點遊戲

我們在課堂上也玩過這個遊戲,我們自然想把這個遊戲搬到網上。 我們分兩步走:

1) 9/30 課堂練習

同學們還是兩人結對 (這次可以自由組合),設計乙個基於網路的**點遊戲。 要求:

多人遊戲, 每個選手有乙個客戶程式在執行, 和乙個伺服器通過網際網路的某種協議互動。

在有網路接的地方就可以玩 (lan, wifi,  3g 都應該可以)。

客戶程式要先向伺服器註冊, 確保在乙個遊戲的過程中, 註冊資訊能保證乙個(並且只有乙個)客戶以某確定的使用者名稱參與遊戲。

伺服器可以規定一次錦標賽有多少輪,  每輪的具體提交資料的格式是什麼。 在伺服器規定的時間範圍內, 每個客戶程式向伺服器提交**點資料。 客戶程式之間不交流。

在一輪介紹後, 伺服器把此輪的結果 (參與使用者名稱,  提交的資料,第一名,g-number) 公布在伺服器上。  每個客戶程式都能自由獲取。

一輪的優勝程式可以得 10 分, 一輪的最後一名得 (–1)分, 其餘選手得 0 分。  在規定時間內不能提交數字的客戶程式得 (-5) 分。 如果有並列第一名, 則伺服器取提交數字較早的客戶程式作為優勝者。  如果有並列最後一名, 則並列者都得 (-1) 分。

每次錦標賽事先規定好是採取下列哪乙個模式:

每個客戶程式必須提交乙個有理數。

每個客戶程式必須提交兩個有理數。  (任何乙個數字最接近g-number 則此客戶程式就是優勝。)

客戶程式可以用任何語言編寫, 只要它能夠按要求和伺服器互動即可。

伺服器必須實時地通過乙個網頁顯示每個使用者的得分 (人可以從這裡看進展,客戶端程式會從這裡拿資料進行分析)。

伺服器必須能避免介面擁堵, ddos 等意外情況。

課堂作業交什麼?

你對於這個系統的伺服器和介面是如何設計的?  應該採取哪些設計讓遊戲能順利完成? 寫出具體的介面。

你和你的同伴分工負責, 設計出伺服器應該有幾個功能模組,  這些功能模組之間的關係 (用 uml 或其它圖例來表示)。

寫出每個模組功能的偽**,要能做到讓另乙個同學能看到這些偽**,就能明確實現的要求並馬上開始實現。

我們的課程有 60 名學生 (60 個客戶程式),如何能設計伺服器程式和互動的介面讓它能在 1 秒鐘之內就完成一輪比賽?  

2) 實際伺服器程式設計和展示

既然同學們設計好了伺服器,那就讓我們測試大家寫的伺服器吧。 兩人一組寫伺服器 (按照你們原來的設計), 每個人自己寫乙個比較簡單的客戶端 (這樣就有兩個客戶端了)。

測試: 上課時候大家輪番上陣,  做下面的事情。

顯示你們的部落格,上面應該有你們的設計,特別是介面的設計,說明你們的介面設計是如何簡明而有效,獨特之處在**?

每一對同學帶兩台電腦到講台上。在你們的電腦上,  啟動你們的伺服器, 在的兩個電腦各執行 20 個例項 ,那就有 40 個程序了,這 40 個程序各有各的使用者名稱和密碼。 建議把使用者名稱和密碼放到乙個檔案中,伺服器儲存了所有的 《使用者名稱,密碼》資訊,  每乙個客戶端程序使用乙個 《使用者名稱,密碼》。 建議在每個程式中加入一定的隨機因素,來避免所有的客戶端都提交一樣的數字) 。兩台電腦可以通過區域網或其它連線方式 (例如用網線直接連線兩個電腦的網絡卡),這個由學生自己事前設定好,不要到時候再出錯。

開始乙個錦標賽 (大約100 輪, 為時2分鐘。 到時如果沒有完成也強行停止)

同時伺服器顯示網頁自動展現各個使用者在每個輪次的排名,和每輪**點的變化曲線 (這樣大家用肉眼就可以看到)。

根據錦標賽完成的質量, 同學們和ta  在下面評分。

3) 同學們的客戶端比賽

我們通過上面的比賽和評比, 選出乙個好用的伺服器程式之後,  下面就要進行真刀真槍的客戶端比賽了。同學們根據伺服器的設計要求修改一下他們的程式 (主要是介面部分), 每個人為乙個單位參加比賽。 寫好程式,提交到 github,  ta 組織大家在乙個網路相對穩定的環境中進行比賽。 根據伺服器的負載和執行效率,計畫用 1 小時完成 1,000 輪比賽,最後得出所有人的名次 。

誰的程式設計得好, 那就拉出來溜溜吧!

這個比賽如何算分?  給同學們提供伺服器程式的同學得到最高分10 分, 不參加比賽 (包括程式不能正常和伺服器交流)的同學得 負分。

比賽最好的同學在1000輪的錦標賽中得了 2000 分, 他的得分算10 分,其餘的同學按這個(最高分:同學實際得分)比例算得分,例如乙個同學得了 200 分, 是最高分的 10%, 那麼他得 1 分。

【這是 現代程式設計 (課程設計中, 徵求意見稿) 的一部分】

現代程式設計 作業5

在前四個作業中,我們體會了陣列,子陣列的和,二維陣列,字串和字母的處理,簡單和複雜的 ui 程式等。大家鍛鍊了命令列的處理,模組的持續重構和演化,單元測試,ui 程式的處理,全域性單例的做法,mvc 設計模式等等。同時我們還學習和練習了兩次結對程式設計,學習了如何用 規範讓自己的程式容易理解,便於維...

現代程式設計 作業 第1次

第 0 次作業已經在課堂上做了。1 建立 github 賬戶,把課上做的 最大子陣列之和 程式簽入 3 搞到一本教科書 三本中選一本 並在部落格中說明自己選的是哪一本。4 閱讀下面的部落格 個人軟體開發流程 personal software process,程式效能分析 單元測試 在最小的程式設計...

現代程式設計 作業 第1次

第 0 次作業已經在課堂上做了。1 建立 github 賬戶,把課上做的 最大子陣列之和 程式簽入 3 搞到一本教科書 三本中選一本 並在部落格中說明自己選的是哪一本。4 閱讀下面的部落格 個人軟體開發流程 personal software process,程式效能分析 單元測試 在最小的程式設計...