国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

輕松編寫自己的拖拉機算法,進行算法大戰

2024-07-21 02:29:38
字體:
來源:轉載
供稿:網友

  拖拉機游戲是一個廣泛流傳的拖拉機游戲,有的地區又叫做升級或者雙摳(也有人說升級和拖拉機有所不同),拖拉機游戲在基本的規則上改變,主要是增加游戲的趣味性,比如有的地區可以一j到底,將莊家從j一下拉到2,也有的可以從a拉到j,q到6等玩法。

  拖拉機大戰是采用dotnet framework開發的一款拖拉機游戲,它實現了拖拉機游戲的基本規則,剔除了2是常主的功能,增加了一些亮主、流局的規則設置,還有一些扣底算法的選擇、必打數字的設定、購到底的規則選擇等,還可以使用機器人幫助您打牌,顯示目前的進度情況等。

  在界面方面,拖拉機大戰提供了牌面牌背制作功能,您只需輕點幾下鼠標,就可以將您機器中喜愛的數碼照片制作成牌面牌背,也可以在打牌的時候享受音樂的樂趣。

  對于dotnet程序開發者來說,您還可以利用拖拉機大戰的插件機制,開發您自己的出牌算法插件。您只需實現一個算法接口,這個算法接口定義了兩個方法,您只需實現這兩個算法,就可以完成您自己的認為比較厲害的出牌算法。有趣的是,你還可以和其他人進行算法比賽,以決出誰的算法更為優秀。

  下面將介紹這個接口,以及一個簡單的而且不太合法的算法實現。

  如果您要準備寫一個拖拉機的算法,您就需要引入kuaff.tractor.plugins.dll這個配件,它包含了kuaff.tractor.plugins. iuseralgorithm接口。

  這個接口的定義為:

using system;
using system.collections;
using system.text;

namespace kuaff.tractor.plugins
{
    public interface iuseralgorithm
    {
        /// <summary>
        /// 算法作者
        /// </summary>
        string author
        {
            get;
        }
        /// <summary>
        /// 算法作者的email地址
        /// </summary>
        string email
        {
            get;
        }
        /// <summary>
        /// 算法名稱
        /// </summary>
        string name
        {
            get;
        }
        /// <summary>
        /// 算法介紹
        /// </summary>
        string description
        {
            get;
        }
 
        /// <summary>
        /// 首先出牌的算法。
        /// </summary>
        /// <param name="who">當前用戶是誰,1為南家,2為北家,3為西家,4為東家</param>
        /// <param name="suit">當前主牌的花色,1為紅心,2為黑桃,3為方片,4為梅花,5為王(無主)</param>
        /// <param name="rank">當前打幾,0為打2,1為打3,2為打4........11為打k,12為打a,53為打王</param>
        /// <param name="master">當前誰為莊家,1為南家,2為北家,3為西家,4為東家</param>
        /// <param name="sendcards">當前一局各家已經出掉的牌,sendcards[0]為南家,sendcards[1]為北家,sendcards[2]為西家,sendcards[3]為東家</param>
        /// <param name="mycards">此用戶手中的牌</param>
        /// <returns></returns>
        arraylist shouldsendcards(int who, int suit, int rank, int master, string[] sendcards, string mycards);
 
        /// <summary>
        /// 改自己出的牌時的算法(自己不是首家)
        /// </summary>
        /// <param name="who">當前用戶是誰,1為南家,2為北家,3為西家,4為東家</param>
        /// <param name="suit">當前主牌的花色,1為紅心,2為黑桃,3為方片,4為梅花,5為王(無主)</param>
        /// <param name="rank">當前打幾,0為打2,1為打3,2為打4........11為打k,12為打a,53為打王</param>
        /// <param name="master">當前誰為莊家,1為南家,2為北家,3為西家,4為東家</param>
        /// <param name="whoisfirst">誰首先出的牌,1為南家,2為北家,3為西家,4為東家</param>
        /// <param name="sendcards">當前一局各家已經出掉的牌,sendcards[0]為南家,sendcards[1]為北家,sendcards[2]為西家,sendcards[3]為東家</param>
        /// <param name="currentsendcards">首家以及自己的上家出的牌</param>
        /// <param name="mycards">此用戶手中的牌</param>
        /// <returns></returns>
        arraylist mustsendcards(int who, int suit, int rank, int master, int whoisfirst, string[] sendcards, arraylist[] currentsendcards, string mycards);
    }
}

  它首先定義了幾個屬性,這幾個屬性分別代表算法作者的名稱以及email,算法的名稱以及簡單介紹。

  shouldsendcards方法定義了首家出牌的算法。比如該東家首先出牌時,調用shouldsendcards得到東家應該出的牌,接著調用mustsendcards得到北家應該出的牌,接著調用mustsendcards得到西家應該出的牌,接著調用mustsendcards得到南家應該出的牌,程序然后進行計算,得到下一次的首家,然后通過shouldsendcards得到首家出的牌……周而復始,直到手中的牌出完。

  通過上面一段的介紹,你也明白了mustsendcards方法的含義,就是非首家應該出牌的算法。

  下面這個sampleuseralgorithm類就是簡單實現了這個接口的一個類。它的源代碼可以在游戲的sources目錄得到,編譯好的配件放在plugins目錄。您編譯好的插件都必須放在plugins目錄,游戲可以自行讀取plugins文件下的dll文件,分析并得到編寫的插件類。

  這個sampleuseralgorithm類之所以簡單,是因為它的首家出牌算法是隨便挑一張牌就出了,而隨牌算法假定了首家出的是一張牌,自己隨便出了一張此花色的牌。您可以在這個插件上進行完善。

  游戲下載地址(包含了接口和一個簡單的算法實現源代碼):點擊這里,  下載地址2,下載地址三,下載地址四,軟件版本1.2.0.356.

  將您編寫的插件編譯成dll放在游戲的plugins目錄,在程序中設置某一方采用您編寫的算法,您就可以和程序中內置的算法進行對戰了。如果您的算法不合法(比如首家出拖拉機,您手中有拖拉機卻不出),說明您的算法還不完善,程序會自動將此方的算法更改為程序中內置的算法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景泰县| 三亚市| 韶山市| 甘孜| 莆田市| 青岛市| 泗洪县| 阿克| 崇信县| 黄梅县| 陵川县| 望都县| 平顶山市| 方正县| 长岛县| 定结县| 庆安县| 成都市| 瑞昌市| 涿鹿县| 璧山县| 丹东市| 临澧县| 文水县| 衡阳市| 雅江县| 永城市| 平远县| 长海县| 文成县| 河源市| 崇仁县| 永新县| 曲靖市| 丰县| 滨海县| 雷波县| 东城区| 南宁市| 昌江| 宁国市|