[人狼] 新.汝は人狼なりや?規格式樣書
0.規格書的規格書
1.Notion
2.資料結構
3.網頁結構
4.工作分工
5.系統延伸
0.規格書的規格書==========================================================
要討論請到higurashi版回應或推文, 主要規格書修改會一直編輯該版文章
第一章-Notion
各種於設計期間/開發期間/晚上睡覺夢到的點子
未必要實際應用於程式中....但任何點子都可能成為重要的依據
這是在初期開發期間最重要的
也是最需要集思廣益的
第二章-資料結構
當然也可以說是資料庫結構,但事實上只要是陣列變數都屬於此章的範圍
不過初期設計當然還是從資料庫結構開始....
然後是陣列結構,最後才是定義所有的變數名稱
第三章-網頁結構
所有網頁的名稱, 負責的工作
相互之間傳遞的引數內容,從屬關係
要等第二章弄差不多才要開始處理
第四章-工作分工
作為一個(希望)中型開發計畫
只要2,3章決定了,就可以開始進行工作分工了
第五章-系統延伸
超長時間場(以真實時間計算時間...)
特多人數, 30人up
多占卜/獵人/靈能/etc...超複雜化
背德,戀人,狼占,狸貓,etc...等新職業加入
1.Notion==================================================================
系統=======================================================
將帳戶申請與村民登錄各自獨立
玩家退出村莊(而不是被KICK)/更改名稱頭像的功能
帳號名稱應該為單純英數,村民名稱也應該有所限制
對話的回應功能?悄悄話?
紀錄檔匯出&刪除而不是留在資料庫中(xml+xsl or htm+css
or mht/chm or php+css+csv/zip)
測試專用場,身代必為村人,人人有職位
加強的回合狀態顯示(防止漏投)
投票紀錄於哪個TABLE?(討論於2章TABLE ji_player)
內部全部使用UTC Time
Time紀錄應該唯一, 但是同時發生的事件應該隨機排序time+1
扮演模式?(玩家頭像&暱稱全部用系統內部設定)
聯合Server表(要有版本,標頭資訊等)
對話制防止對話灌水
簡易新手指南
對話使用ajax與壓縮技術
程式樣板化(文字/版面分離)
依據玩家的銀幕寬度,使用不同的版面
發言的文字顏色分離
替身名字的多樣化, 為特定acc_id而非uname或其他
玩家的預存發言,自訂死亡訊息等(取代"殘破的身體被發現")
允許ICON/MIG儲存於另一個網頁空間(使用FTP或多重途徑連線)
網頁複製文字/COPY畫面....統統不可以 (用照相機我服你...)
專家模式(有效參與場次,KICK次數有限玩家限制)
防止只開專家模式
音效: 開始遊戲/重新投票/日夜切換/未投警告
玩家紀錄
參加場數,完成場數,全參與場數(有留在幽靈間到結束或活到最後)
參加密度,扮演角色次數/獲勝次數
(玩家個人紀錄的公開程度, 應該讓玩家可以自己設定)
不良玩家紀錄
被KICK率(因為會有自行離場, 所以可以計算被KICK率)
在沒有重新投票的狀況下自殺
洗版,多重參賽,重投沒投,作弊嫌疑(一場一次,由玩家於結束後投票)
各種數量限制
同時玩家數目,募集中場次限制,新開募集最小時間差,遊戲中場次限制
所有場次總限制(含剛結束?),玩家重場限制,發言密度限制
專家場比例限制
室長功能?
強制KICK?,開場後修改規則?,廢場?
系統紀錄
每一場的開始跟結束時間,活動密度
遊戲PLAY FRAME配置(預想):
即時|廣告
狀態|對話輸入/登入
----+
村投|活人對話
人票|
狀選|- - - - - -
態單|死人/路人對話
規則與選項=================================================
開場GAME START投票Timeout
1A.不Timeout 1B.一段時間自動Timeout 1C.不講話一段時間自動Timeout
2A.可玩家自行取消 2B不可玩家自行取消
預設1C,2A, 不可設定
有玩家被KICK/自行離場 之後?
A.全部重投 B.不重投使用Timeout機制
夜間占卜不占的處理:
A.占卜死,遊戲繼續 B.系統隨便選 C.不占卜,遊戲繼續
夜間獵人不保護的處理:
A.獵人死,遊戲繼續 B.系統隨便選 C.不保護,遊戲繼續
夜間狼部份不投:
A.死狼,重投 B.死狼,不重頭 C.不死狼,不重投
日間玩家不投票的處理
A.死人,重投 B.死人,不重投(除非同票) C.不死人,不重投(當廢票,除非同票)
D.如果不投不影響結果則不死人不重投,若有影響則...?
同一晚占卜占狐&狼咬占卜之處理
A.兩個都死 B.死占卜不死狐狸
時間制/對話制/混合制
時間制:指定日間長度跟夜間長度(分鐘), 時間到投票時間倒數開始
對話制:限制一個日間或是一個夜間可以說幾句話, 歸零投票開始
混合制:上述兩種同時存在
投票時間可指定?
替身的職業例外?或是遊戲直接從早上開始?
職業希望制,替身君制度,公開票數
16人決定者,16人權利者,20人埋毒者
幽靈觀看角色禁止
更高/低的最大人數限制, 開場最少人數限制
2.資料結構================================================================
陸續補充中...
DB TABLE ji_account========================================
帳號資料,紀錄玩家帳號密碼狀態跟被KICK紀錄等
acc_id UNSIGNED MEDIUMINT AUTO_INCREMENT=1 NOTNULL
流水編號,從1開始
acc_name VARCHAR NOTNULL
帳號名稱(不是村民名稱)
acc_password
MD5編碼後的密碼
acc_authority
使用者權限
...
PRIMARY acc_id
UNIQUE acc_name
DB TABLE ji_room===========================================
村莊資料以及可選擇的規則
room_no UNSIGNED SMALLINT AUTO_INCREMENT=1 NOTNULL
村莊編號,從1開始
room_name VARCHAR NOTNULL
村莊名稱
room_comment TINYTEXT NULL
村莊說明
room_option BYTE() NOTNULL DEF=0
Bit指定選項,或者拆開來每一項用ENUM?
room_timeday UNSIGNED TINYINT NOTNULL DEF=0
啟用日間時間制,單位分鐘
room_timenight UNSIGNED TINYINT NOTNULL DEF=0
啟用夜間時間制,單位分鐘
room_talkday UNSIGNED SMALLINT NOTNULL DEF=0
啟用日間對話制,單位句數
room_talknight UNSIGNED SMALLINT NOTNULL DEF=0
啟用夜間對話制,單位句數
四項可混用,但注意不可time & talk兩項都是0
room_silienttime UNSIGNED TINYINT NOTNULL DEF=0
啟用若多久沒人說話就進入投票,單位秒
room_maxplayer UNSIGNED TINYINT NOTNULL DEF=1
最高開場人數限制
room_minplayer UNSIGNED TINYINT NOTNULL DEF=1
最低開場人數限制
room_timevote UNSIGNED TINYINT NOTNULL DEF=0
投票時間,單位10秒
即若room_timevote=12 => 120秒
room_day TINYINT NOTNULL DEF=0
= -2 已輸出紀錄,不可再進場
= -1 該場已結束,可以進去場後閒聊
= 0 招募中
= 2n-1 夜間 n 日目
= 2n 日間 n 日目
n為正整數(1,2,3,....,127)
room_timeleft UNSIGNED INT NOTNULL
制限時間(日間/夜間/投票), 當time()>timeleft及超過時限
room_talkleft UNSIGNED SMALLINT NOTNULL
剩餘的對話句數
room_voteround UNSIGNED TINYINT NOTNULL
目前投票的回數
村莊狀態 day timeleft/talkleft voteround 勝負
招募中 0 忽略 忽略
夜間討論 2n-1 至少其一不為0 0
夜間投票 2n-1 至少其一不為0 >0
日間討論 2n 至少其一不為0 0
日間投票 2n 至少其一不為0 >0
完結討論 -1 忽略 同day=-2
結束 -2 忽略 0 開場前廢村
1 進行中廢村
2 投票平手
3 村民勝利
4 狼勝利
5 狐勝利(人側)
6 狐勝利(狼側)
room_lastupdated UNSIGNED INT NOTNULL
該村莊最後一次事件時間
PRIMARY room_no
INDEX room_day
基本上...room表有點大....雖然一村只會用到一項....
可能考慮拆成ji_roomlog(村莊紀錄)
跟ji_roomrun(進行中村莊)兩表(ENGINE=MEMORY)
DB TABLE ji_player=========================================
屬於該村莊的村民資料
room_no = ji_room.room_no
其餘規劃中
vote_toid
==0 !=0
招募中 未投票 GAMESTART
已開始 未投票 目標acc_id
ji_message也會紀錄投票,但僅供作為log輸出用
vote判定則使用ji_player(遊戲開始投票也用這張表)
或者考慮因為長vote,獨立成ji_vote用ENGINE=MEMORY
(註:後來發現ji_vote表很好用, 明天把他弄出去...)
DB TABLE ji_icon===========================================
頭像
DB TABLE ji_message========================================
屬於該村莊的系統事件
room_no = ji_room.room_no
room_day = ji_room.room_day
msg_time UNSIGNED TIME NOTNULL
UTC Time
msg_type UNSIGNED TINYINT NOTNULL
msg_text TINYTEXT NOTNULL
msg_id_from = ji_account.acc_id
msg_id_to = ji_account.acc_id
表格規劃中, 已知原來有用到
FOX_DEAD FOX_EAT GUARD_DO GUARD_SUCCESS LAST_WORDS MAGE_DO
MAGE_RESULT NECROMANCER_RESULT OBJECTION RE_VOTE
POISON_DEAD_day POISON_DEAD_night
VOTE_KILL VOTE_KILLED VOTE_TIMES WOLF_EAT WOLF_KILLED
其實如果沒有狼占這種可以一次投兩種票的角色
甚至可以捨棄ji_message表,所有東西都可以從其他表查到
不管白天的吊人,晚上吃人/占卜/保護都統一到vote去
其餘可以直接輸出到talk不再收回
DB TABLE ji_talk===========================================
屬於該村莊的對話紀錄
room_no = ji_room.room_no
room_day = ji_room.room_day
talk_id
=0 = 系統事件
>0 = ji_account.acc_id
talk_type
when talk_id=0 =>
玩家加入
開始
日夜切換
遊戲結束
KICK VOTE
KICKED
KILL VOTE
KILLED
EAT VOTE
EATED
EAT FAUL
VOTE START
REVOTE
突然死亡
etc...
when talk_id>0 =>
=0 一般對話
=1 大聲對話
=2 小聲對話
talk_time
UTC Time
talk_sentence
內容
原來還用到一個spend_time, 用途不明?
這張表還很有討論空間....事關log輸出效率
--
渡良瀨 準
連連看: 北條ㄇㄥˊ 男
瑞穗 女
貂蟬
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.180.163
推
02/05 06:27,
02/05 06:27
→
02/05 06:28,
02/05 06:28
→
02/05 06:29,
02/05 06:29
→
02/05 06:31,
02/05 06:31
本來就可以不是嗎? 嗎?
推
02/05 09:17,
02/05 09:17
拿出來分享吧...有不少人都寫一半了XD
→
02/05 09:22,
02/05 09:22
所以對話存取一定要用ajax之類的更新機制
→
02/05 11:16,
02/05 11:16
推
02/05 11:17,
02/05 11:17
→
02/05 11:17,
02/05 11:17
→
02/05 11:18,
02/05 11:18
→
02/05 11:18,
02/05 11:18
→
02/05 11:19,
02/05 11:19
→
02/05 11:19,
02/05 11:19
推
02/05 11:23,
02/05 11:23
pm功能可以弄在長時間場, 保證一團混亂XD
推
02/05 11:31,
02/05 11:31
推
02/05 11:44,
02/05 11:44
推
02/05 12:47,
02/05 12:47
沒有意義....
推
02/05 12:50,
02/05 12:50
推
02/05 12:59,
02/05 12:59
→
02/05 12:59,
02/05 12:59
→
02/05 13:00,
02/05 13:00
推
02/05 14:07,
02/05 14:07
→
02/05 14:07,
02/05 14:07
→
02/05 14:07,
02/05 14:07
→
02/05 14:07,
02/05 14:07
→
02/05 14:07,
02/05 14:07
推
02/05 14:14,
02/05 14:14
→
02/05 14:15,
02/05 14:15
推
02/05 16:20,
02/05 16:20
推
02/05 16:33,
02/05 16:33
→
02/05 16:36,
02/05 16:36
推
02/05 16:38,
02/05 16:38
推
02/05 17:54,
02/05 17:54
→
02/05 17:56,
02/05 17:56
推
02/05 18:02,
02/05 18:02
→
02/05 18:12,
02/05 18:12
推
02/05 18:23,
02/05 18:23
推
02/05 18:25,
02/05 18:25
→
02/05 18:27,
02/05 18:27
推
02/05 18:29,
02/05 18:29
→
02/05 18:30,
02/05 18:30
推
02/05 19:03,
02/05 19:03
推
02/05 19:46,
02/05 19:46
→
02/05 19:46,
02/05 19:46
→
02/05 19:47,
02/05 19:47
→
02/05 19:48,
02/05 19:48
只會導致多頭馬車, 光是只有我跟企鵝兩個版本就亂七八糟了...
推
02/05 20:27,
02/05 20:27
→
02/05 20:28,
02/05 20:28
→
02/05 20:30,
02/05 20:30
→
02/05 20:30,
02/05 20:30
→
02/05 20:31,
02/05 20:31
推
02/05 21:33,
02/05 21:33
推
02/05 21:41,
02/05 21:41
推
02/05 21:45,
02/05 21:45
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/06 01:24)
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/06 03:27)
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/06 03:34)
推
02/06 10:54,
02/06 10:54
推
02/06 10:59,
02/06 10:59
→
02/06 11:01,
02/06 11:01
→
02/06 11:04,
02/06 11:04
→
02/06 11:06,
02/06 11:06
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/06 17:03)
推
02/07 13:21,
02/07 13:21
→
02/07 13:21,
02/07 13:21
→
02/07 15:29,
02/07 15:29
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/08 03:15)
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/08 04:15)
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/08 04:18)
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/08 19:38)
推
02/08 21:00,
02/08 21:00
→
02/09 01:53,
02/09 01:53
推
02/10 16:58,
02/10 16:58
→
02/10 16:58,
02/10 16:58
推
02/11 22:04,
02/11 22:04
推
02/12 03:14,
02/12 03:14
→
02/12 03:15,
02/12 03:15
→
02/12 03:16,
02/12 03:16
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.180.163
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/12 22:18)
推
02/12 22:57, , 1F
02/12 22:57, 1F
→
02/12 22:57, , 2F
02/12 22:57, 2F
推
02/12 22:59, , 3F
02/12 22:59, 3F
※ 編輯: SmallBeeWayn 來自: 122.116.180.163 (02/12 23:46)
→
02/13 13:58, , 4F
02/13 13:58, 4F
→
02/13 14:00, , 5F
02/13 14:00, 5F
推
02/13 14:00, , 6F
02/13 14:00, 6F
→
02/13 14:00, , 7F
02/13 14:00, 7F
→
02/13 14:02, , 8F
02/13 14:02, 8F
推
02/13 14:07, , 9F
02/13 14:07, 9F
→
02/13 14:08, , 10F
02/13 14:08, 10F
→
02/13 14:08, , 11F
02/13 14:08, 11F
→
02/13 14:09, , 12F
02/13 14:09, 12F
推
02/13 14:20, , 13F
02/13 14:20, 13F
推
02/13 14:22, , 14F
02/13 14:22, 14F
推
02/13 22:53, , 15F
02/13 22:53, 15F