




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 J I A N G S U U N I V E R S ITY 多線程模擬乒乓球雙打 學院名稱: 計算機 專業(yè)班級: 軟件1401 學生姓名: 吳帥帥 學生學號: 指導教師姓名: 陳錦富 2017年 6月7日一、題目1. 有四個選手, A1和A2為一個隊, B1和B2為另一個隊. A1首先發(fā)球(啟動球), 然后B1, A2, B2將最后發(fā)球. 每一輪每個選手發(fā)2個球.2. 選手不改變他們的位置.3. 比賽期間, 雙方選手必須輪流發(fā)球,并且在同一個隊伍的兩個選手可以競爭發(fā)球.4. 當輪到某個選手時, 他/她可以調(diào)用一個叫做shot(rate) 的隨機函數(shù)來模擬比賽,在
2、給定概率rate以內(nèi),該函數(shù)返回 “in”, 否則返回”out”. 例如 rate=85%, 則球在界內(nèi)的概率為85%, 出界的概率為15%.5. 如果shot函數(shù)返回”in”, 對方選手必須調(diào)用shot函數(shù)把球打回.6. 如果shot函數(shù)返回”out”, 對方選手贏得1分,隨后重新發(fā)球.7. 當每個選手發(fā)完2個球后比賽終止.分數(shù)多的一方贏得比賽.分數(shù)一樣多,比賽為平局.8. 每個選手作為一個線程實現(xiàn).二、實現(xiàn)思路serve: 是指發(fā)球的goroutine.serveMetux: 發(fā)球鎖。playerA: 是指A隊伍搶到球的goroutine.playerB: 是指B隊伍搶到球的gorouti
3、ne.catch_chanel_A : 給A隊伍的球的通道。catch_chanel_B : 給B隊伍的球的通道。大致步驟:1. serve 先加鎖,后發(fā)球(將TableTennis放入通道中,如catch_chanel_A ),然后重復上鎖(serveMetux)阻塞自身。2. playerA 如果catch_chanel_A 沒有球,阻塞自身。如果有球,則從通道中拿到球,shot(rate) 后返回in, 記錄信息后,則將球放入給B的通道catch_chanel_B中。3. playerB 如果catch_chanel_B 沒有球,阻塞自身。如果有球,則從通道中拿到球,shot(rate)
4、 后返回in, 記錄信息后,則將球放入給B的通道catch_chanel_A中。如果shot(rate)返回out, 則解除鎖(serveMetux),此時serve喚醒,開始下一次發(fā)球。三、實現(xiàn)代碼package mainimport ( fmt sync math/rand container/ring strings time)var ( wg sync.WaitGroup / 用于goroutine計數(shù) times = 2 / 每個選手發(fā)球次數(shù) nums = 4 / 多少個選手 serveTotals = nums * times / 總發(fā)球次數(shù) score_balls_A = mak
5、e(TableTennis, 0, serveTotals) / A的得分球 score_balls_B = make(TableTennis, 0, serveTotals) / B的得分球 turn = ring.New(4) / 發(fā)球順序 serveMetux sync.Mutex / 發(fā)球鎖 catch_chanel_B = make(chan TableTennis, 0) / B隊伍接球的通道 catch_chanel_A = make(chan TableTennis, 0) / A隊伍接球的通道 balls_ids = make(chan int, serveTotals) /
6、 球的id)/ 乒乓球type TableTennis struct id int trail string / 球的軌跡func serve() defer wg.Done() / 初始化發(fā)球順序 turn.Value = A1 turn = turn.Next() turn.Value = B1 turn = turn.Next() turn.Value = A2 turn = turn.Next() turn.Value = B2 / 開始發(fā)球 for i := 0; i times; i+ for j := 0; j nums; j+ serveMetux.Lock() / 解鎖時發(fā)下
7、一個球 turn = turn.Next() name := turn.Value.(string) t := TableTennis-balls_ids, name + -in if name0 = A catch_chanel_B - t else catch_chanel_A - t time.Sleep(time.Second) / 等待player goroutine對catch_chanel的使用 close(catch_chanel_A) close(catch_chanel_B)/ A隊選手func playerA(name string, rate int) defer wg
8、.Done() / 延遲遞減計數(shù) for t := range catch_chanel_A / 2. 將球擊打出去 rest := shot(rate) / 3. 記錄球的軌跡 t.trail += - + name + - + rest / 球出界 if strings.Compare(out, rest) = 0 / 對方得分 score_balls_B = append(score_balls_B, t) fmt.Println(t) serveMetux.Unlock() continue / 4. 對面隊伍準備接球 catch_chanel_B - t / B隊選手func pla
9、yerB(name string, rate int) defer wg.Done() / 延遲遞減計數(shù) for t := range catch_chanel_B / 2. 將球擊打出去 rest := shot(rate) / 3. 記錄球的軌跡 t.trail += - + name + - + rest / 球出界 if strings.Compare(out, rest) = 0 / 對方得分 score_balls_A = append(score_balls_A, t) fmt.Println(t) serveMetux.Unlock() continue / 4. 對面隊伍準備
10、接球 catch_chanel_A - t / 擊球func shot(rate int) string if rand.Intn(100) rate return in else return out func main() fmt.Println(比賽開始.) / 初始化球的id for i := 0; i serveTotals; i+ balls_ids - i + 1 / 初始化發(fā)球順序 wg.Add(nums + 1) / 累加計數(shù) go serve() /time.Sleep(time.Second) go playerA(A1, 45) go playerA(A2, 60) go playerB(B1, 50) go playerB(B2, 90) wg.Wait() fmt.Println(比賽結束.) fmt.Printf(A : B = (%d, %d)n, len(score_balls_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機四級軟件測試中的核心問題分析試題及答案
- 公司大廈食堂管理制度
- 公司債券債務管理制度
- 培訓機構鑒定管理制度
- 數(shù)據(jù)庫數(shù)據(jù)分析報告撰寫試題及答案
- 嵌入式系統(tǒng)開發(fā)與應用試題及答案
- 學校文具倉庫管理制度
- 信息系統(tǒng)監(jiān)理師考試內(nèi)容解析試題及答案
- 軟件項目中的測試溝通試題及答案
- 公司財務用章管理制度
- 輔導機構招聘合同協(xié)議
- 青年創(chuàng)新意識的培養(yǎng)試題及答案
- 《2025年CSCO腎癌診療指南》解讀課件
- 村干部測試試題及答案
- 《新能源汽車發(fā)展歷程》課件
- 靜脈治療考試試題及答案
- 預收貨款協(xié)議合同
- 2024初級注冊安全工程師筆試模擬題帶答案
- 北京開放大學2025年《企業(yè)統(tǒng)計》形考作業(yè)3答案
- 2025年濱州國有資本投資運營集團有限公司招聘筆試參考題庫附帶答案詳解
- 2025年大數(shù)據(jù)分析師職業(yè)技能測試卷:數(shù)據(jù)倉庫設計與數(shù)據(jù)建模實戰(zhàn)試題匯編
評論
0/150
提交評論