导航:首页 > 源码编译 > 牌类游戏源码c服务端

牌类游戏源码c服务端

发布时间:2023-09-14 23:11:15

1. 用C++编写的小游戏源代码

五子棋的代码:

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

usingnamespacestd;

constintN=15;//15*15的棋盘

constcharChessBoardflag='';//棋盘标志

constcharflag1='o';//玩家1或电脑的棋子标志

constcharflag2='X';//玩家2的棋子标志

typedefstructCoordinate//坐标类

{

intx;//代表行

inty;//代表列

}Coordinate;

classGoBang//五子棋类

{

public:

GoBang()//初始化

{

InitChessBoard();

}

voidPlay()//下棋

{

CoordinatePos1;//玩家1或电脑

CoordinatePos2;//玩家2

intn=0;

while(1)

{

intmode=ChoiceMode();

while(1)

{

if(mode==1)//电脑vs玩家

{

ComputerChess(Pos1,flag1);//电脑下棋

if(GetVictory(Pos1,0,flag1)==1)//0表示电脑,真表示获胜

break;

PlayChess(Pos2,2,flag2);//玩家2下棋

if(GetVictory(Pos2,2,flag2))//2表示玩家2

break;

}

else//玩家1vs玩家2

{

PlayChess(Pos1,1,flag1);//玩家1下棋

if(GetVictory(Pos1,1,flag1))//1表示玩家1

break;

PlayChess(Pos2,2,flag2);//玩家2下棋

if(GetVictory(Pos2,2,flag2))//2表示玩家2

break;

}

}

cout<<"***再来一局***"<<endl;

cout<<"yorn:";

charc='y';

cin>>c;

if(c=='n')

break;

}

}

protected:

intChoiceMode()//选择模式

{

inti=0;

system("cls");//系统调用,清屏

InitChessBoard();//重新初始化棋盘

cout<<"***0、退出1、电脑vs玩家2、玩家vs玩家***"<<endl;

while(1)

{

cout<<"请选择:";

cin>>i;

if(i==0)//选择0退出

exit(1);

if(i==1||i==2)

returni;

cout<<"输入不合法"<<endl;

}

}

voidInitChessBoard()//初始化棋盘

{

for(inti=0;i<N+1;++i)

{

for(intj=0;j<N+1;++j)

{

_ChessBoard[i][j]=ChessBoardflag;

}

}

}

voidPrintChessBoard()//打印棋盘,这个函数可以自己调整

{

system("cls");//系统调用,清空屏幕

for(inti=0;i<N+1;++i)

{

for(intj=0;j<N+1;++j)

{

if(i==0)//打印列数字

{

if(j!=0)

printf("%d",j);

else

printf("");

}

elseif(j==0)//打印行数字

printf("%2d",i);

else

{

if(i<N+1)

{

printf("%c|",_ChessBoard[i][j]);

}

}

}

cout<<endl;

cout<<"";

for(intm=0;m<N;m++)

{

printf("--|");

}

cout<<endl;

}

}

voidPlayChess(Coordinate&pos,intplayer,intflag)//玩家下棋

{

PrintChessBoard();//打印棋盘

while(1)

{

printf("玩家%d输入坐标:",player);

cin>>pos.x>>pos.y;

if(JudgeValue(pos)==1)//坐标合法

break;

cout<<"坐标不合法,重新输入"<<endl;

}

_ChessBoard[pos.x][pos.y]=flag;

}

voidComputerChess(Coordinate&pos,charflag)//电脑下棋

{

PrintChessBoard();//打印棋盘

intx=0;

inty=0;

while(1)

{

x=(rand()%N)+1;//产生1~N的随机数

srand((unsignedint)time(NULL));

y=(rand()%N)+1;//产生1~N的随机数

srand((unsignedint)time(NULL));

if(_ChessBoard[x][y]==ChessBoardflag)//如果这个位置是空的,也就是没有棋子

break;

}

pos.x=x;

pos.y=y;

_ChessBoard[pos.x][pos.y]=flag;

}

intJudgeValue(constCoordinate&pos)//判断输入坐标是不是合法

{

if(pos.x>0&&pos.x<=N&&pos.y>0&&pos.y<=N)

{

if(_ChessBoard[pos.x][pos.y]==ChessBoardflag)

{

return1;//合法

}

}

return0;//非法

}

intJudgeVictory(Coordinatepos,charflag)//判断有没有人胜负(底层判断)

{

intbegin=0;

intend=0;

intbegin1=0;

intend1=0;

//判断行是否满足条件

(pos.y-4)>0?begin=(pos.y-4):begin=1;

(pos.y+4)>N?end=N:end=(pos.y+4);

for(inti=pos.x,j=begin;j+4<=end;j++)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i][j+1]==flag&&

_ChessBoard[i][j+2]==flag&&_ChessBoard[i][j+3]==flag&&

_ChessBoard[i][j+4]==flag)

return1;

}

//判断列是否满足条件

(pos.x-4)>0?begin=(pos.x-4):begin=1;

(pos.x+4)>N?end=N:end=(pos.x+4);

for(intj=pos.y,i=begin;i+4<=end;i++)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i+1][j]==flag&&

_ChessBoard[i+2][j]==flag&&_ChessBoard[i+3][j]==flag&&

_ChessBoard[i+4][j]==flag)

return1;

}

intlen=0;

//判断主对角线是否满足条件

pos.x>pos.y?len=pos.y-1:len=pos.x-1;

if(len>4)

len=4;

begin=pos.x-len;//横坐标的起始位置

begin1=pos.y-len;//纵坐标的起始位置

pos.x>pos.y?len=(N-pos.x):len=(N-pos.y);

if(len>4)

len=4;

end=pos.x+len;//横坐标的结束位置

end1=pos.y+len;//纵坐标的结束位置

for(inti=begin,j=begin1;(i+4<=end)&&(j+4<=end1);++i,++j)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i+1][j+1]==flag&&

_ChessBoard[i+2][j+2]==flag&&_ChessBoard[i+3][j+3]==flag&&

_ChessBoard[i+4][j+4]==flag)

return1;

}

//判断副对角线是否满足条件

(pos.x-1)>(N-pos.y)?len=(N-pos.y):len=pos.x-1;

if(len>4)

len=4;

begin=pos.x-len;//横坐标的起始位置

begin1=pos.y+len;//纵坐标的起始位置

(N-pos.x)>(pos.y-1)?len=(pos.y-1):len=(N-pos.x);

if(len>4)

len=4;

end=pos.x+len;//横坐标的结束位置

end1=pos.y-len;//纵坐标的结束位置

for(inti=begin,j=begin1;(i+4<=end)&&(j-4>=end1);++i,--j)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i+1][j-1]==flag&&

_ChessBoard[i+2][j-2]==flag&&_ChessBoard[i+3][j-3]==flag&&

_ChessBoard[i+4][j-4]==flag)

return1;

}

for(inti=1;i<N+1;++i)//棋盘有没有下满

{

for(intj=1;j<N+1;++j)

{

if(_ChessBoard[i][j]==ChessBoardflag)

return0;//0表示棋盘没满

}

}

return-1;//和棋

}

boolGetVictory(Coordinate&pos,intplayer,intflag)//对JudgeVictory的一层封装,得到具体那个玩家获胜

{

intn=JudgeVictory(pos,flag);//判断有没有人获胜

if(n!=0)//有人获胜,0表示没有人获胜

{

PrintChessBoard();

if(n==1)//有玩家赢棋

{

if(player==0)//0表示电脑获胜,1表示玩家1,2表示玩家2

printf("***电脑获胜*** ");

else

printf("***恭喜玩家%d获胜*** ",player);

}

else

printf("***双方和棋*** ");

returntrue;//已经有人获胜

}

returnfalse;//没有人获胜

}

private:

char_ChessBoard[N+1][N+1];

};

(1)牌类游戏源码c服务端扩展阅读:

设计思路

1、进行问题分析与设计,计划实现的功能为,开局选择人机或双人对战,确定之后比赛开始。

2、比赛结束后初始化棋盘,询问是否继续比赛或退出,后续可加入复盘、悔棋等功能。

3、整个过程中,涉及到了棋子和棋盘两种对象,同时要加上人机对弈时的AI对象,即涉及到三个对象。

2. (完整word版)纯C语言写的一个小型游戏 源代码

"扫雷"小游戏C代码

#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j; /*循环变量*/
int x,y,z[999]; /*雷的位置*/
int t,s; /*标记*/
int m,n,lei; /*计数*/
int u,v; /*输入*/
int hang,lie,ge,mo; /*自定义变量*/
srand((int)time(NULL)); /*启动随机数发生器*/
leb1: /*选择模式*/
printf(" 请选择模式: 1.标准 2.自定义 ");
scanf("%d",&mo);
if(mo==2) /*若选择自定义模式,要输入三个参数*/
{do
{t=0; printf("请输入 行数 列数 雷的个数 ");
scanf("%d%d%d",&hang,&lie,&ge);
if(hang<2){printf("行数太少 "); t=1;}
if(hang>100){printf("行数太多 ");t=1;}
if(lie<2){printf("列数太少 ");t=1;}
if(lie>100){printf("列数太多 ");t=1;}
if(ge<1){printf("至少要有一个雷 ");t=1;}
if(ge>=(hang*lie)){printf("雷太多了 ");t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;} /*否则就是选择了标准模式(默认参数)*/
for(i=1;i<=ge;i=i+1) /*确定雷的位置*/
{do
{t=0; z[i]=rand( )%(hang*lie);
for(j=1;j<i;j=j+1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i<=hang+1;i=i+1) /*初始化a,b,c*/
{for(j=0;j<=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1) {a[i][j]='+';} }
for(i=1;i<=ge;i=i+1) /*把雷放入c*/
{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}
for(i=1;i<=hang;i=i+1) /*计算b中数字*/
{for(j=1;j<=lie;j=j+1)
{m=48;
if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;
if(c[i-1][j]=='#')m=m+1; if(c[i+1][j+1]=='#')m=m+1;
if(c[i][j+1]=='#')m=m+1; if(c[i+1][j]=='#')m=m+1;
if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;
b[i][j]=m;
}
}
for(i=1;i<=ge;i=i+1) /*把雷放入b中*/
{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}

lei=ge; /*以下是游戏设计*/
do
{leb2: /*输出*/
system("cls");printf(" ");

printf(" ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ",w);
}
printf(" |");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf(" ");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei);
printf(" |");
for(j=1;j<=lie;j=j+1){printf("---|");}
printf(" ");
}

scanf("%d%c%d",&u,&w,&v); /*输入*/
u=u+1,v=v+1;
if(w!='#'&&a[u][v]=='@')
goto leb2;
if(w=='#')
{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}
else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}
else if(a[u][v]=='?'){a[u][v]='+';}
goto leb2;
}
a[u][v]=b[u][v];

leb3: /*打开0区*/
t=0;
if(a[u][v]=='0')
{for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i<=hang;i=i+1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}

for(i=1;i<=hang;i=i+1) /*检测0区*/
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;
if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;
if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;
if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;
if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;
}
}
}
if(t==1)goto leb3;
}

n=0; /*检查结束*/
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1;}
}
}
while(a[u][v]!='#'&&n!=(hang*lie-ge));

for(i=1;i<=ge;i=i+1) /*游戏结束*/
{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }
printf(" ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ",w);
}
printf(" |");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf(" ");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei); printf(" |");
for(j=1;j<=lie;j=j+1) {printf("---|");}
printf(" ");
}
if(n==(hang*lie-ge)) printf("你成功了! ");
else printf(" 游戏结束! ");
printf(" 重玩请输入1 ");
t=0;
scanf("%d",&t);
if(t==1)goto leb1;
}

/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/

3. 急需 一个用C写一个纸牌游戏的源代码思路,我只要思路不要源代码哈!

52帐牌可以模拟成一个大小为52的数组,如果追求内存空间的话,也可以以二进制来替换,只不过稍微麻烦一点。这里为了方便假设为BYTE abPoker[52] = {0};

两个循环解决问题.
for(int i = 2;i < 53;i++)
{
for(int j = 0;j < 51;j++)
{
if(abPoker[j] % 2 == 0)
{
abPoker[j] = !abPoker[j];
}
}
}
for(int j = 0;j < 51;j++)
{
通过数组中是0还是1来标识当前的牌是正面朝上还是反面朝上。
}

4. 简易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服务端相关的资料

热点内容
程序员怎么升职 浏览:241
图形化命令按钮vb 浏览:985
vcu盘加密怎么设置 浏览:412
如何加密备份微信聊天记录 浏览:527
安卓手机如何模拟键盘 浏览:930
查看dns地址命令 浏览:767
android录屏工具 浏览:840
成都互动直播系统源码 浏览:955
usb蓝牙android 浏览:409
服务器显示error1什么意思 浏览:710
python代码精简 浏览:459
文件加密了怎么找到了 浏览:195
jellyfin插件怎么选择主服务器 浏览:839
asp用户注册源码 浏览:48
什么是照片压缩文件 浏览:393
java调用js代码 浏览:981
昆山市民app怎么修改身份信息 浏览:779
php登陆次数 浏览:746
python字符转成数字 浏览:824
海川用的是什么服务器 浏览:378