日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

写个三国杀

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 写个三国杀 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自己老早以前就想寫個局域網的三國殺,以前思考過其游戲邏輯的實現,覺得有點復雜,一直也沒有真正動手,上個周末,真正動手做了起來,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是程序的主體框架,沒想到有什么好說的……

?

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

轉載于:https://www.cnblogs.com/hj046/archive/2011/09/21/2183001.html

總結

以上是生活随笔為你收集整理的写个三国杀的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。