版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上 J I A N G S U U N I V E R S ITY 多线程模拟乒乓球双打 学院名称: 计算机 专业班级: 软件1401 学生姓名: 吴帅帅 学生学号: 指导教师姓名: 陈锦富 2017年 6月7日一、题目1. 有四个选手, A1和A2为一个队, B1和B2为另一个队. A1首先发球(启动球), 然后B1, A2, B2将最后发球. 每一轮每个选手发2个球.2. 选手不改变他们的位置.3. 比赛期间, 双方选手必须轮流发球,并且在同一个队伍的两个选手可以竞争发球.4. 当轮到某个选手时, 他/她可以调用一个叫做shot(rate) 的随机函数来模拟比赛,在
2、给定概率rate以内,该函数返回 “in”, 否则返回”out”. 例如 rate=85%, 则球在界内的概率为85%, 出界的概率为15%.5. 如果shot函数返回”in”, 对方选手必须调用shot函数把球打回.6. 如果shot函数返回”out”, 对方选手赢得1分,随后重新发球.7. 当每个选手发完2个球后比赛终止.分数多的一方赢得比赛.分数一样多,比赛为平局.8. 每个选手作为一个线程实现.二、实现思路serve: 是指发球的goroutine.serveMetux: 发球锁。playerA: 是指A队伍抢到球的goroutine.playerB: 是指B队伍抢到球的gorouti
3、ne.catch_chanel_A : 给A队伍的球的通道。catch_chanel_B : 给B队伍的球的通道。大致步骤:1. serve 先加锁,后发球(将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唤醒,开始下一次发球。三、实现代码package mainimport ( fmt sync math/rand container/ring strings time)var ( wg sync.WaitGroup / 用于goroutine计数 times = 2 / 每个选手发球次数 nums = 4 / 多少个选手 serveTotals = nums * times / 总发球次数 score_balls_A = mak
5、e(TableTennis, 0, serveTotals) / A的得分球 score_balls_B = make(TableTennis, 0, serveTotals) / B的得分球 turn = ring.New(4) / 发球顺序 serveMetux sync.Mutex / 发球锁 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() / 初始化发球顺序 turn.Value = A1 turn = turn.Next() turn.Value = B1 turn = turn.Next() turn.Value = A2 turn = turn.Next() turn.Value = B2 / 开始发球 for i := 0; i times; i+ for j := 0; j nums; j+ serveMetux.Lock() / 解锁时发下
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() / 延迟递减计数 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() / 延迟递减计数 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 / 初始化发球顺序 wg.Add(nums + 1) / 累加计数 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏南通市人才事务所有限公司招聘工作人员13人笔试备考试题及答案详解
- 2026年蚌埠自贸区城发人力资源有限公司第三期招聘笔试备考试题及答案详解
- 2026广东湛江市审计局就业见习岗位招聘3人笔试备考试题及答案详解
- 2026天津市河北区海德津师实验高级中学招聘笔试备考试题及答案详解
- 2026广东广州南沙人力资源发展有限公司招聘项目人员11人笔试模拟试题及答案详解
- 2026年邮政储蓄银行(重庆分行)校园招聘考试备考题库及答案详解
- 2026江苏镇江市句容产业发展集团有限公司下属企业选聘17人笔试备考试题及答案详解
- 2026恩施州顺鑫达劳务有限责任公司招聘财务人员1人笔试备考题库及答案详解
- 2026广东广州市番禺区第八人民医院招考编外工作人员(第二批)2人笔试备考题库及答案详解
- 2026四川川交路桥有限责任公司招聘26人笔试参考题库及答案详解
- 《合理调节情绪-做自己情绪的主人》班会课件
- 劳务合同书(完整版)pdf
- 灵魂出生前的人生计划
- 医院环境物体表面清洁消毒和感染控制方案
- 民法典普法讲座-物权编 PPT
- 定西2022年事业单位招聘考试《公共基础知识》真题及答案解析【word版】
- GB/T 35089-2018机器人用精密齿轮传动装置试验方法
- GB 30616-2020食品安全国家标准食品用香精
- GA 676-2007警用服饰刺绣软肩章
- 安全目标责任书(仓库管理员)
- 纳豆激酶课件
评论
0/150
提交评论