| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 558 人关注过本帖
标题:个人编的一个发牌程序,出了点小问题,求高人指点
只看楼主 加入收藏
koppp1234
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-7
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
个人编的一个发牌程序,出了点小问题,求高人指点
程序代码:
// 扑克牌发牌游戏 -- 第一次上机作业
/* 整个程序由三部分组成
   1.扑克牌初始化
   2.洗牌
   3.发牌
   4.玩家各自将手牌排序(按黑红紫坊从小到大的排序,2点最大)
   */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

typedef struct card{
    // 每张牌(Card)都用一个 strcut card 结构体类型来表示
    char *face;  // 指针 face 指向不同纸牌的点数
    char *suit;  // 指针 suit 指向不同纸牌的花色
} CARD;
CARD deck[52], player[4][13]; 
     char *face[] = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A", "2"};
     char *suit[] = {"\006", "\003", "\005", "\004"};

void initDeck (CARD * , char *[] , char *[]);
void shuffle (CARD *);
void deal (CARD * , CARD (*)[]);
void sort (CARD (*)[]);
int  value (char *);

int main(){
    srand(time(NULL)); 
    initDeck (deck, face, suit);  // 填新牌
    shuffle (deck);  // 洗牌
    deal (deck,player); // 发牌
    sort (player);  // 对玩家的手牌进行排序
    return 0;
}

void initDeck (CARD *wDeck, char *wface[], char *wsuit[]){
    /* wDeck 结构体指针,指向待初始化桌牌 deck[52]
       wface 字符数组指针,指向点数
       wsuit 字符数组指针,指向花色
       该函数用于初始化桌牌 deck[52]
       */
    int i;

    for (i = 0; i <= 51; i++){
        wDeck[i].face = wface[i%13];  // 点数初始化
        wDeck[i].suit = wsuit[i/13];  // 花色初始化
    }
}

void shuffle (CARD *wDeck){
    // 用产生的随机数 j 依次与前面的牌交换
    int i, j;
    CARD temp;

    for (i = 0; i <= 51; i++){
        // 洗牌
        j = rand()%52;  // 产生0到51之间的随机数
        temp = wDeck[i];  // 交换纸牌
        wDeck[i] = wDeck[j];
        wDeck[j] = temp;
    }
}

void deal (CARD *wDeck , CARD (*wplayer)[13]) {
    int i, j;  // i为玩家编号,j为手牌编号 

    for (i = 0;i < 4; i++){

        for (j = 0;j < 13; j++){
        // 洗牌第i个玩家的第j张牌是手牌中的第4*j+i张(轮流发牌)
        wplayer[i][j] = wDeck[4*j+i];
        }
    }
}

void sort (CARD (*wplayer)[13]){
    // 运用插入排序法分别对四个玩家的手牌排序
    int i, j, p, q;  // i为玩家编号,j为手牌编号,p, q 为工作指针
    CARD temp;

    for (i = 0;i < 4; i++){
        // 外层循环,对四个玩家遍历
        for (j = 1;j < 13; j++){
            // 内层循环,开始排序
            // 先比较face 再比较suit
            temp = wplayer[i][j];  // 待插入的牌
            for (p = j-1; p >= 0; p--){
                // 从后往前找出第一个小于temp的牌的序号
                if (value(wplayer[i][p].face)*value(wplayer[i][p].suit) < value(temp.face)*value(temp.suit))  // 找到比temp小的牌
                   break;
            }
            for (q = j-1; q > p; q--){  // 插入操作
                wplayer[i][q+1] = wplayer[i][q];
            }
            wplayer[i][q+1] = temp;
        }
    }

int value(char *str){
    // 字符转化为整数
    int i = 0;
   
    while(i < 4 && *str - *suit[i++]) ;
    if (i > 4) {// 判断是否为花色字符
    i = 0;
    while(i < 13 && *str - *face[i++]) ;
    }
    return i;
}
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
D:\#program#\C语言\Cpp1.cpp(33) : error C2664: 'deal' : cannot convert parameter 2 from 'struct card [4][13]' to 'struct card (*)[]'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
D:\#program#\C语言\Cpp1.cpp(34) : error C2664: 'sort' : cannot convert parameter 1 from 'struct card [4][13]' to 'struct card (*)[]'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
D:\#program#\C语言\Cpp1.cpp(101) : error C2601: 'value' : local function definitions are illegal
D:\#program#\C语言\Cpp1.cpp(112) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
搜索更多相关主题的帖子: 高人 发牌 
2010-09-09 18:05
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
(*)[] 去掉()
2010-09-09 18:32
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:5 
D:\#program#\C语言\Cpp1.cpp(112) : fatal error C1004: unexpected end of file found
Error executing cl.exe
这个好像是软件有问题重新装下 试试
还有int value(char *str)这里的参数是2维数组第二维要写出来例如*str[p]
D:\#program#\C语言\Cpp1.cpp(33) : error C2664: 'deal' : cannot convert parameter 2 from 'struct card [4][13]' to 'struct card (*)[]'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
D:\#program#\C语言\Cpp1.cpp(34) : error C2664: 'sort' : cannot convert parameter 1 from 'struct card [4][13]' to 'struct card (*)[]'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
这里能具体指下是那个位置的? 做个标志

清风拂暮(木)
2010-09-09 18:49
快速回复:个人编的一个发牌程序,出了点小问题,求高人指点
数据加载中...
 
   



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

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