當前位置:首頁 » 操作系統 » 鬥地主ai源碼

鬥地主ai源碼

發布時間: 2022-11-02 09:00:01

㈠ douzero訓練和自我對弈有什麼用

DouZero在不藉助任何人類知識的情況下,通過自我博弈學習,在幾天內戰勝了所有已知的鬥地主打牌機器人,並達到了人類玩家水平。
通過深度神經網路、動作編碼(actionencoding)和平行角色(parallelactors)來增強蒙特卡洛方法。
快手團隊開發的鬥地主AI命名為DouZero,意思是像AlphaZero一樣從零開始訓練,不需要加入任何人類知識。

㈡ 鬥地主不需要網路流量也不需要花錢嗎

單機鬥地主都不要流量和錢吧。

不過單機的玩法少,無疑就三種玩法。

闖關式的鬥地主,這種鬥地主AI的水平都是控制好的了;

殘局式的鬥地主,這種鬥地主前面比較簡單,約到後面的越難破解了;

普通的鬥地主,可以用道具作弊。現在很多鬥地主都是聯網和單機合一的了,隨便網上下載一個就是這樣的。

㈢ 摜蛋淮安跑得快下載推薦一下把,跪謝!

榮耀 V20挺不錯的,手機參數如下: 1、拍照:後置攝像頭:4800萬像素(f/1.8光圈)+TOF立體深感鏡頭,支持自動對焦,前置攝像頭:2500萬像素,f/2.0光圈,支持固定焦距,拍照功能:AI拍照、夜景、人像(含背景虛化、美膚、美體)、趣AR(含Qmoji、AR合影、趣味變裝、百變背景)、動態照片、拍照、專業拍照、錄像、專業錄像等,4800萬像素攝像頭搭配AI超清演算法,照片細節放大後依然清晰。 2、屏幕:屏幕尺寸:6.4英寸,屏幕色彩為1670萬色,解析度:FHD+ 2310×1080像素,屏佔比為91.82%,高清大屏,魅眼全視屏,沉浸全視界,令你沉浸於精彩紛呈的顯示畫面中。 3、性能:採用Magic UI 2.0.1(基於Android 9)系統,搭載新一代AI晶元麒麟980處理器,智慧大腦疾速運轉,運行更暢快,玩游戲輕松無壓力。 4、電池:電池容量:4000mAh(典型值),標配充電器支持4.5V/5A或5V/4.5A或5V/2A輸出,理論充電時間約1.5小時,充電時間快,續航時間長。 您可以登錄華為商城官網查看更多手機信息,根據個人愛好與需求進行選擇。

㈣ 求鬥地主AI演算法

參考資料: http://mayamoon.blog.163.com/blog/static/3647619200722491318313/希望對你所有幫助

㈤ 我想開發鬥地主人工智慧程序,有人知道用什麼語言好嗎, 最後給個代碼

// GameLogic.cpp: implementation of the CGameLogic class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "GameLogic.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// //靜態變數 //撲克數據 //撲克數據 const BYTE CGameLogic::m_cbCardData[FULL_COUNT]= { 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D, //方塊 A - K 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D, //梅花 A - K 0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D, //紅桃 A - K 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D, //黑桃 A - K 0x4E,0x4F, }; const BYTE CGameLogic::m_cbGoodcardData[GOOD_CARD_COUTN]= { 0x01,0x02, 0x11,0x12, 0x21,0x22, 0x31,0x32, 0x4E,0x4F, 0x07,0x08,0x09, 0x17,0x18,0x19, 0x27,0x28,0x29, 0x37,0x38,0x39, 0x0A,0x0B,0x0C,0x0D, 0x1A,0x1B,0x1C,0x1D, 0x2A,0x2B,0x2C,0x2D, 0x3A,0x3B,0x3C,0x3D }; ////////////////////////////////////////////////////////////////////////// //構造函數 CGameLogic::CGameLogic() { //AI變數 m_lBankerOutCardCount = 0 ; } //析構函數 CGameLogic::~CGameLogic() { #ifdef _CHECK_DUG file.Close() ; #endif } //獲取類型 BYTE CGameLogic::GetCardType(const BYTE cbCardData[], BYTE cbCardCount) { //簡單牌型 switch (cbCardCount) { case 0: //空牌 { return CT_ERROR; } case 1: //單牌 { return CT_SINGLE; } case 2: //對牌火箭 { //牌型判斷 if ((cbCardData[0]==0x4F)&&(cbCardData[1]==0x4E)) return CT_MISSILE_CARD; if (GetCardLogicValue(cbCardData[0])==GetCardLogicValue(cbCardData[1])) return CT_DOUBLE; return CT_ERROR; } } //分析撲克 tagAnalyseResult AnalyseResult; if(!AnalysebCardData(cbCardData,cbCardCount,AnalyseResult)) return CT_ERROR ; //四牌判斷 if (AnalyseResult.cbFourCount>0) { //牌型判斷 if ((AnalyseResult.cbFourCount==1)&&(cbCardCount==4)) return CT_BOMB_CARD; // if ((AnalyseResult.cbFourCount==1)&&(AnalyseResult.cbSignedCount==2)&&(cbCardCount==6)) return CT_FOUR_LINE_TAKE_ONE; if ((AnalyseResult.cbFourCount==1)&&(AnalyseResult.cbSignedCount==2)&&(cbCardCount==6)) return CT_FOUR_LINE_TAKE_ONE; if ((AnalyseResult.cbFourCount==1)&&(AnalyseResult.cbDoubleCount==2)&&(cbCardCount==8)) return CT_FOUR_LINE_TAKE_TWO; return CT_ERROR; } //三牌判斷 if (AnalyseResult.cbThreeCount>0) { //三條類型 if(AnalyseResult.cbThreeCount==1 && cbCardCount==3) return CT_THREE ; // 此源碼來自 棋牌基地 http://www.2qipai.com //連牌判斷 if (AnalyseResult.cbThreeCount>1) { //變數定義 BYTE cbCardData=AnalyseResult.cbThreeCardData[0]; BYTE cbFirstLogicValue=GetCardLogicValue(cbCardData); //錯誤過慮 if (cbFirstLogicValue>=15) return CT_ERROR; //連牌判斷 for (BYTE i=1;i<AnalyseResult.cbThreeCount;i++) { BYTE cbCardData=AnalyseResult.cbThreeCardData[i*3]; if (cbFirstLogicValue!=(GetCardLogicValue(cbCardData)+i)) return CT_ERROR; } } //牌形判斷 if (AnalyseResult.cbThreeCount*3==cbCardCount) return CT_THREE_LINE; if (AnalyseResult.cbThreeCount*4==cbCardCount) return CT_THREE_LINE_TAKE_ONE; if ((AnalyseResult.cbThreeCount*5==cbCardCount)&&(AnalyseResult.cbDoubleCount==AnalyseResult.cbThreeCount)) return CT_THREE_LINE_TAKE_TWO; return CT_ERROR; } //兩張類型 if (AnalyseResult.cbDoubleCount>=3) { //變數定義 BYTE cbCardData=AnalyseResult.cbDoubleCardData[0]; BYTE cbFirstLogicValue=GetCardLogicValue(cbCardData); //錯誤過慮 if (cbFirstLogicValue>=15) return CT_ERROR; //連牌判斷 for (BYTE i=1;i<AnalyseResult.cbDoubleCount;i++) { BYTE cbCardData=AnalyseResult.cbDoubleCardData[i*2]; if (cbFirstLogicValue!=(GetCardLogicValue(cbCardData)+i)) return CT_ERROR; } //二連判斷 if ((AnalyseResult.cbDoubleCount*2)==cbCardCount) return CT_DOUBLE_LINE; return CT_ERROR; } //單張判斷 if ((AnalyseResult.cbSignedCount>=5)&&(AnalyseResult.cbSignedCount==cbCardCount)) { //變數定義 BYTE cbCardData=AnalyseResult.cbSignedCardData[0]; BYTE cbFirstLogicValue=GetCardLogicValue(cbCardData); //錯誤過慮 if (cbFirstLogicValue>=15) return CT_ERROR; //連牌判斷 for (BYTE i=1;i<AnalyseResult.cbSignedCount;i++) { BYTE cbCardData=AnalyseResult.cbSignedCardData[i]; if (cbFirstLogicValue!=(GetCardLogicValue(cbCardData)+i)) return CT_ERROR; } return CT_SINGLE_LINE; } return CT_ERROR; } //排列撲克

求採納

㈥ 有沒有可能實現鬥地主游戲的智能出牌演算法

肯定是可以實現的。類似阿爾法狗,鬥地主的演算法應該簡單不少吧,核心思想就是,根據另外兩個人出的牌和自己手中的牌,計算如何出牌才能勝率最大。從實現原理來說,兩者應該是類似的,即每走一手,就遞歸計算各種出牌序列的獲勝概率,並隨時修正,難點應該在於可以出牌是為追求整體勝率最大而過牌。這東西感覺沒啥好玩的,有興趣可以自己嘗試寫下,不一定非要一次到位,可以從一個簡單的演算法入手,慢慢讓他變得智能。

㈦ 求鬥地主人機對戰程序演算法。

目前基本上沒有公開的鬥地主AI演算法,大部分的鬥地主游戲都是人人對戰的,並沒有多少人機對戰的,即使有,效果也都很差,所以如果有興趣可以位元組研究下

㈧ 各位C++老師,我下了一個鬥地主的源程序,發現沒有main的入口函數,我該從什麼地方開始著手看

你在vc環境下,點擊edit-->find in file,工程選擇你源碼所在目錄,搜索關鍵字就是main,下面的項目都不要選,然後點擊find,查看一下結果
main函數是所有工程的入口函數,但有些地方會把他封裝起來,比如想WinMain,Win32等,名字不一定是什麼,但肯定會帶著一個main的

㈨ 簡易c++鬥地主源碼,簡單的鬥地主不需要ui,只要能發牌,隨機決定地主,把牌按大小順序排列

#include <time.h>
#include <iostream>
#include <string>
#include <vector>

enum em_CardClass_t
{
_CC_hearts = 0, // 紅桃
_CC_Spade, // 黑桃
_CC_Clubs, // 梅花
_CC_Diamonds, // 方塊
_CC_King // 大小王
};

struct st_Card_t
{
em_CardClass_t _emCardClass;
UINT _uCardIndex; // _emCardClass為_CC_King時,有效取值[1,2]
// _emCardClass非_CC_King時,有效取值[1,13]
};

using namespace std;

void InitCard(vector<st_Card_t>& vtCard)
{
st_Card_t card;
for( UINT i=0; i<_CC_King; i++ )
{
card._emCardClass = (em_CardClass_t)i;
for( UINT j=1; j<14; j++ )
{
card._uCardIndex = j;
vtCard.push_back(card);
}
}

card._emCardClass = _CC_King;
card._uCardIndex = 1;
vtCard.push_back(card);

card._uCardIndex = 2;
vtCard.push_back(card);
}
// 分牌
void DealCard(vector<st_Card_t>& vtCard, vector<st_Card_t>& vtPlayer1,
vector<st_Card_t>& vtPlayer2, vector<st_Card_t>& vtPlayer3)
{
srand( (unsigned)time( NULL ) );
for( int i = 0; i < 51; i++ )
{
int iCard = rand() % vtCard.size();

switch( i % 3 )
{
case 0:
vtPlayer1.push_back(vtCard[iCard]);
break;

case 1:
vtPlayer2.push_back(vtCard[iCard]);
break;

default:
vtPlayer3.push_back(vtCard[iCard]);
break;
}

if( iCard != vtCard.size()-1 )
{
vtCard[iCard] = vtCard[vtCard.size()-1];
}
vtCard.pop_back();
}
}
// 叫牌
int Bid(vector<st_Card_t>& vtCard, vector<st_Card_t>& vtPlayer1,
vector<st_Card_t>& vtPlayer2, vector<st_Card_t>& vtPlayer3)
{
srand( (unsigned)time( NULL ) );

int iBider = rand() % 3; // 叫牌者,也就是地主
vector<st_Card_t>* pPlayer = NULL;
switch( iBider )
{
case 0:
pPlayer = &vtPlayer1;
break;

case 1:
pPlayer = &vtPlayer2;
break;

default:
pPlayer = &vtPlayer3;
break;
}

for( UINT i = 0; i < vtCard.size(); i++ )
{
pPlayer->push_back(vtCard[i]);
}
return iBider;
}
// 整牌(按紅桃、黑桃、梅花、方塊、小大王的花色順序整理,同一花色再按從小到大的順序整理)
void SortCard(vector<st_Card_t>& vtPlayer)
{
st_Card_t tmp;
for( UINT i=0; i<vtPlayer.size()-1; i++ )
{
for( UINT j=i+1; j<vtPlayer.size(); j++ )
{
if( vtPlayer[i]._emCardClass < vtPlayer[j]._emCardClass )
{
continue;
}

if( vtPlayer[i]._emCardClass == vtPlayer[j]._emCardClass &&
vtPlayer[i]._uCardIndex < vtPlayer[j]._uCardIndex )
{
continue;
}

tmp = vtPlayer[i];
vtPlayer[i] = vtPlayer[j];
vtPlayer[j] = tmp;
}
}
}

void PrintPlayerCard(const string& sPlayerName,
const vector<st_Card_t>& vtPlayer)
{
cout << sPlayerName << " cards:" << endl;
for( UINT i=0; i< vtPlayer.size(); i++ )
{
switch( vtPlayer[i]._emCardClass )
{
case _CC_hearts:
cout << "紅桃";
break;

case _CC_Spade:
cout << "黑桃";
break;

case _CC_Clubs:
cout << "梅花";
break;

case _CC_Diamonds:
cout << "方塊";
break;

default:
cout << "King";
break;
}
cout << vtPlayer[i]._uCardIndex<< " ";
}
cout << endl << endl;
}

void main()
{
vector<st_Card_t> vtCard;

vector<st_Card_t> vtPlayer1;
vector<st_Card_t> vtPlayer2;
vector<st_Card_t> vtPlayer3;

InitCard(vtCard);
DealCard(vtCard, vtPlayer1, vtPlayer2, vtPlayer3);
int iBider = Bid(vtCard, vtPlayer1, vtPlayer2, vtPlayer3);

SortCard(vtPlayer1);
SortCard(vtPlayer2);
SortCard(vtPlayer3);

PrintPlayerCard("Player1", vtPlayer1);
PrintPlayerCard("Player2", vtPlayer2);
PrintPlayerCard("Player3", vtPlayer3);

cout <<"地主是Player"<< iBider+1 << endl << endl;

}

㈩ 做一款安卓聯網鬥地主要多少錢

這個看你要什麼樣的 如果是單機都地主 那麼你要是會安卓那麼 不用花錢,如果搞聯網的 只需要搞點伺服器費用,源碼這個東西不用我多說 為啥中國程序員都很苦 因為自己的東西永遠得不到保護 你做一個別人看著好馬上就做個一樣的 所以說我們沒有知識產權而言!!如果算侵權的話 那馬化騰要破產了!

熱點內容
安卓的AndroidAuto 發布:2025-05-13 19:41:49 瀏覽:357
下載安裝python 發布:2025-05-13 19:39:21 瀏覽:27
蘋果手機如何退出ad密碼 發布:2025-05-13 19:35:24 瀏覽:353
資本論中央編譯局 發布:2025-05-13 19:21:50 瀏覽:134
python路徑是否存在 發布:2025-05-13 19:08:38 瀏覽:570
保時捷卡宴哪個配置比較好 發布:2025-05-13 19:00:08 瀏覽:725
c語言負數運算 發布:2025-05-13 18:45:21 瀏覽:428
太空殺電腦版連接不到伺服器 發布:2025-05-13 18:40:19 瀏覽:457
同樣的配置為什麼跑分不同 發布:2025-05-13 18:39:06 瀏覽:279
獲取linuxcpu序列號 發布:2025-05-13 18:36:35 瀏覽:738