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鬥地主的源碼
我表示還辦不了,努力中