10-3 Lab03 撲克牌發牌-發牌順序選人亂序
Lesson: 10-3 Lab03 撲克牌發牌-發牌順序選人亂序
10-3 Lab03 撲克牌發牌-發牌順序選人亂序
講義
影片逐字稿 (AI 生成)
好 我們先來解釋這個Lab要做的事情那這可能會用到後面一些要用的東西不過我們就先來講一下就是說好 首先呢他的題目要做的事情是他有四個花色 然後有13張牌這就是撲克牌好 然後總共會有52張牌那我們可以先做這件事情那後面是要洗牌 然後發給四個玩家那我們就這裡有好幾件事情 我們就先先來見那總共我們有花色所以我們可以說我們就先來寫吧好 然後這個是十之欸 第十張第十十之三Lab3好 我們先建一個檔案十之三然後好的 首先我們有花色這四種那我們就叫他就做Type然後他是一個自傳array然後有梅梅梅花然後什麼梅花方塊愛心黑桃黑桃愛心黑桃好然後我們有什麼我們有我們叫NUM好了我們有一串數字然後這個數字其實不是數字喔是A然後這邊是什麼2345623678910JQOK好我們有這幾種東西那我們現在想要先做的事情是我們不想要重複發牌所以我們不能就是我會先想要先把這些牌先伸出來而不是說在後面回圈的時候再用變數去猜就是啊現在是什麼樣的Type然後是什麼NUMBER再把它合在一起因為我如果這樣子用兩個亂數去拼的話有可能會有重複的牌出現就比如說我今天一個亂數可能選到方塊然後可能選又用另外一個亂數可能選到5然後把這兩個組在一起又有方塊5然後我後面可能跑了第50次的時候可能又剛好又是這兩個組合所以我們現在用順序的方式先把52的張牌先就是見出來好所以我有Card然後我Card是一個空之船那我們先用for然後因為我們學到新招了嘛對不對我們新招是什麼for in對不對所以我們i然後in什麼in type然後for然後再來一次in然後這時候用j好了innum對不對然後這時候我們要怎麼做呢我們是不是可以Card欸然後記得什麼push然後我們要push什麼東西進去咧我們要push的東西是我們要push的東西是typedi一個對不對type嘛這是對typetype di一個加上加上加上什麼那我們第幾個tj一個其實有更厲害的招用off更猛用off直接i加j就好沒關係我們先好沒關係我們先這樣然後我們log我們把卡片點我想要看它所以我先把它tostream好了好或是你不用tostream也沒關係你如果用google那個你如果用chrome的話就不用tostream好我們看一下沒換A登登登登登登登對這樣都對嘛對不對愛心8910這樣好然後當然我也補充一下另外一種寫法好了然後等下把它除解掉好用off就直接把type裡面的東西拿出來嘛OK這應該沒有問題然後我們跑也是會跑一樣的結果出來好好既然我們牌已經建好了對不對我們牌現在已經建好了我們有52張牌了那有說老是真的52嗎那我們就沒關係嘛快點lens然後程式會告訴你對52張牌沒問題好這時候我們要來我們有4位玩家所以我們要先我們要有4個玩家這樣子可以吧那它都是用自竄來來做所以我們先建一個比如說users然後等於框框裡面有框框分框框分框框分框框好那我們覺得有點不知道老是在幹嘛沒有關係這個東西不確定可不可以做對不對複製起來我們拿到這邊我們看一下那我們看一下users有沒有array000有沒有我有4個玩家user0user1user2user3然後裡面都是空空的空空的代表說都還沒拿牌給他ok好我們現在想要做的事情是我要產生一個亂數然後這個亂數是就是我要一直產生亂數然後我這個亂數可以幹嘛呢我這個亂數是呃我們可以先來看後面的章節好了先來看後面亂數在第幾張內三角亂數亂數十五之一亂數好math.random好然後這邊它是一個偽隨機因為電腦沒有辦法得到真正的隨機好那隨機是什麼呢隨機是0到1的一個亂數然後它不包含1math and random所以它最大可能是0.9999999999它就是不會到1沒關係我們今天先來試試看就是先把consul log然後math因為我們還不會所以我們先random然後執行它然後存檔跑一次它給我0.0049再一次它給我0.072這樣子OK嗎好那我今天因為我有52張牌所以我想要得到一個0到52之間的整數對不對就是0到52可是不包含52喔對不對因為52張牌只有0到51的indexOK嗎好那所以我就怎麼樣做咧我是不是把它乘以52OK這邊應該有講這邊有講有沒有它要得到0到100以內所以它是去乘它OK去乘它所以我們去乘52然後我們看一下這是48然後這是2.7這是47那因為它不是整數嘛那有個東西就是說Math.floor那Math.floor是什麼意思呢叫做無條件捨去OK所以我們這邊用Math.floor去把我們剛剛一個0到52之間的就51點多的一個小數的隨機數去把它去取無條件捨去這樣我就會得到一個0到51的index可以這樣OK嗎好然後我們去存檔然後跑這等到18有沒有18然後再按一次等到25好這個時候我們就可以開始來做我們的發牌了嘛對不對那我們這個發牌怎麼做呢我是不是會想要就是我有一個for回圈然後我這個for回圈是然後這邊又可以寫i了因為我是用let或是用var也可以重複宣告這樣好i然後i小於多少0到3嘛4個人嘛對不對或是這邊我可以比較就是可能會超過4個玩家我也可以怎麼做呢我可以forlet iinusers如果大家會怕就先logi出來我們看一下是不是0到3對0123嘛對不對好然後我們有三個使用者然後這時候我們在裡面要幹嘛咧他會他會跑我想一下喔他總共會跑幾次我現在想要等我一下喔我想一下我想一下我怎麼做比較好我是應該是0到500到5我應該對誰做變我應該對誰做亂數會比較好嗯我應該把52張牌然後我應該我這樣做會不會比較好我如果把52張牌然後走52次然後我把每一張牌都說他是給哪一個使用者的這樣也可以吧那所以我的變數就是我想一下怎麼怎麼做會比較好對我覺得這樣會比較簡單對好那我們現在就是做就0到3這個我們先看一下這個是不是0到3哪邊少些寫存檔好好3然後再00到3的意思就是說我現在換另外一個思維來做就是我有52張牌然後我從第一張牌開始說他是給哪一個使用者比如說他如果是0就是給第一個使用者他如果是3就給最後一個使用者然後塞給他這樣好那我們現在就是做一個4回圈然後這個4回圈是要做在我們把每一張牌Card贏Card或是我們直接用off好了offCard然後他會每一張牌都跑過一次他會每張牌都跑過一次那我們這邊我們可以把這個每次都generate一次變數letren等於這個然後我們就可以怎麼樣呢我們可以ifuser然後ifuserren因為我們是隨機我們是隨機的使用者然後我們隨機來認養這張卡然後我們隨機的使用者來認養這張卡他的他有什麼條件userren是一個我們是一個自竄裡面的自竄所以這個自竄的長度必須要小於等於13他不能超過13張啊我如果一直隨機一直使用者然後我就超多張卡這樣怎麼打撲克牌對不對所以他小於就在13張裡面的話如果他小於等於的話那我們就把牌給他點push我們就把牌推到推給誰我們就把牌推給他我們把牌推給他對不對因為我們off嘛所以剛才這個就是都是卡我們就把牌推進去推進去給給他ok那如果不是呢如果不是怎麼辦我們就把我們就把給下一個人好不好我們就把這個亂數比如說我原本要給使用者1啊你滿了我就給你後面那一個人但是會發生什麼問題請問會發生什麼問題如果他是最後一個人你給他1的話會怎樣就變43加1是變4是不是就爆掉了所以我們對這個數字要怎麼要幹嘛要取餘數取對4的餘數取對4的餘數可以接受嗎你現在只有4個使用者對不對這4個使用者的index是0123那如果今天他滿了我是不是就把這張牌給他我這張牌如果滿了我是不是給他我這個滿了我是不是給他可是我這個第三個我滿了怎麼辦我是說要給下一個人可是問題是4沒有這個人啊我長度是4啊沒有他嘛那就給他所以我取餘數嘛4取餘數等於0就他這樣就不會有問題了那1去除以4取餘數是12去除以4餘數是23去除以4餘數是3所以4除以餘數是0就回來了OK這沒有問題但是要小心的事情是你在這份code只有4個使用者所以你可以用去取餘數4可是我們希望說我們這份code假如有很多使用者或是我在上面不小心多放一個框框我有5個人在玩的時候我的code也可以work所以這邊會希望怎樣把4換成什麼user.land好就是有點OK好那我們就讓這個可怕又噁心的code跑一下然後當然我們不知道裡面有什麼東西所以我們要怎麼樣我們要把剛剛這個我們要把把user印出來嘛然後我們user.land點user要印先把它塗String好了把它變字串比較好看好然後我們存檔我們跑哪裡錯了users sorry好然後大家如果要用複數就要記得用s啊像我這裡也不太好因為我card是單數就是小地方大家要就是大家有一個guide line就是大家在合作的時候也要注意就是它圖書印是這樣那沒關係我們就就是把它當我們印出來的時候我們怎麼樣我們先看0好那我們就呃for我們想要把所有東西印出來所以我們forletterofusersusers對然後我們裡面去log我們去把useritemtostring我們就是變四行嘛四個user所以這邊會跑1234出來然後會跑裡面的各個裡面的一個一個的字串出來好我們跑一下有沒有這樣OK嗎這樣就出來了但是這樣子會覺得沒有那麼亂數對不對會覺得他是排排站他會覺得他排排站好因為你是用順序的就是從第一章去認主人的方式所以會變成是前面全部都是梅花會有這個問題我們在第十十張的Lab02欸在前面十張的Lab3對那就不會像是這樣子的結果OK因為要這樣子的結果要用另外一種方法寫吧結果這樣的方法是對於52張牌然後一張一張牌去跑然後跑了以後去找他的主人去分牌或是有另外一種方式應該是就是你每一次就是把卡片裡面減少一張每次都減少一張卡那就會是說比如說我有一個數呃我0到呃0到52之間我先去找一個亂數比如說是48然後把這48抽掉然後我的這張卡片裡面就剩下51張然後再抽掉然後再去所以你可能會有兩個變數這就很複雜啦就是說你的變數是你要52張牌裡面你要抽哪一張然後另外一個變數是欸另外一個也不用變數啊因為你就0123012301230123我就隨機取隨機取隨機取然後順序讓他跑4x13次可是我52張牌隨便取一張對不對然後我這樣順序的放牌進去是不是就也是使用者也是隨機的也是使用者也是隨機的好沒關係我這是第一個方法那我們時間還剩7分鐘
影片逐字稿largev2
好,我們先來解釋這個Lab要做的事情那這可能會用到後面一些要用的東西不過我們就先來講一下就是說首先呢,它題目要做的事情是它有四個花色,然後有13張牌,這就是撲克牌好,然後總共會有52張牌那我們可以先做這件事情那後面是要洗牌,然後發給四個玩家那我們就,這有好幾件事情,我們就先先來解了那總共我們有花色嘛,所以我們可以說我們就先來寫吧好,然後這個是十之第十張第十之三Lab3好,我們先建一個檔案十之三然後Lab03.js好的,首先我們有花色有這四種那我們就叫它叫做Type然後它是一個字串Array然後有梅梅花然後什麼梅花方塊愛心黑桃愛心黑桃然後我們有什麼我們有我們叫Num好了我們有一串數字然後這個數字其實不是數字喔,是A然後這邊是什麼,2 3 4 5 623 4 5 6 78 910JQOK,好我們有這幾種東西那我們現在想要先做的事情是我們不想要重複發牌所以我們不能,就是我們先想要把這些牌先生出來而不是說在後面回圈的時候再用變數去猜就是現在是什麼樣的Type然後是什麼Number再把它合在一起因為我如果這樣子用兩個亂數去拼的話有可能會有重複的牌出現就比如說我今天一個亂數可能選到方塊然後可能又用另外一個亂數可能選到5然後把這兩個組在一起又方塊5然後我後面可能跑了第五十次的時候可能又剛好又是這兩個組合所以我們現在用順序的方式先把52張牌先就是建出來好,所以我有card然後我card是一個空字串那我們先用4然後因為我們學到新招了嘛對不對我們新招是什麼4 in,對不對所以我們i,然後in,什麼inType然後4然後再一次in然後這時候用j好了inNum,對不對然後這時候我們要怎麼做呢我們是不是可以card然後記得什麼,push然後我們要push什麼東西進去勒我們要push的東西是type第i個對不對type嘛,這是對typetype第i個加上加上什麼,那我們第幾個第j個其實有更厲害的招啦用off更猛用off直接i加j就好了沒關係,我們先好,沒關係我們先這樣然後我們log我們把卡片點我想要看他所以我先把他toString好了好或是你不用toString也沒關係你如果用google你如果用chrome的話就不用toString好,我們看一下梅花A對,這樣都對嘛,對不對愛心89,10這樣好然後當然我也補充一下另外一種寫法好了然後等一下把他註解掉好好,用off就直接把type裡面的東西拿出來嘛ok,這應該沒有問題然後我們跑也是會跑一樣的結果出來好好,既然我們排已經建好了對不對,我們排現在已經建好了我們有52張排了那有時候老師這邊有52那我們就沒關係嘛car.land然後程式會告訴你,對,52張排沒問題好,這時候我們要來我們有四位玩家所以我們要先我們要有四個玩家,這樣子可以吧那他都是用字串來做所以我們先建一個比如說users然後等於框框裡面有框框分框框分框框分框框好,那我們覺得有點不知道老師在幹嘛,沒有關係這個東西不確定可不可以做對不對複製起來我們拿到這邊我們看一下,然後我們看一下users有沒有array00有沒有,我有四個玩家user0,user1,user2,user3然後裡面都是空空的空空的代表說都還沒拿牌給他ok好,那我們現在想要做的事情是我要產生一個亂數然後這個亂數是就是我要一直產生亂數然後這個亂數可以幹嘛呢我這個亂數是我們可以先來看後面的章節好了先來看後面亂數在第幾章勒三角函數亂數十五之一亂數好math.random好,然後這邊他是一個偽隨機因為電腦沒有辦法得到真正的隨機好,那隨機是什麼呢隨機是0到1的一個亂數然後他不包含1math.random所以他最大可能是0.99999999他就是不會到1沒關係,那我們就今天先來試試看就是先把control lock然後math因為我們還不會,所以我們先random執行他存檔,跑一次他給我0.0049再一次他給我0.072ok嗎那我今天,因為我有52張牌所以我想要得到一個0到52之間的整數對不對0到52,可是不包含52喔對不對因為52張牌只有0到51的indexok嗎好,那所以我就怎麼樣做勒我是不是把他乘以52ok這邊應該有講有沒有,他要得到0到100以內,所以他是去乘他ok,去乘他所以我們去乘52,然後我們看一下這是48然後這是2.7這是47那因為他不是整數嘛那有一個東西叫做math.floor那math.floor是什麼意思呢叫做無條件捨去ok所以我們這邊用math.floor去把我們剛剛一個0到52之間的,就51點多的一個小數的隨機數去把他去取無條件捨去,這樣我就會得到一個0到51的index這樣ok嗎好然後我們去存檔然後跑這得到18,有沒有,18,然後再按一次得到25好,這個時候我們就可以開始來做我們的發牌了嘛對不對那我們這個發牌怎麼做呢我是不是會想要就是我有一個for回圈然後我這個for回圈是然後這邊又可以寫i了,因為我是用let或是用var也可以var就是同樣一個字重複宣告i然後i小於多少0到3嘛,四個人嘛對不對或是這邊我可以比較就是可能會超過四個玩家我也可以怎麼做呢我可以forlet iin users如果大家會怕就先logi出來我們看一下是不是0到3對,0123嘛,對不對然後我們有三個使用者然後這時候我們在裡面要幹嘛呢他會他會跑我想一下喔他總共會跑幾次我現在想要等我一下喔我想一下喔我想一下我怎麼做比較好我是應該是0到500到5我應該對誰做我應該對誰做亂數會比較好我應該我應該把52張牌然後我這樣做會不會比較好我如果把52張牌然後走52次然後我把每一張牌都說他是給哪一個使用者這樣也可以吧那所以我的變數就是我想一下怎麼做會比較好恩對,我覺得這樣會比較簡單好那我們現在就是做就0到3這個我們先看一下是不是0到3恩哪邊少寫存檔好3然後再00到3的意思就是說恩我現在換另外一個思維來做就是我有52張牌然後我從第一張牌開始說他是給哪一個使用者比如說他如果是0就是給第一個使用者他如果是3就給最後一個使用者然後塞給他這樣好那我們現在就是做一個for回圈然後這個for回圈是要做在我們把每一張牌cardin card或是我們直接用off好了offcard然後他會每一張牌都跑過一次他每張牌都跑過一次那我們這邊我們可以把這個每次都generate一次變數letrand等於這個然後我們就可以怎麼樣呢我們可以依附user然後if userrand因為我們是隨機我們是隨機的使用者嘛然後我們隨機來認養這張卡然後我們隨機的使用者來認養這張卡他的他有什麼條件userrand是一個我們是一個字串裡面的字串所以這個字串的長度必須要小於等於13他不能超過13張阿我如果一直隨機使用者超多張卡這樣怎麼打撲克牌所以他小於13就他13張裡面的話如果他小於等於的話那我們就把牌給他.push.push我們就把他推到推給誰我們就把i推給他因為我們off嘛所以剛才這個都是卡嘛我們就把他推進去給他那如果不是呢如果不是怎麼辦我們就把給下一個人我們就把這個亂數比如說我原本要給使用者1阿你滿了我就給你後面那一個人但是會發生什麼問題請問會發生什麼問題如果他是最後一個人你給他1的話會怎樣就變4是不是就爆掉了所以我們對這個數字要要幹嘛要取餘數取對4的餘數可以接受嗎你現在只有4個使用者對不對那4個使用者的index是01.2.3那如果今天他滿了就叫我把這張牌給他我這張牌如果滿了我是不是給他我這個滿了我是不是給他可是我如果第三個我滿了怎麼辦我是不是要給下一個可是問題是4沒有這個人阿長度是4阿 沒有他嘛那就給他所以我取餘數嘛4取餘數等於0就他這樣就不會有問題了那1去除以4取餘數是12去除以4餘數是23去除以4餘數是3所以4除以餘數是0就回來了OK這沒有問題但是要小心的事情是你在這份code只有4個使用者所以你可以用去取餘數4可是我們希望說我們這份code假如有很多使用者或是我在上面不小心多放一個框框我有5個人在玩的時候我的code也可以work這邊會希望怎樣把4換成什麼user.len就是有點OK那我們就讓這個可怕又噁心的code跑一下當然我們不知道裡面有什麼東西所以我們要怎麼樣我們要把把user印出來然後我們user.user.len先把他toString好了比較好看好然後我們存檔我們跑哦哪裡錯了user哦sorry好然後大家如果要用負數就要記得用s像我這裡不太好因為我開的是單數就是小地方大家要就是大家要有一個guideline大家在合作的時候也要注意他toString是這樣那沒關係我們就把他當我們印出來的時候我們怎麼樣我們先看0好了好那我們就for我們想要把所有東西印出來所以我們for letterofusersusers然後我們裡面去log我們去把useri填toString我們就是變四行四個user所以這邊會跑1234出來會跑裡面的各個裡面的一個一個的字出來好我們跑一下有沒有這樣ok嗎這樣就出來了但是這樣子會覺得沒有那麼亂數對不對會覺得他是排排站他會覺得他排排站好因為你是用順序的就是從第一章去認主人的方式所以會變成是前面全部都是梅花會有這個問題我們在第10章的10.210.3那就不會像是這樣子的結果因為要這樣子的結果要用另外一種方法寫就這樣子的方法是對於52張牌然後一張一張牌去跑然後跑了以後去找他的主人去分牌或是有另外一種方式應該是就是你每一次就是把卡片裡面減少一張每次都減少一張卡那就會是說我有一個數我0到0到52之間我先去找一個亂數比如說是48然後把這48抽掉然後我的這一張卡片裡面就剩下51張抽掉所以你可能會有兩個變數這就很複雜你有一個變數是你要52張牌裡面你要抽哪一張然後另外一個變數是另外一個也不用變數啊因為你就0123我就隨機取然後順序讓他跑4乘以13次就是我52張牌隨便取一張然後我這樣順序的放牌進去使用者也是隨機的好沒關係我這是第一個方法那我們時間還剩7分鐘