| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7269 人关注过本帖
标题:用C语言(控制台)写个斗地主程序(不需要人机对战)
只看楼主 加入收藏
hjsmxiao9
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-9-13
收藏
得分:0 
哈哈  陈根同学!  我真是一猜就知道了!.......................
2010-09-13 12:28
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
回复 30楼 cacker
我想您没看懂我在26楼给出的那段伪代码吧(尤其是那个for循环).虽然后来发现其中有一点点错误.那个循环就是用来识别 各种类型的牌的.
不过对于都地主有些规则我不知道,所以有很多地方还要改动.比如我不知道 四张还可以带2对等.
下面我对于那个循环做简单说明.
程序代码:
*card = *cards;//第一张牌
for ( sub=0,--cards; !table[ *++cards ] ;  )  //
    {
    if  (  card[sub] == *cards  )//这张牌和前面的那张一样,
        {
        ++len[sub];//只要在原来张数上再加1就好了
        continue;
        }  
    else{
        card[++sub] = *cards;//新的一种牌,所以下标sub要加1
        ++ count[sub];//新的一种牌的数量也要加1,最开始是0
      
        if  (  sub<2  ) ;//如果下标小于2,什么也不做
        else if (  (Len)  )//这里是主体部分已经确定了的情况
            {
            if  (  (len[Len-1]<=len[sub-1])  ||  (2*Len<=sub)  )  return 0;//附带部分的张数要比主体部分的小,对与(2*Len<=sub)这个判断要放到循环结束后去,我不知道4可带2对  
            }
        else if (  (len[sub-2] == len[sub-1])  )//这里还不能却定主体部分到了没,所以sub-1,sub-2肯定还是主体部分
            {
            if  (  table[card[sub-1]] - table[card[sub-2]] != 1  )  return 0;// 这里是主体部分还没完,那么主体部分每次要加1     
            }
        else{
            Len = sub-1;//确定主体部分
            }
  
        }//if card[sub]...else 
    }//for

/*/

 *       我给出的只是伪代码,只给出了实现的方案,所以这中间还会有很多小问题的.

 *       对于下面的switch语句中的case情况, 如case 1表示下面我所归纳的第一大类;case 2 ,第二大类,依次类推.

 *      还有,在这个循环后面,还要加如一些判断,有的情况是没能在那个循环中的情况中的.

 *      对于那些只有主体部分,没有附带部分.这些情况也是很容易判断的,只要一比较Len,sub,等的值结果就很显然了.
/*/




按照先主体部分后附带部分出牌那是很简单判断 牌是属于什么类型的。若您要可以打乱顺序出牌,那么就要先对它排序,变成先主体部分再附带部分
,然后在来判断。
下面我来对各种类型的牌进行分类(依据主体部分):
  一.单张组成的牌:首先我再for循环以前就单独考虑了单张的情况,所以单张组成的牌只有两类,顺子和对王。
  二.对子组成的牌: 有2类,单独的对子和连对(3对以上)。
  三.三张组成的牌: 有2类,单独的三张和连三张.
  四.四张组成的牌: 有3类,炸弹和四张带牌和连四张(这里也有些规则我也不情况)
(总共就这么几种情况,所有的牌的带牌规则我都是不怎么清楚的)

对牌分类我是采取这样的依据的:
 1.用Len来记录主体部分有多少种牌,如顺子6789AJQK的Len=8,连三张33344487的Len=2,连三张33344455589A的Len=3(其中A表示10)。
 2.数组Len是用来记录某种牌的张数, 用来判断主体部分和附带部分分界的依据。主体部分的张数是len[Len-1]。如果某种牌的张数突然变得比前面的牌的张数,那么这里开始是附带部
   分了(33344455589J从8开始是附带部分了)。如果附带部分的牌突然又比主体部分的张数还多(333444555897777这是错误的),那么这明显是错   误的出牌了。如果附带的牌的种类比
   主体部分的种类还多(333444555679JK也是错误的),那么   也是错误了。当然也不能带一对王,这里也要注意一   下。
 3.如果主体部分不只有1种牌,那么主体部分必须是连续的,故主体部分的大小是要依次加1的。


就只要这3点,很容易判断牌是哪种类型的了。只是有可能其中有些细节我没考虑到。


[ 本帖最后由 Windy0Winll 于 2010-9-13 17:55 编辑 ]
收到的鲜花
  • cacker2010-09-13 18:39 送鲜花  2朵   附言:非常详细,万分感谢···· 大概的思路我已 ...

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-13 17:47
gongyaping
Rank: 4
来 自:广东肇庆怀集
等 级:业余侠客
帖 子:174
专家分:257
注 册:2010-8-1
收藏
得分:0 
新手,学习中。
2010-09-14 07:40
成为高手的心
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-9-12
收藏
得分:0 
悲剧的事情,看了还是写不出来
2010-09-15 20:09
yangsifa
Rank: 2
等 级:论坛游民
帖 子:10
专家分:11
注 册:2010-9-15
收藏
得分:0 
路过,学习
2010-09-15 21:22
快速回复:用C语言(控制台)写个斗地主程序(不需要人机对战)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021721 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved