寫個三國殺

2022-03-01 05:12:25 字數 1150 閱讀 7649

自己老早以前就想寫個區域網的三國殺,以前思考過其遊戲邏輯的實現,覺得有點複雜,一直也沒有真正動手,上個週末,真正動手做了起來,2天裡寫了大約2000來行**。算是把整個框架有了個大致的實現。下面把整個思路整理一下。

既然是輕量級的區域網版本,就沒必要把伺服器和客戶端分開來做,就讓程式自帶服務端和客戶端,類似於quake,乙個玩家建立了房間(主機),其他玩家可以搜尋到區域網內的這個房間,並連線上來,然後主機點選開始按鈕,遊戲開始。既然client,server模式類似於quake,那麼就乾脆仿quake仿到底,2000來行**都是採用的c語言實現,沒有qt,沒有stl,沒有mfc,程式的架構也高仿quake,這是算是向偉大的quake致敬的一種方式吧。本來圖形繪製部分的**也考慮用opengl來實現,結果被卡在繪製一直顯示一大塊白色這個問題上了,搜了半天只說可能是尺寸的原因,opengl要求紋理大小要是2^n+2m畫素大小。手工調節了下尺寸也無濟於事。一怒之下,影象介面全部換成了directdraw……

整個專案分成3個模組:2個dll模組,1個exe模組。2個dll分別是處理遊戲邏輯的game.dll和處理影象繪製的ref.dll, exe模組裡面實現client和server, client每幀呼叫ref.dll來繪製整個遊戲介面,server每幀呼叫game.dll來處理遊戲邏輯,client和server之間通過網路來通訊,由於考慮到遊戲要求可靠的網路傳輸,所以選用了tcp。而要實現客戶端查詢區域網類建立好的遊戲主機的話,由於tcp沒有廣播功能,可以在server端再開個udp的socket,來響應client發的udp廣播訊息。

game模組才是真正三國殺的實現,同時在記憶體裡儲存了整個戰局,它負責牌堆初始化,隨機抽牌,牌技能實現,技能響應,下面舉個殺閃簡單的例子來說明流程:玩家1對玩家2打出了一張殺(這個事件是由客戶端以網路訊息的形式發過來的),模組呼叫殺的處理函式,處理函式裡向客戶端發生乙個請求閃的網路訊息,同時把這個請求閃的事件儲存起來(入棧),客戶端收到訊息後,知道要打出閃,如果打出來了就向服務端發生個請求響應成功的事件的網路訊息,沒打出來就傳送響應失敗的網路訊息,服務端收到後,取出儲存的請求閃的事件(出棧),如果是個成功的訊息就結束處理,如果是失敗就進入傷害計算的的事件處理。

ref模組裡面是繪製和ui的實現,ui包括按鈕,窗體等的實現。exe裡呼叫這些來繪製整個遊戲。

exe是程式的主體框架,沒想到有什麼好說的……

最後,如果能寫好,當然要開源。

duilib寫個三國殺?

寫了兩天 感覺快tj了 趕緊記錄一下 目前的效果圖 血量的顯示太麻煩直接用數字顯示了 武將的自定義控制項真是太煩了 繼承了ccontainerui類 把所有的細節都new了乙個ccontrolui 右上角的臉譜是按鈕 變數名直接用的拼音 介面下方的部分直接用xml完成的 確定 取消 結束 這三個按鈕...

三國殺的理解

11 人生就像一局三國殺。有可能你還沒判斷出誰是好人誰是壞人你就掛了。12 人生就像一局三國殺。你對別人好,別人不一定對你好。13 人生就像一局三國殺。你要在這個世界生存有時需要偽裝。14 人生就像一局三國殺。你可能來這個世界只是來打醬油的。15 人生就像一局三國殺。有可能一出生就已經決定了你的身份...

三國殺自走棋

這個陣法叫做五騎兵陣 首先 從協戰上來說還沒有乙個協戰是浪費的 那麼這套陣容就是攻防兼備 2群可以得到閃 而3魏則是加上一點體力上限 這是防守 那麼5騎兵就是進攻 它可以是敵人有概率無法使用閃 1 當人口 1時 最好用非五騎兵陣容裡面的人 用像袁術 周泰這種可以扛住第二回合的武將 當然 如果有二星的...