‘壹’ 简易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;
}
‘贰’ 求一个用c++编写的dos版的斗地主的完整源码,小女子不胜感激。
好复杂啊 这么复杂我怎么知道
‘叁’ 谁有斗地主源码(C++/VC++)
http://www.1knx.cn/webbox_web_izvccc.html
‘肆’ 做一款安卓联网斗地主要多少钱
这个看你要什么样的 如果是单机都地主 那么你要是会安卓那么 不用花钱,如果搞联网的 只需要搞点服务器费用,源码这个东西不用我多说 为啥中国程序员都很苦 因为自己的东西永远得不到保护 你做一个别人看着好马上就做个一样的 所以说我们没有知识产权而言!!如果算侵权的话 那马化腾要破产了!
‘伍’ 求…c语言写的斗地主源代码
我是IMTI老师,我让你们写的,不是想让你们只有什么的代码,这些代码没有半点作用。关键是你要能通过写这个程序的过程,能够提高自己的解决问题的能力。你要是“渔”而不是“鱼”。
‘陆’ 求java单机斗地主完整源码
一共实现了如下功能
1. 抢地主功能,玩家可以选择自己当地主,还是留给电脑抢地主
2.牌型判断,判断 单牌,对子,3对,顺子,飞机,等等可能情况 为后面出牌跟牌做准备
3. 实现轮流出牌逻辑,并简单测试
4. 实现倒计时功能,如果玩家30秒为出牌自动超时,归为下一家出牌,电脑默认操作时间2秒
public void run() { while(i>-1 && isRun){ main.time[1].setText("倒计时:"+i--); second(1);//等一秒 } if(i==-1)//正常终结,说明超时 main.time[1].setText("不抢"); //如果自己抢到地主 if(main.time[1].getText().equals("抢地主")){ //得到地主牌 main.playerList[1].addAll(main.lordList); openlord(true); second(2);//等待五秒 Common.order(main.playerList[1]); Common.rePosition(main, main.playerList[1], 1); setlord(1); }else{ //电脑选地主 if(Common.getScore(main.playerList[0])
上面是实现逻辑的一个线程
Time.java文件里面
下面给出拆牌的逻辑
下面是一个枚举,命名不是很规范,但是容易懂,形象化的特征10多种牌型
package com; public enum CardType { c1,//单牌 c2,//对子 c3,//3不带 c4,//炸弹 c31,//3带1 c32,//3带2 c411,//4带2个单,或者一对 c422,//4带2对 c123,//连子 c1122,//连队 c111222,//飞机 c11122234,//飞机带单排 c1112223344,//飞机带对子 c0//不能出牌 }
下面是具体判断方法
//判断牌型 public static CardType jugdeType(List list){ //因为之前排序过所以比较好判断 int len=list.size(); //单牌,对子,3不带,4个一样炸弹 if(len<=4) { //如果第一个和最后个相同,说明全部相同 if(Common.getValue(list.get(0))==Common.getValue(list.get(len-1))) { switch (len) { case 1: return CardType.c1; case 2: return CardType.c2; case 3: return CardType.c3; case 4: return CardType.c4; } } //双王,化为对子返回 if(len==2&&Common.getColor(list.get(1))==5) return CardType.c2; //当第一个和最后个不同时,3带1 if(len==4 &&Common.getValue(list.get(0))==Common.getValue(list.get(len-2))) return CardType.c31; else { return CardType.c0; } } //当5张以上时,连字,3带2,飞机,2顺,4带2等等 if(len>=5) {//现在按相同数字最大出现次数 Card_index card_index=new Card_index(); for(int i=0;i<4;i++) card_index.a[i]=new ArrayList(); //求出各种数字出现频率 Common.getMax( card_index,list); //a[0,1,2,3]分别表示重复1,2,3,4次的牌 //3带2 -----必含重复3次的牌 if(card_index.a[2].size()==1 &&card_index.a[1].size()==1 && len==5) return CardType.c32; //4带2(单,双) if(card_index.a[3].size()==1 && len==6) return CardType.c411; if(card_index.a[3].size()==1 && card_index.a[1].size()==2 &&len==8) return CardType.c422; //单连,保证不存在王 if((Common.getColor(list.get(0))!=5)&&(card_index.a[0].size()==len) && (Common.getValue(list.get(0))-Common.getValue(list.get(len-1))==len-1)) return CardType.c123; //连队 if(card_index.a[1].size()==len/2 && len%2==0 && len/2>=3 &&(Common.getValue(list.get(0))-Common.getValue(list.get(len-1))==(len/2-1))) return CardType.c1122; //飞机 if(card_index.a[2].size()==len/3 && (len%3==0) && (Common.getValue(list.get(0))-Common.getValue(list.get(len-1))==(len/3-1))) return CardType.c111222; //飞机带n单,n/2对 if(card_index.a[2].size()==len/4 && ((Integer)(card_index.a[2].get(len/4-1))-(Integer)(card_index.a[2].get(0))==len/4-1)) return CardType.c11122234; //飞机带n双 if(card_index.a[2].size()==len/5 && card_index.a[2].size()==len/5 && ((Integer)(card_index.a[2].get(len/5-1))-(Integer)(card_index.a[2].get(0))==len/5-1)) return CardType.c1112223344; } return CardType.c0; }
下面是上面函数用到的一个函数
//返回花色 public static int getColor(Card card){ return Integer.parseInt(card.name.substring(0,1)); } //返回值 public static int getValue(Card card){ int i= Integer.parseInt(card.name.substring(2,card.name.length())); if(card.name.substring(2,card.name.length()).equals("2")) i+=13; if(card.name.substring(2,card.name.length()).equals("1")) i+=13; return i; } //得到最大相同数 public static void getMax(Card_index card_index,List list){ int count[]=new int[14];//1-13各算一种,王算第14种 for(int i=0;i<14;i++) count[i]=0; for(int i=0,len=list.size();i<14;i++) { switch (count[i]) { case 1: card_index.a[0].add(i+1); break; case 2: card_index.a[1].add(i+1); break; case 3: card_index.a[2].add(i+1); break; case 4: card_index.a[3].add(i+1); break; } } } } class Card_index{ List a[]=new ArrayList[4];//单张 }
‘柒’ 求unity3d斗地主游戏源码
我根据自己的理解写一点吧,纯手写。第一题: 1,脚本中定义public变量,然后在检视面板(inspector)中拖拽赋值获取 2,使用GameObject.Find+游戏物体名字获取如:GameObject.Find("cube"); 3,使用GameObject.FindGameObjectWithTag
‘捌’ 欢乐斗地主游戏源码价格多少
杰米科技的是2-3万,如客户还有其他要求,费用另算