个人编的一个发牌程序,出了点小问题,求高人指点
程序代码:// 扑克牌发牌游戏 -- 第一次上机作业
/* 整个程序由三部分组成
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.









