2007年1月27日 星期六

今日(JAN/27)進度

今天終於將顏色顯示method搞定了,也將目前所有class的除錯log設定完成,因此這個系統應該比以前要強固許多,不會因為其他人的不正常斷線而造成軟體崩潰。

也順便完成了可以讓輸入介面查閱歷史紀錄的command line mode。

下一步是將想了很久的timer做出來。

目前的構想是,四秒1 beat,15 beat算一個遊戲小時(round),物品、房間與生物的round trigger分成三部分輪流觸發,剛好是5 beats算一次觸發

以24 round為一日單位,30日算一個遊戲月,12月算一個遊戲年。
所以一個遊戲年為真實世界的六天。

當然timer是獨立thread,其中包含MudWorld。在它遊戲玩家的thread間,夾著一個Vector[150]的Array當作balking pattern的緩衝。當timer啟動時,必須將他目前使用的Vector鎖定,此時要進入的玩家thread只能將command塞到下一個Vector中。所以addCommand應該長這樣:

addCommand(MudCommand command){
 //鎖上,保護isProcessing與vector
 synchronized(vector[current]){
  if(isProcessing){addNextVector(command);return;}
  vector[current].add(command);
 }
}

class Vector{
 ...
 process(){
  synchronized(vector[current]){
   //鎖上,保護isProcessing與vector[current]
   isProcessing = true;
   for(MudCommand command:vector[current]){
    //processes commands
   }
  }
 }
}

沒有留言: