在前四個作業中, 我們體會了陣列,子陣列的和,二維陣列,字串和字母的處理, 簡單和複雜的 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,程式效能分析 單元測試 在最小的程式設計...