作業#20 射龍門. 在最後一堂課的時候Peter問我說想做怎樣的撲克牌遊戲,我就想到自己很喜歡玩的射… by 語音學家-初育城 彼得潘的 Swift iOS / Flutter App 開發教室 Medium

在最後一堂課的時候Peter問我說想做怎樣的撲克牌遊戲,我就想到自己很喜歡玩的射龍門,原本想說過年的期間可以把它做出來!結果,計劃趕不上變化。過年忙著打牌,就拖到禮拜一才開始動手寫作業,經過了5天的腦力激盪,終於把作業做出來了! 這邊我是用Struct的方式分類,本來想要用For-In Loop的方式。但是我對For-In… 語音學家-初育城12 min read·Feb 12, 2022

--

Share

這邊因為我都是用一個ViewController來做,所以對我來說顯示的先後順序很重要。這邊我把規則的放在最上面,這樣點開來才不會被其他元件遮住。

Press enter or click to view image in full size

2.用Struct做好撲克牌的分類。

這邊我是用Struct的方式分類,本來想要用For-In Loop的方式。但是我對For-In Loop還不是很熟悉,所以用之前就會的方式,雖然感覺比較耗時間。但是我覺得這樣子比較好記錄每張撲克牌的圖片跟相對應的點數。

Press enter or click to view image in full size看起來很多,打起來其實也沒有很久 撲克牌的圖片我是用Peter提供的網站下載的,我覺得非常好用!一次下載什麼52張牌都有!名稱也不用修改!

The F2E - 前端 & UI 修練精神時光屋

六角學習地圖. 課程購買後不知從哪邊開始上嗎? 我們這邊提供一張學習地圖給同學做參考。 對於前端還有不了解的地方,可以參考前端開發者技能樹!或是直接與 …

challenge.thef2e.com

六角學習地圖. 課程購買後不知從哪邊開始上嗎? 我們這邊提供一張學習地圖給同學做參考。 對於前端還有不了解的地方,可以參考前端開發者技能樹!或是直接與 …

challenge.thef2e.com

拉好圖片後打他們的名稱到Struct裡面

3.宣告變數

這邊我思考了蠻久的,在想有哪些東西需要儲存的。最後再做一個Struct來儲存賭金的。

Press enter or click to view image in full size

4.建立需要使用的Func

這邊我其實只有建立四個函示,先是洗牌後取出三張牌,如果取出的牌太相近,會再重新取牌一次。

// 遊戲開始時要跑的函式func gameStar(){// 把全部的卡片打亂allCard.shuffle()// 取第一張fristCardIV.image = UIImage(named: allCard0.cardIV)// 取第二張secCardIV.image = UIImage(named: allCard1.cardIV)// 取第三張thirdCardIV.image = UIImage(named: allCard2.cardIV)fristcardsNum = allCard0.cardNumsecondCardsNum = allCard1.cardNumthridCardsNum = allCard2.cardNum}// 如果有順序太相近的func cardReturn(){// 把卡片的index歸零cardIndex = 0// 卡片全部隱藏secCardIV.isHidden = truefristCardIV.isHidden = truethirdCardIV.isHidden = trueresultLabel.text = “順序太近重發一次!”}

以及如果沒有打你池底的金額還有下注金額時需要跑出提醒的Alert。

這邊我是參考Peter的文章,用簡單的Alert!

顯示警告訊息和選單的 UIAlertController

使用 iOS App 時,我們時常看到兩種視窗。

medium.com

使用 iOS App 時,我們時常看到兩種視窗。

medium.com

大概是長這樣~ // 用alert跑出提示字func typePullMoney(){let moneyAlert = UIAlertController(title: “尚未輸入池底金額!”, message: “請輸入您池底金額!”, preferredStyle: .alert)let okType = UIAlertAction(title: “了解”, style: .default, handler: nil)moneyAlert.addAction(okType)present(moneyAlert, animated: true, completion: nil)}// 用alert跑出提示字func typeBetMoney(){let moneyAlert = UIAlertController(title: “尚未輸入賭注金額!”, message: “請輸入您賭注金額!”, preferredStyle: .alert)let okType = UIAlertAction(title: “了解”, style: .default, handler: nil)moneyAlert.addAction(okType)present(moneyAlert, animated: true, completion: nil)}// 用alert跑出提示字func pullMoneyEnought(){let moneyAlert = UIAlertController(title: “池底金額不足!”, message: “您輸入的賭注金額高於池底!”, preferredStyle: .alert)let okType = UIAlertAction(title: “了解”, style: .default, handler: nil)moneyAlert.addAction(okType)present(moneyAlert, animated: true, completion: nil)}

5.開始打你的每個Button的指令

這邊我做了六個Button,分別是 發牌、下注池底、下注金額、顯示遊戲規則、重新一局、All In。

先從簡單的開始講起。

顯示規則

非常簡的的方式,記得要把你的TextView放到最上層。才不會被你其他的元件擋住。

Press enter or click to view image in full size@IBActionfunc pokeRule(_ sender: Any) {// 按一下就會讓Index+1ruleIndex += 1// 等於1的時候規則就會顯示if ruleIndex == 1 {pokeRuleTV.isHidden = falseruleIndex += 1// 大於2就會隱藏}elseif ruleIndex > 2 {pokeRuleTV.isHidden = trueruleIndex = 0}}重新一局

這個也是比較簡單的,把原本有的都歸零跟重新。

@IBActionfunc resetGame(_ sender: UIButton) {// 重新洗牌再取三張gameStar()// 把撲克隱藏sentYourPullMoneyTF.isHidden = falsefristCardIV.isHidden = truethirdCardIV.isHidden = truesecCardIV.isHidden = truehitCardIV.isHidden = true// 金額歸零pullmoney.INpullMoney = 0// 把輸入的值都清空sentYourPullMoneyTF.text = ““moneyLabel.text = ““moneyTF.text = ““yourBetLb.text = “"}All IN

這也是比較簡單的部分只是讀取你現在池底的金額,再把他變成你要下注的金額。

@IBActionfunc allIN(_ sender: UIButton) {// 讓你的標題變文字resultLabel.text = “All In啦!臉色特變!”// 你的金額 = 你全部的金額moneyTF.text = “\(pullmoney.INpullMoney)”// 你下注的金額 = 你全部的金額yourBetLb.text = “\(pullmoney.INpullMoney)"}你的底池金額

本來我是打算打在發牌那邊,但發現我的水平,會沒辦法儲存底池金額,所以我就再加一個按鍵,來輸入你底池的金額。以及如果你沒有打金額的話會跑出提示字(上面的影片)。

@IBActionfunc sentPullMoney(_ sender: UIButton) {// 先宣告一個你池底金額let checkMyPull = Int(sentYourPullMoneyTF.text!)// 如果他是空值的話if checkMyPull == nil{// 跑出提示typePullMoney()} else {// 如果他有值的話,把他的TextField隱藏sentYourPullMoneyTF.isHidden = true// 輸入的金額 = 你池底的金額pullmoney.INpullMoney = checkMyPull!// 顯示你的金額moneyLabel.text = “\(Int(pullmoney.INpullMoney))”}}下注金額

這邊也是差不多的東西,只是加上了如果下注金額大於池底的錢,會跑出提示字。

@IBActionfunc sentMoney(_ sender: UIButton) {//先宣告一個下注金額let moneyCount = Int(moneyTF.text!)// 如果他是空值的話if moneyCount == nil{// 跑出提示字typeBetMoney()}else{// 如果不是會顯示你下注的金額yourBetLb.text = “\(moneyCount!)”}// 如果你下注的金額大於你池底的金額if moneyCount! > pullmoney.INpullMoney {// 跑出提示字pullMoneyEnought()}}Press enter or click to view image in full size發牌

最難的就放在最後講!

這邊我也是苦惱了很久,原本要全部都用if-else寫完,但是發現好像太麻煩,最後決定用Switch Case + If-else完成

當按下按鈕的時候,就會先跑這邊,這邊也是聽從Peter跟帥哥學長的建議要善用print來確定的迴圈有沒有被跑到。

先來講解一下,原本是想打 = nil就不會跑,但其實池底金額跟下注金額,都可以為空值,所以變成要判斷,如果池底金額跟下注金額就要=0。

當池底金額跟下注金額 = 0,就會判斷他們沒下注,才會跑出提示字。

Press enter or click to view image in full size在你看到牌前已經跑了三圈了 接下來是當看到第二張牌時,要確認是否與第一張牌一樣或是連號,如果是的話,會重新洗牌發牌,如果沒有才會開始跑到第三張牌,這邊看到我用了很多Print來確認我的牌是否有跟一開始的不一樣。

Press enter or click to view image in full size最後就是最困難的地方啦!原本以為已經想好用Switch的方式但是發現Swich Case的範圍只能由小到大,如果是由大到小,程式就會崩潰。

跑出你的值超出你的判斷範圍

Fatal error: Range requires lowerBound <= upperBound

像下面圖

Press enter or click to view image in full size最後還是靠帥哥學長教我的方法。 所以這邊要在跑到Switch Case時先用if-else判斷他的範圍,再把他調整到由小到大的範圍。

Press enter or click to view image in full size這邊用完之後就是最後的一局結束要換到下一局的方法了!

最後就比較簡單,就是當你的cardindex大於4時讓他歸零,再重新開始就可以啦!還有寫一個如果池底沒錢時就要再讓大家丟錢的迴圈。

Press enter or click to view image in full size

成品展示

做完真的蠻有成就感的!自己盡然完成了一個遊戲!雖然還是有請教我的帥哥學長 Tommy 有他的幫忙才可以這麼快寫完><

之後要好好來研究for-in迴圈了。

GitHub - ChuGoGo/ShootDragonDoor

You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or…

github.com

You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or…

github.com

參考作品

#22 二十一點亞洲慈善撲克王大賽

燃燒你的小宇宙,開發二十一點 App,成為亞洲慈善撲克王大賽的冠軍 !

medium.com

燃燒你的小宇宙,開發二十一點 App,成為亞洲慈善撲克王大賽的冠軍 !

medium.com

作業#41 Black Jack 21點 — 撲克牌遊戲

目的:練習做出能夠與電腦對戰的21點撲克牌遊戲

medium.com

目的:練習做出能夠與電腦對戰的21點撲克牌遊戲

medium.com

#27 Blackjack 21 🃏🃏🃏🃏🃏

做這種卡牌遊戲根本就是邏輯大考驗,寫到最後發現自己竟然寫了四層 if ,真的是很燒腦,昨天寫完決定先放空一下,今天再來上傳 Medium。先來看看成品動畫~

medium.com

做這種卡牌遊戲根本就是邏輯大考驗,寫到最後發現自己竟然寫了四層 if ,真的是很燒腦,昨天寫完決定先放空一下,今天再來上傳 Medium。先來看看成品動畫~

medium.com

FAQ

射龍門棄牌要丟錢嗎?

開局後,發牌者會依序發給每個玩家2張牌,之後再依照發牌順序詢問玩家是否要補第3張牌: 👉【不補】:玩家在此輪棄權,無法拿回檯面上自己付的彩金。

撲克牌還可以玩什麼?

撲克牌射龍門小道具推薦,玩起來更順手! 小編推薦這台半自動洗牌機,一次可以洗兩副撲克牌(只想洗一副也可以分兩半照洗),手壓下去三秒OK,馬上繼

射龍門一開始怎麼玩?

玩法:不算花色,僅看數字。 每位玩家發兩張牌當「龍門」(球門),第三張牌點數為「球」,「球」點數在於「龍門」內則得分;不在龍門內則沒分;第三張

射龍門必備牌數!2副牌讓你贏翻過年

射龍門是過年超熱門的撲克牌遊戲,簡單好上手!標準玩法建議用兩副牌(總共104張),這樣牌夠多,每輪發牌都刺激又公平。airainjoey.p

順子完勝三條!撲克牌型必勝秘訣

嘿,撲克迷!你在問順子跟三條誰比較大嗎?答案超簡單:順子永遠贏三條!這是撲克牌型的基本規則,讓我們來聊聊為什麼。iwanzi+1​ 撲克牌型從

本網站僅收集相關文章。如需查看原文,請複製並打開以下連結:作業#20 射龍門. 在最後一堂課的時候Peter問我說想做怎樣的撲克牌遊戲,我就想到自己很喜歡玩的射… by 語音學家-初育城 彼得潘的 Swift iOS / Flutter App 開發教室 Medium

射龍門
最新文章 熱門文章
推薦文章

- YouTube

Enjoy the videos and music you love upload original content and share it all with friends family and the world on YouTube.

- YouTube

Enjoy the videos and music you love upload original content and share it all with friends family and the world on YouTube.

什麼是射龍門遊戲的期望值? - 金元寶娛樂城VIP俱樂部

這篇文章從數學的角度深入探討了射龍門這一受歡迎的撲克牌賭博遊戲。文章詳細介紹了射龍門的基本規則、遊戲玩法以及如何計算其期望值。透過解析贏的概率和輸的概率,讀者可以理解每次下注的平均結果,進而制定更合理的投注策略。文章還提供了多項實用建議,幫助玩家在遊戲中更好地控制風險與提升勝率。

- YouTube

Enjoy the videos and music you love upload original content and share it all with friends family and the world on YouTube.

射龍門 射龍門規則詳細講解,撞柱怎辦? - WINBET贏家娛樂城|新會員贈1500|運彩分析|娛樂城推薦|體驗金

遊戲目標 射龍門的目標是猜測第三張牌的點數是否位於前兩張牌的點數之間,從而贏取投注金額。 基本規則 發牌:總共52張牌,每位玩家先獲得兩張底牌,這兩張牌的點數決定了射龍門的範圍。 下注:玩家根據自己的判斷,決定是否在這兩張牌之間進行投注。 揭示第三張牌:發牌員揭示第三張牌,如果這張牌的點數在前兩張牌之間,那就是所謂的射龍門!玩家獲勝並獲得相應下注的獎金;如果不在範圍內,則需要付下注金額。 撞柱:如果第三張牌跟前兩一張的話則稱為撞柱,則遊戲繼續並需要付3倍下注金額到底池。 射龍門技巧 記牌:記住那些牌已經出過了,可以大幅提升自己射龍門的機率。 控制資金:設置自己的投注限額,避免因為連續失敗而損失過大,確保遊戲過程中的資金安全。 選擇適當時機下注:根據前兩張牌的點數範圍決定是否下注。例如,如果兩張底牌的點數範圍很大(如3和9),下注的成功率相對較高。 射龍門玩法範例,讓你更了解遊戲 我們在玩的時候會出現四種情況,讓我們針對這四種狀況去舉例。 撞柱 假設玩家的兩張底牌是1和5。 玩家下注50,認為第三張牌會落在1和5之間。 發牌員發出第三張牌,結果是1。 因為第三張牌的點數與其中一張底牌相同,這種情況稱為撞柱,玩家須付出三倍底注也就是150。 射中龍門 假設玩家的兩張底牌是1和5。 玩家下注50,認為第三張牌會落在1和5之間。 發牌員發出第三張牌,結果是3。 因為3在1和5之間,這種情況稱為射中龍門,玩家獲勝並獲得相應賠率的獎底注50。 沒射中龍門 假設玩家的兩張底牌是1和5。 玩家下注,認為第三張牌會落在1和5之間。 發牌員發出第三張牌,結果是6。 因為6不在1和5之間,這種情況稱為沒射中龍門,玩家輸掉下注金額50。 不補牌 等於前面下的底拿不回來,認賠殺出。 射龍門常見問題解答 射龍門的發牌順序? 在射龍門遊戲中,發牌順序通常是以發牌者的順時針方向依序發牌。不過,遊戲規則可以根據玩家的偏好進行調整,例如改為逆時針方向也是可以的。但請注意,一旦確定發牌順序,就需要全程遵循,避免混亂。 玩射龍門需要準備幾副牌? 由於射龍門的遊戲節奏較快,通常建議準備至少2副牌。這樣可以減少中途洗牌的等待時間,使遊戲進行更加順暢和愉快。如果玩家人數較多,可以考慮準備更多副牌。 兩個人可以玩射龍門嗎? 當然可以!射龍門適合2到10人一起玩。玩家人數越多,所需準備的牌數也越多,一般建議準備2到4副牌即可。 如果兩張底牌點數相同怎麼辦? 如果發出的兩張底牌點數相同,選比兩張牌大還小,選中即得下注金額,反之賠償下注金額。 更多撲克牌遊戲看這邊 除了射龍門以外也有更多撲克牌遊戲像是鬥地主、炸金花或德州撲克等等。都可以在贏家娛樂城遊玩,新會員註冊更可以領體驗金168或首儲1000贈1000等眾多好禮。趕緊點擊按鈕立即加入吧! 延伸閱讀 百家樂入門指南 | 百家樂玩法不藏私,百家樂賺錢嗎? 【炸金花】5分鐘就學會炸金花怎麼玩,讓你贏錢贏到手軟! 【德州撲克AOF 】AOF範圍攻略,急速版德州撲克 Username *Email Address *Password *Confirm Password *Create Account Username *Password *Log InForgot Password?

# 文章標題 關鍵詞 文章連結 文章詳情