GO語言初級學(xué)習(xí)之代碼案例09 (channel模擬網(wǎng)球比賽)

@(go語言 黑馬)[GO語言]

用go程和channel模擬網(wǎng)球比賽

  • 題目:兩運動員打網(wǎng)球,用程序簡單模擬一下打球過程
  • 知識點:無緩沖通道channel,go并發(fā)
  • 邏輯:

_1. 利用無緩沖channel來模擬 接球 和 擊球,讀取channel中的值為接球,往channel寫數(shù)據(jù)為擊球
_2. 設(shè)計一個運動員,實現(xiàn)的功能有:判斷是否贏了(讀不到數(shù)據(jù)時,贏),判斷是否輸了,失敗的條件各個運動員不同
_3. go程模擬兩個運動員

  • 代碼如下
package main

import "fmt"

func init() {
    rand.Seed(time.Now().UnixNano())
}
var wg01 sync.WaitGroup
func main() {
    wg01.Add(2)

    ch := make(chan int)
    go Player01("shalom",ch)
    go Player02("xulong",ch)
    fmt.Println("比賽開始!")
    time.After(time.Second)
    ch <- 1

    wg01.Wait()
}
func Player01(name string, ch chan int) {
    defer wg01.Done()
    for {
        num, ok := <-ch //num為我接到的球
        if !ok {
            fmt.Printf("%s運動員贏了\n", name)
            return
        }
        fmt.Printf("--%s運動員接到了:%d\n",name,num)

        if num%13 == 0 { //我的弱點是被13整除
            fmt.Printf("%s運動員輸了\n", name)
            close(ch)
            return
        }
        time.After(time.Millisecond*300)
        ball := rand.Intn(1000) //ball為我打出的球
        fmt.Printf("--%s運動員擊出球:%d\n",name,ball)
        ch <- ball
    }
}
func Player02(name string, ch chan int) {
    defer wg01.Done()
    for {
        num, ok := <-ch
        if !ok {
            fmt.Printf("%s運動員贏了\n", name)
            return
        }
        fmt.Printf("----%s運動員接到了:%d\n",name,num)

        if num%11 == 0 { //我的弱點是被11整除
            fmt.Printf("%s運動員輸了\n", name)
            close(ch)
            return
        }
        time.After(time.Millisecond*300)
        ball := rand.Intn(1000)
        fmt.Printf("----%s運動員擊出球:%d\n",name,ball)
        ch <- ball
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容