培训服务 | PMP认证 | PgMP认证 设为首页 收藏本站 关于我们 联系我们
麻将游戏开发
发布者:佚名 来源:西部数码 点击: 发表日期:2014-07-08

  最近要学习软件工程,学习之余就去网络上玩麻将,呵呵~~~

  突发奇想要自己开发一个,边练手,边娱乐,何乐而不为呢

  麻将游戏要用到很多模块,慢慢补来

  也望各位大大多留下意见,先谢过

  麻将网络游戏项目

  项目分为服务器端和客户端两大模块

  服务器端功能:提供游戏玩家注册、登录、积分、聊天服务

  为游戏提供桌号、洗牌、算番

  客户端:游戏界面,判断是否吃、碰、杠、听牌及胡牌

  数据结构:麻将的数字表示

  用数字0~35表示麻将牌,其中0~8代表一万到九万,9~17代表一条到九条,18~26代表一筒到九筒,27代表东风,28代表南风,29代表西风,30代表北风,31代表中,32代表发,33代表白,34代表春夏秋冬,35代表梅竹兰菊

  见下表

  ============================================

  0 1 2 3 4 5 6 7 8

  ============================================

  一万 二万 三万 四万 五万 六万 七万 八万 九万

  ============================================

  9 10 11 12 13 14 15 16 17

  ============================================

  一条 二条 三条 四条 五条 六条 七条 八条 九条

  ============================================

  18 19 20 21 22 23 24 25 26

  ============================================

  一筒 二筒 三筒 四筒 五筒 六筒 七筒 八筒 九筒

  ============================================

  27 28 29 30 31 32 33 34 35

  ============================================

  东风 南风 西风 北风 红中 发财 白板 花1 花2

  ============================================

  每个数字出现四次,代表四张牌,洗牌时采用随机算法提供牌墙

  牌墙数据结构:

  圈风:

  quanfeng:(27,28,29,30)

  数组paiqiang[0..143],其中

  paiqiang[0]~paiqiang[35]为东(庄)家

  paiqiang[36]~paiqiang[71]为南家

  paiqiang[72]~paiqiang[107]为西家

  paiqiang[108]~paiqiang[143]为北家

  玩家数据结构:

  玩家wanjia:{

  门风:

  menfeng:(27,28,29,30)

  杠:

  gangpai{

  pai:0~33

  mingAn:0|1

  }

  gangarr[0..3]:gangpai(最多四个杠,数字表示杠的牌,结构体第二位的0表示明杠,1表示暗杠)

  碰:pengpai[0..3]:0~33最多四个碰牌

  吃:

  chipai{

  chimin:(0~6,9~15,18~24)

  chimax:(2~8,11~17,20~26)

  }吃牌中只用记录顺子的收尾即可

  chiarr[0..3]:chipai(最多有三个吃牌)

  花牌:0~8(初始化为0,每摸到一个花牌加一)

  手牌:paiInHand{

  pai[0..13],

  num:1,4,7,10,13

  }

  要牌pai[13]:除庄家外,初始化为-1,待摸牌上手(吃牌,碰牌,杠牌摸牌,任何一家打牌)后,将对应的牌值赋值给要牌,要牌为玩家需要处理牌的标志(当非负时),当玩家处理完牌后,将牌整理后,将要牌置-1

  }

  当要牌置位(非负)时,要对手牌进行胡牌判断:

  由于手牌已经除掉了大量的碰杠吃等情况,简化的胡牌算法:

  先对pai数组加上要牌一起排序;

  然后用递归算法判断是否胡牌;

  最后判断是否为7对,十三么,全不靠牌型:(注,这些牌型一般不容易胡,故番数也不小哦,^_^)

  if(num==13)

  {

  if(pai[0]==pai[1]&pai[2]==pai[3]&pai[4]==pai[5]&pai[6]==pai[7]&pai[8]==pai[9]&pai[10]==pai[11]&pai[12]==pai[13])

  return 1;//七对

  dblpos=-1; //记录数组中对牌的位置;-1为没有对牌

  dblnum=0;//对的个数(如果超过两个对(可能是一个刻子)则不能胡十三么,全不靠牌型)

  for(i=0;i<14;i }

  {

  if(pai[i]==pai[i 1])

  {

  dblpos=i;

  dblnum ;

  }

  if(dblnum>1) break;

  }

  if(dblnum==1) //可能为十三么

  {

  tirteen=1;

  for(i=0;i<14;i )

  {

  if(pai[i]>0&[pai]<8)

  {

  tirteen=0;

  break;

  }

  else if(pai[i]>9&[pai]<17)

  {

  tirteen=0;

  break;

  }

  else if(pai[i]>18&[pai]<26)

  {

  tirteen=0;

  break;

  }//如果任何一张牌为非么九和非字牌,则不能胡十三么,

  if(tirteen) return 1;//如果全部是么九和字牌,加上进入该段程序的牌只有一个对,则十三么胡牌

  }

  }

  else//可能为全不靠

  {

  nowordpos=14;//记录下最后一个不是字牌的位置

  for (i=13;i>=0;i--)

  {

  if(pai[i]<=26)

  {

  nowordpos=i;

  break;

  }

  }

  if(nowordpos<=8)//如果非字牌有9个以上,肯定不能胡全不靠

  {

  istirteen=1;

  for(i=0;i<=nowordpos;i )

  {

  if(pai[i 1]-pai[i]<3&&pai[i 1]/9==pai[i]/9)//如果存在同一花色里两张可以吃别人的牌,则不能胡全不靠

  {

  istirteen=0;

  break;

  }

  }

  if(istirteen)

  {

  for(i=0;i<=nowordpos-1;i )

  {

  for(j=i 1;j<=nowordpos;j )

  if(pai[i]==pai[j] mod 9)

  {

  istirteen=0;

  break;

  }

  if(istirteen==0) break;

  }

  }

  if(istirteen) return 1;

  }

  }

  }

发 表 评 论 相 关 信 息
姓名: 邮箱:
内容:
全部评论
共创国际项目管理顾问旗下网站:中国研发管理网 | 项目管理者联盟 | 中国工程管理网
Copyright © 2005-2014 ChinaRDM.COM 研发管理网 All rights reserved. 京ICP证060517号