棋牌游戏大厅开户

您现在的位置: 网上现金棋牌游戏平台 >> 棋牌技巧 >> 棋牌开发 >> 正文

基于C语言的斗地主发牌程序的实现

分享到:
时间:2014-12-1  看看谷歌  瞅瞅搜狗  眯眯搜搜
内容简介:斗地主发牌程序是扑克牌发牌程序的一种,本程序由C语言编写,主要涉及一维二维数组、全局变量、随机数的生成、排序、函数的定义等基本知识。本文由网上现金棋牌游戏平台www.crjq8.com编辑整理,介绍各种网上真钱棋牌游戏技巧,澳门赌场赌博技巧,提供各种网上博彩游戏,网上真钱游戏,免费试玩。希望基于C语言的斗地主发牌程序的实现这篇文章能给你提供帮助。

棋牌游戏精简版下载 棋牌游戏完整版大厅下载

  摘 要:斗地主发牌程序是扑克牌发牌程序的一种,本程序由C语言编写,主要涉及一维二维数组、全局变量、随机数的生成、排序、函数的定义等基本知识。本程序由五个函数模块来实现功能,分别为洗牌、发牌、排序、打印四个子函数和主函数,分别使用到了随机数的生成、数组、选择排序、switch语句等知识。另外,程序还使用了全局变量来简化程序内容。
  关键词:子函数;随机变量;排序;数组
  中图分类号:TP311.1
  1 问题说明
  1.1 在编写斗地主发牌程序过程中,主要实现以下功能
  计算机能生成一副54张的牌,并且按照斗地主的规则,能随机打乱牌的顺序(洗牌),并且分牌给3名玩家(发牌),并分出3张牌作为底牌。每位玩家的手牌和底牌都应按照大小、花色排列好(排序)。最后,计算机能显示出每位玩家的手牌以及底牌(打印)。
  1.2 在编写斗地主发牌程序过程中,主要遇到的问题
  (1)如何实现牌的打乱;(2)如何将牌发给玩家,一次性还是一个一个的发等等;(3)如何将按既按照大小,又按照花色进行排序;(4)如何将花色进行打印。
  2 程序内容
  2.1 程序流程图
  图1
  2.2 算法描述
  本程序主要使用了两个算法:随机数的生成和选择排序法。
  2.2.1 随机数的生成
  随机数的生成主要使用了srand(time(0))和r=rand()%(54-i)+i两段代码,先从1-54中随机选择一个数与1交换,再从2-54中随机选择一个数与2交换……依次类推,从而达到了洗牌的目的。其复杂度为O(N),N=54。
  2.2.2 选择排序。选择排序主要用到的算法程序为:
  for(i=0;i  {
  for(j=i+1;j  {
  if(S[i]>S[j])
  {
  temp=S[i];
  S[i]=S[j];
  S[j]=temp;
  }
  }
  }
  既将数组中,每一位的数都与其后面的数进行比较,若比后面的大,则交换数的位置,直到最后,将这组数组按从小到大的顺序排序。在本程序中,也运用选择排序,将每位玩家的手牌和底牌都进行排序,不同的是进行了两次排序,分别对牌的大小和花色进行排序。其复杂度为2*O(N^2),N=54,空间复杂度为2*1。
  2.3 变量说明
  全局变量:程序中定义了多了全局变量,大大简化了程序的复杂程度和繁琐的定义以及函数实参的调用,具体有存放三玩家手牌的数组player[][],存放底牌的数组LastCard[],以及循环计数量i,j,k。
  2.4 函数说明
  2.4.1 void shuffle()——洗牌函数
  洗牌函数的思路是先定义数组poker[],用来存放54张扑克牌,然后运用随机数的生成,从1-54中随机抽取一个数,与1交换;从2-54中随机抽取一个数,与2交换……从i-54中抽取一个数,与i交换,再借助于循环语句,从而数组poker[]中的54个定义扑克牌的数随机打乱交换,达到了类似洗牌的目的,并且仍旧存放在poker[]中。
  2.4.2 void deal()——发牌函数
  发牌函数定义时使用了形参a[],在实际调用时,传递进去的是之前已经随机打乱的数组poker[]。此函数的目的是将扑克牌发给3位玩家,并留3张牌最为底牌。因为从概率上来讲,对于随机打乱的牌,一次发一张和一次发一沓是一样的,并且这次程序最终是显示玩家手牌,不显示发牌过程。所以,在发牌时,满足公平的情况下,侧重于编程的简单,不考虑实际规则,选择一次发一沓的发牌方式。运用循环语句以及player[j][i%17]=a[i]语句,将牌“发”给每位玩家,并取最后3张牌最为底牌。
  2.4.3 void sort()——排序函数
  排序函数主要运用循环语句,if语句以及选择排序算法对每位玩家以及底牌进行排序。由于之前对54张扑克牌进行定义,分别另花色红桃、方块、草花、黑桃为1、2、3、4;另A-k为1-13,从而每一张牌定义成一个3位数,大小王分别定义为613和513。在排序过程中,先不考虑百位,仅对十位和个位构成的数进行比较,既对牌的大小进行排序;若出现牌大小一样,则再为百位的数进行比较排序。
  2.4.4 void print()——打印函数
  打印函数主要是将排序好的数组player[][]和LastCard[]进行输出(既显示玩家的手牌以及底牌),主要运用了switch语句来实现,并用了ASCLL码表中的003、004、005、006来输出四种花色。
  3 程序执行结果
  第一次执行:
  图2
  第二次执行:
  图3
  第三次执行
  图4
  4 结束语
  由多次执行结果可以看出,本程序思路正确,结果准确,符合题目要求,可以作为斗地主发牌程序来执行。
  同时,在编写程序过程中,也发现了一些缺陷和有待改进的地方,如排序和打印函数相对比较繁琐,有待进一步的简化;另外,对于完美的斗地主发牌程序,发牌的方式也有待改进和提高。因为对指针和结构体的不熟悉,所以在编写程序时相对套路和方法比较麻烦。
来源:网上现金棋牌游戏平台
你可能感兴趣的:
聊聊斗地主
斗地主风波
斗地主没有地方也能玩
斗地主险胜实例
斗地主里什么样的牌才算好牌
谁是斗地主游戏中的高手
斗地主就是骗来骗去
斗地主想赢依靠什么
斗地主翻倍
闲着玩斗地主
陪领导斗地主
斗地主的博弈策略
斗地主中的学问
轻松愉快欢乐斗地主
斗地主与爱情
我们向您推荐的:
游戏中的情感新一代棋牌游戏设计原则
UI设计原则棋牌类网络游戏UI界面
博雅德州扑克UI设计棋牌游戏设计常用窗口风格
游戏角色概念设定游戏设计中如何构图
什么是游戏场景设计游戏场景的原则
麻将吃碰牌技巧麻将舍牌不丢张技巧
麻将留牌舍牌技巧麻将手牌排列技巧
血战到底麻将如何做牌技巧麻将如何做牌和听牌技巧
麻将实战技巧猜牌篇麻将赢牌技巧切勿过分迷恋手牌诀
麻将必赢技巧密切察视动牌与不动眼睫毛是麻将牌战中的“间谍”

说义乌麻将

德州扑克与7张梭哈

一位禅师的象棋必胜技

长沙市民教你如何健康

麻将爱情

象棋与围棋

史上最奢华的麻将牌具

如牌
赌博的利和弊揭秘千术道具
马洪刚千术揭秘教学赌博种类
赌博文化心理什么是赌博
策略会透露信息看穿对手的策略
赌博桌上老千局赌石看蟒

百变双扣秘技双扣实战技巧
双扣五点技巧双扣打单牌技巧
双扣中如何推测对方的牌打双扣要勇于担责
双扣要总结经验双扣高手技巧
打双扣的心理因素双扣战局把握能力
棋牌游戏下载 棋牌深海捕鱼

深海捕鱼

游戏视频

棋牌游戏

经验分享

棋牌游戏攻略

斗地主

2010-2013 © 网上现金棋牌游戏平台 版权所有
增值电信业务经营许可证:粤B2-20169873-8 文网文编号:粤网文[2016]789114-088号