1. 简易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;
}
2. vb编写斗地主
我试着做过类似的程序,判断出牌是否符合规则的部分我已经做出来了。方法如下,仅供你参考。
一、自已做一个“牌”控件,它有一个属性 “值”。例如:牌A的值为1,J为11,Q为12,K为13,小王14,大王15 ……
二、做多个字符型数组。数组的每个元素均为合法的出牌可能,即,不在数组中的出牌是不合法的。如单牌数组,它有15个元素,分别是每个单牌的值。
三、在玩家选牌(即单击某张牌)的事件里,扫描一下所有被选中的牌,得到选中牌的值的顺序。
四、将得到的值顺序的这个字符串与二步中所创建数组的所有元素比较,若有相同则说明所选的牌符合规则。
例子:
For i = 1 To 13
DuiZi(i) = Trim(Hex(i)) & Trim(Hex(i)) '对子牌的所有可能,两个王属于炸弹牌,不属于对子。
Next i
至于这里为什么要把数字转化成十六进制,那是因为当我选择了比如Q这张牌时,它的值为12,和选择了A、2这两张牌时产生的选牌字符串是一样的,会产生混淆,转化成十六进制后,Q的值是十六进制数“C”,而A、2这两张牌的值的字符形式还是“12”。
判断函数:
Public Function IsRight(ByVal SelectedCard As String) As Boolean
IsRight = False
For i = 1 To 13
If SelectedCard =DuiZi(i) Then
IsRight = True
Card_Style = CS_DUIZI
Exit Function
End If
Next i
End Function
当然,这只是判断函数的一部分,你可以把所有判断都写到一个函数里,这样,当你的函数返回真的时候,你不但知道你所选的牌是符合要求的,还可以知道它是什么类型的牌。
3. 求j2me 斗地主源代码。
import javax.microedition.lci.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import javax.microedition.midlet.*;
import java.io.*;
import javax.microedition.io.*;
public class PlayerMIDlet extends MIDlet implements CommandListener {
private Display display;
private List lst;
private Command start = new Command("Play",Command.SCREEN, 1);
private Command exit = new Command("Exit",Command.EXIT,2);
int currentPlaying = -1;
//Sound Player object.
static Player bbsounds[];
private Player tonePlayer;
public PlayerMIDlet(){
display = Display.getDisplay(this);
sound_init();
createTonePlayer();
}
protected void startApp() {
String[] elements = ;
lst = new List("Menu", List.IMPLICIT, elements, null);
lst.setCommandListener(this);
lst.addCommand(start);
display.setCurrent(lst);
}
private void reset(){
}
protected void pauseApp() {
try {
if(bbsounds[currentPlaying] != null && bbsounds[currentPlaying].getState() == bbsounds[currentPlaying].STARTED) {
bbsounds[currentPlaying].stop();
} else {
defplayer();
}
}catch(MediaException me) {
reset();
}
}
protected void destroyApp(boolean unconditional) {
lst = null;
try {
defplayer();
}catch(MediaException me)
}
public void commandAction(Command c , Displayable d){
int index = lst.getSelectedIndex();
System.out.println("Playing Sound .....");
if(c == start){
if (index == 0){
sound_play(0);
}
if(index == 1){
sound_play(1);
}
if(index == 2){
playTones();
}
}
if(c == exit){
this.destroyApp(true);
}
}
void defplayer() throws MediaException {
try{
if (bbsounds[currentPlaying] != null) {
if(bbsounds[currentPlaying].getState() == bbsounds[currentPlaying].STARTED) {
bbsounds[currentPlaying].stop();
}
if(bbsounds[currentPlaying].getState() == bbsounds[currentPlaying].PREFETCHED) {
bbsounds[currentPlaying].deallocate();
}
if(bbsounds[currentPlaying].getState() == bbsounds[currentPlaying].REALIZED ||
bbsounds[currentPlaying].getState() == bbsounds[currentPlaying].UNREALIZED) {
bbsounds[currentPlaying].close();
}
}
bbsounds = null;
}catch(Exception e){
}
}
public void sound_init()
{
try
{
bbsounds = new Player[ 3 ];
InputStream in = getClass().getResourceAsStream("airhorn.wav");
try
{
bbsounds[0] = Manager.createPlayer(in, "audio/X-wav");
}catch( Exception e ){
//System.out.println("Exception in Sound Creation ");
}
in = null;
InputStream is = getClass().getResourceAsStream("intro.midi");
try
{
bbsounds[1] = Manager.createPlayer(is, "audio/midi");
is = null;
}catch( Exception e ){
//System.out.println("Exception in Sound Creation ");
}
}catch( Exception e){}
}
public void sound_play(int id)
{
//System.out.println("Playing ID is >>"+id);
sound_stop( currentPlaying );
currentPlaying = id;
try
{
bbsounds[ id ].realize();
System.out.println("Playing Sound...");
bbsounds[ id ].start();
}catch(Exception e){
//System.out.println("Playing Exception");
}
return;
}
public void sound_stop( int id)
{
try{
if(id!=-1){
bbsounds[ id ].deallocate();
bbsounds[ id ].stop();
tonePlayer.stop();
}
}catch(Exception ex){
//System.out.println("Stop Sound Exception ");
}
return;
}
private void createTonePlayer() {
/**
* "Mary Had A Little Lamb" has "ABAC" structure.
* Use block to repeat "A" section.
*/
byte tempo = 30; // set tempo to 120 bpm
byte d = 8; // eighth-note
byte C4 = ToneControl.C4;;
byte D4 = (byte)(C4 + 2); // a whole step
byte E4 = (byte)(C4 + 4); // a major third
byte G4 = (byte)(C4 + 7); // a fifth
byte rest = ToneControl.SILENCE; // rest
byte[] mySequence = {
ToneControl.VERSION, 1, // version 1
ToneControl.TEMPO, tempo, // set tempo
ToneControl.BLOCK_START, 0, // start define "A" section
E4,d, D4,d, C4,d, E4,d, // content of "A" section
E4,d, E4,d, E4,d, rest,d,
ToneControl.BLOCK_END, 0, // end define "A" section
ToneControl.PLAY_BLOCK, 0, // play "A" section
D4,d, D4,d, D4,d, rest,d, // play "B" section
E4,d, G4,d, G4,d, rest,d,
ToneControl.PLAY_BLOCK, 0, // repeat "A" section
D4,d, D4,d, E4,d, D4,d, C4,d // play "C" section
};
try{
tonePlayer = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
tonePlayer.realize();
ToneControl c = (ToneControl)tonePlayer.getControl("ToneControl");
c.setSequence(mySequence);
} catch (IOException ioe)
catch (MediaException me)
}
public void playTones() {
if (tonePlayer != null){
try {
System.out.println("Playing Sound...");
tonePlayer.prefetch();
tonePlayer.start();
} catch (MediaException me) {
//System.err.println("Problem starting player");
} // end catch
} // end if
} // end playTone
}
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lci.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
public class AudioMidlet extends MIDlet
implements CommandListener, Runnable {
private Display mDisplay;
private List main;
Player player=null;
VolumeControl vc;
public void startApp() {
mDisplay = Display.getDisplay(this);
main = new List("AudioMIDlet", List.IMPLICIT);
main.append("music1", null);
main.append("music2", null);
main.append("music3", null);
main.addCommand(new Command("Exit", Command.EXIT, 0));
main.addCommand(new Command("Play", Command.SCREEN, 0));
main.setCommandListener(this);
mDisplay.setCurrent(main);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable s) {
if (c.getCommandType() == Command.EXIT)
notifyDestroyed();
else {
Form waitForm = new Form("Loading...");
mDisplay.setCurrent(waitForm);
Thread t = new Thread(this);
t.start();
}
}
public void run() {
playFromResource();
}
private void playFromResource() {
try {
int i=main.getSelectedIndex();
InputStream in=null;
switch(i)
{
case 0:
in = getClass().getResourceAsStream("/chimes.wav");
player = Manager.createPlayer(in, "audio/x-wav");
player.start();
break;
case 1:
in = getClass().getResourceAsStream("/chord.wav");
player = Manager.createPlayer(in, "audio/x-wav");
player.start();
break;
case 2:
in = getClass().getResourceAsStream("/music.wav");
player = Manager.createPlayer(in,"audio/x-wav");
player.start();
break;
}
}
catch (Exception e) {
showException(e);
return;
}
mDisplay.setCurrent(main);
}
private void showException(Exception e) {
Alert a = new Alert("Exception", e.toString(), null, null);
a.setTimeout(Alert.FOREVER);
mDisplay.setCurrent(a, main);
}
}
//把上面两个java文件放在一个包里,我的是在Netbeans里编的,还要属性里改一下,就是在MIDlet里增加一下
//另外你要播放什么文件自己加在包里,程序里你也可以适当改一下参数
4. 易语言局域网斗地主源码怎么用!
用易语言的 客户和 服务器 发送文本信息 比如说发送“红桃2:方片3” 然后接收端检测发过来的一段文本 然后用分割文本 按照":"这个符号分割然后判断 很麻烦的。。
5. 欢乐斗地主怎么换牌
该游戏由三人玩一副牌,地主为一方,其余两家为另一方,双方对战,先出完的一方胜。 ● 牌型 1、火 箭:即双王(双鬼牌),什么牌型都可打,是最大的牌。 2、炸 弹:四张同点牌。例如四个3。除 火 箭和比自己大的炸 弹外,什么牌型都可打。 一般牌型 1、单牌:单个牌,例如一个9。 2、对牌:两个点数相同的牌,例如两个7。 3、三张牌:三张点数相同的牌,例如三个4。 4、三带一:三张同点牌 + 一张单牌。例如:三张3+单4 5、单顺:五张或更多连续的单牌。例如:3,4,5,6,7单牌。不包括2点和双王。 6、誉哪辩双顺:三对或更多连续的对牌。例如:对3+对4+对5。不包括2点和双王。 7、三顺:二个或更多连续的三张牌。例如:三张3+三张4+三张5。不包括2点和双王。也叫飞机不带翅膀 8、飞机带翅膀。三顺+同数量的单牌(对牌算两张单)。 例如:三张3+三张4+对5+对6 或 三张3+三张4+三张5+单6+单7+单8 9、四带二:四张牌+任意两张单牌,对牌作2张单牌算。例如:四张5+单3+单8 --- [返回页顶]● 牌型的大小 火箭是最大的牌。 炸 弹,除火箭和比自己大的炸 弹外,比其它牌型都大。 对一般牌型而言,只有当牌型相同和总张数相同的牌,才可比较大小。 其中像三带一、飞机带翅膀等组合牌型,只要比较其牌数最多牌值就行。只有比当前出的牌(场牌)大的牌才能出。 ---[返回页顶] ● 发牌 一副牌,留三张底牌,其他发给三家 ● 叫牌 首先由系统翻出一庆缺张明牌,获得明牌的玩家(即地主牌)先叫牌,每人只能叫一次;玩家可以选择叫"1分"、"2分"、"3分"或不叫,叫完后叫得最大的为地主。如最后无人叫牌视做无效牌,重新发牌。 ● 出牌 首先将三张底牌交给地主,三张底牌所有人都能看到。由地主开牌,然后按逆时针顺缓悔序依次出牌,轮到你跟牌时,你可选择PASS或按规则出牌。直至某一方牌出完就结束此局。
当然是出牌键啊,出牌左键、起牌右键
6. 用C#写一个斗地主程序
写是肯定可以写的, 如果是单单的人与人的对战容易实现一点, 如果要实现人机对战, 这里面涉及到人工智能,算法非常复杂, 没有一定的功底写不出来。
7. 谁帮我做一个QQ斗地主挂的VB源码小弟考试用.!
20分让人家给你做外挂,你也够天真的了。
8. 跪求c语言设计斗地主自动发牌系统
我以前用TC写过一个有图形界面的斗地主游戏。。不过是为了应付老师罢了,要是想做游戏不要用TC,也没必要学TC里面那些早就淘汰了的图形API...
给你个例子:
要导入的图形头文件就是:
#include <graphics.h>
如果要涉及键盘操作还要导入:
#include <bios.h>
以及预处理:
#define UP 18432 /*向上的键盘输入标志*/
#define DOWN 20480 /*向下的键盘输入标志*/
#define LEFT 19200 /*向左的键盘输入标志*/
#define RIGHT 19712 /*向右的键盘输入标志*/
关于画图的那些函数的用法可以网上下个TC函数大全。
注意一点:关于TC图形驱动的初始化可能给机器和操作系统有关,很多TC写的图形程序在有的机器上不能显示。
9. 求个局域网java斗地主的源码
我表示还办不了,努力中