生活随笔
收集整理的這篇文章主要介紹了
现代程序设计 作业5
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在前四個作業中, 我們體會了數組,子數組的和,二維數組,字符串和字母的處理, 簡單和復雜的 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的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。