# G67 葉猴專案開發紀錄 ## 參考 [專案企劃](https://7f1azz.axshare.com) [成果影片](https://drive.google.com/drive/u/0/folders/1DC4lXvb1eH4UBBHmW_M80TJJLjUishM7) [競品](https://www.youtube.com/watch?v=DJ2cNzB_IIw) ## 事情準備 - 閱讀企劃 - 確認需求 - 檢查特效 - Git 開專案 - 改分支 master、預設: develop,刪除 main - common 開分支 - 設置 SDK - SenceManager、DataManager 新增遊戲設定 - 更換語系 csv - 複製專案 - 閱讀後端接口文件 - 熟悉規則、路圖 ## 開發 - [葉猴]複製專案 - 複製 & 更改編號(資料夾、code) - 修正 uuid - 完成後檢查 ### Loading - [葉猴]Loading - UI - 載入功能 ### Game - [葉猴]Game 下注區域 - - - - [葉猴]Game 玩家面板 - 玩家資訊 沿用 - 重複下注 / 確定取消 - 籌碼列 - 滑動時縮放(中央大側邊小) - 選中時發光 & 上移 - 出界效果待確認 - [葉猴]Game 按鈕 - 選單 - 退回大廳 沿用 - 更多遊戲 - 進行中牌局 - 聊天室 - [葉猴]Game 跑馬燈 - 沿用 - [葉猴]Game 聊天室 - 橫版沿用 - 直版另外獨立一個按鈕與聊天室 #### 介面控制 - [葉猴]骰子 - 規劃屬性 - 熟悉 3D 物件 - 設定骰子各面角度 - [葉猴]下注區域 - 規劃屬性 - 劃分區域 - 下注回饋動畫 - 勝利區域動畫 - 勝利倍率提示 - [葉猴]籌碼列 - 規劃屬性 - 橫向滑動 - 選中動畫 - [葉猴]籌碼池 - 規劃屬性 - 籌碼流動 - [葉猴]DynamicPopUpManager #### 彈跳窗 - [葉猴]HistoryPanel - 歷史注單 - Admin 注單 - [葉猴]SettingPanel - 音量條 - 靜音鈕 - 版本號(點擊複製) - [葉猴]RoadMapPanel - 詳細路圖 - 置頂 new 提示 - [葉猴]訊息視窗 - 訊息串接 - 設定 callback #### 階段 - [葉猴]階段循環 - 倒數時鐘 - 階段提示(開始、停止、加載) - 莊家控制 - [葉猴]加載中 - 還原階段畫面 - [葉猴]壓注 - 點擊加注,籌碼流動 玩家 -> 下注區 - 其他玩家下注,籌碼流動 其他玩家 -> 下注區 - 確定下注 - [葉猴]開獎 - 開盅演出 - 設定骰子結果 - [葉猴]派彩 - 籌碼回收 莊家 -> 勝利區域 - 派彩演出 勝利區域 -> 玩家 - 派彩演出 勝利區域 -> 其他玩家 - 更新簡易路圖 - [葉猴]切分頁 - 離開分頁 - 進入分頁 ### 其他遊戲 - [葉猴]更多遊戲 - [葉猴]進行中牌局 - [葉猴]好友房 ## 遊戲概述 遊戲以四個階段作為一個週期,不斷循環 - 開局 - 壓注 15s - 開獎 5s - 派彩 5s 遊戲中會有六顆骰子作為勝利的依據,骰子上對應六種圖案,當圖案出現兩個以上時即為中獎。 桌面上也會有六個區域對應六個圖案提供下注,可同時下注所有花色。 ### 載入遊戲 - 提示遊戲加載中 - 還原目前遊戲階段 ### 準備(?s) - 簡易路圖更新 - 清空畫面籌碼 ### 壓注(15s) - 提示開始下注 - 開放下注區域 - 金額超過限紅時,關閉區域 - 下注演出 - 點擊下注後,重複下注按鈕 換成 確認/取消按鈕 - 取消時收回玩家籌碼,按鈕換回 重複下注 ### 開獎(5s) - 提示停止下注 - 開獎演出 - 勝利下注區顯示獲勝倍率 ### 派彩(5s) - 籌碼流動 莊家 -> 獲勝區域 -> 贏家 - 玩家頭像得分演出 - 籌碼列蓋上遮罩 ## 後端接口 ### 請求 ### ThemeDataList - 取得廳別列表 ```typescript GameClient.themeDataList(); ``` - Response ```typescript interface IThemeDataListRes { themeDataList: IThemeData[]; } interface IThemeData { // 底注金額 ante: number; // 限紅列表 betLimitList: Array<{ betType: number; // 下注類型 lowerBetLimit: number; // 下注下限 upperBetLimit: number; // 下注上限 }>; // 准入金額 minCoin: number; // 房間列表 roomList: Array<{ customData: JSON; roomId: string; }>; // 廳房 themeId: number; } ``` --- ### JoinRoom - 加入房間 ```typescript GameClient.joinRoom(data); ``` - Request ```typescript interface IJoinRoomReq { carryAmount: number; // 攜帶金額 roomId: number; themeId: number; } ``` --- ### Leave - 離開房間 ```typescript GameClient.leave(); ``` --- ### Bet - 下注 ```typescript GameClient.bet(data); ``` - Request ```typescript interface IBetReq { playerBet: Array<{ betAmount: number; // 下注金額 diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 }>; }; ``` - Response ```typescript interface IBetRes { balance: number; // 玩家餘額 } ``` --- ### Restore - 狀態恢復(加入玩家已開始的房間內) ```typescript GameClient.restore(data); ``` - Request ```typescript interface IrestoreReq { topicName: number; // 房號 } ``` - Response ```typescript interface IrestoreRes { url: string; // laungeGameUrl } ``` --- ### 通知 ### SelfJoin - 玩家加入房間通知(通知對象: 玩家自己) ```typescript GameClient.setSelfJoinEvent(callback); ``` - Notice ```typescript interface ISelfJoinNotice { // 下注列表 betList: Array<{ betAmount: number; // 下注金額 diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 }>; // 遊戲歷程(路圖) histories: IRoadMap[][]; // 玩家人數 numberOfPlayer: number; // 玩家下注列表 playerBets: Array<{ betAmount: number; // 下注金額 diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 }>; // 廳房 ID themeId: string; } interface IRoadMap { diceCount: number; // 骰子出現次數 diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 } ``` --- ### PlayerWin - 玩家加入房間通知(通知對象: 玩家自己) ```typescript GameClient.setPlayerWinEvent(callback); ``` - Notice ```typescript interface IPlayerWinNotice { winBonus: number; // 中獎金額 } ``` --- ### KickOutPlayer - 玩家掛機過久踢人通知(準備階段發送: StageReady)(通知對象: 玩家自己) 備註: 需判斷isKickOut是否為true來斷定是否把玩家踢出 ```typescript GameClient.setKickOutPlayerEvent(callback); ``` - Notice ```typescript interface IKickoutPlayerNotice { isKickout: number; // 是否踢出 round: number // 回合數 } ``` --- ### CurrentNumberOfPlayer - 房間人數通知(根據設定每?秒發一次通知)(通知對象: 房間內的所有人)。 ```typescript GameClient.setCurrentNumberOfPlayerEvent(callback); ``` - Notice ```typescript interface ICurrentNumberOfPlayerNotice { numberOfPlayer: number; // 玩家人數 } ``` --- ### CurrentBettingTable - 房間下注盤面通知(根據設定每?秒發一次通知,且只有開始下注階段到開獎階段會通知StageStartBet->StageLottery)(通知對象: 房間內的所有人或玩家自己) ```typescript GameClient.setCurrentBettingTableEvent(callback); ``` - Notice ```typescript interface ICurrentBettingTableNotice { betList: Array<{ betAmount: number; // 下注金額 diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 }>; } ``` --- ### StageReady - 切換到準備階段通知(通知對象: 房間內的所有人或玩家自己) ```typescript GameClient.setStageReadyEvent(callback); ``` - Notice ```typescript interface IStageReadyEvent { histories: IHistory[][]; nextStatusTimestamp: number; // 下階段開始時間 nowStatusTimestamp: number; // 當前階段開始時間 } interface IHistory { diceCount: number; // 骰子出現次數 diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 } ``` --- ### StageStartBet - 切換到準備階段通知(通知對象: 房間內的所有人或玩家自己) ```typescript GameClient.setStageStartBetEvent(callback); ``` - Notice ```typescript interface IStageStartBetNotice { betLimitList: Array<{ diceType: number; // 下注區種類 1:梅花 2:方塊 3:皇冠 4:旗子 5:黑桃 6:紅心 lowerLimitAmount: number; // 限紅下限 uppperLimitAmount: number; // 限紅上限 }>; nextStatusTimestamp: number; // 下個遊戲階段開始時間 nowStatusTimestamp: number; // 牌桌當前階段的開始時間 } ``` --- ### StageStopBet - 切換到停止下注階段通知(通知對象: 房間內的所有人或玩家自己) ```typescript GameClient.setStageStopBetEvent(callback); ``` - Notice ```typescript interface IStageStopBetNotice { nextStatusTimestamp: number; // 下個遊戲階段開始時間 nowStatusTimestamp: number; // 牌桌當前階段的開始時間 } ``` --- ### StageLottery - 切換到開獎階段通知(通知對象: 房間內的所有人或玩家自己) ```typescript GameClient.setStageLotteryEvent(callback); ``` - Notice ```typescript interface IStageLotteryEvent { dices: number[]; // 六顆骰子結果 nextStatusTimestamp: number; // 下個遊戲階段開始時間 nowStatusTimestamp: number; // 牌桌當前階段的開始時間 winTypes: number[]; // 中獎類型 } ``` --- ### StageSettlement - 切換到結算階段通知(通知對象: 房間內的所有人或玩家自己) ```typescript GameClient.setStageSettlementEvent(callback); ``` - Notice ```typescript interface IStageSettlementNotice { dices: number[]; // 六顆骰子結果 nextStatusTimestamp: number; // 下個遊戲階段開始時間 nowStatusTimestamp: number; // 牌桌當前階段的開始時間 } ``` ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up