毕业,课程,设计,数据结构,算法,斗地主,洗牌毕业,课程,设计,数据结构,算法,斗地主,洗牌
这是从斗地主源程序选取的五个功能模块,分别为洗牌模块,对玩家的初始化,游戏初始化,
补全手牌信息模块,获取缓冲区牌类型模块。
一、我的程序实现了哪些功能:
(1)洗牌功能
static deck* deck_init(){
int i,j;
srand(time(0));
deck *p_deck=(deck*)malloc(sizeof(deck));
if(!p_deck){
printf("分配内存失败\n");
return NULL;
}
for(i=1;i<=54;i++){
p_deck->arr[i]=rand()%54;
for(j=1;j
if(p_deck->arr[i]==p_deck->arr[j]){
i--;
break;
}
}
}
p_deck->top=54;
return p_deck;
}
(2)初始化玩家(洗牌,id,身份 手牌,总数)功能
static void player_init(){
int i,j;
for(j=0;j<3;j++){
for(i=1;i<=20;i++){
player[j].handcard[i].number=100;
player[j].handcard[i].level =0;
}
}
deck *p=deck_init();
if(!p){
printf("没有牌堆\n");
return ;
}
int which=0;
which=rand()%3;
game.who=which;
for(i=0;i<3;i++){
player[i].id=i;
if(i==which){//地主
player[i].status=1;
for(j=1;j<=20;j++){
player[i].handcard[j].number=p->arr[(p->top)--];
}
player[i].size=20;
}
else{//农民
player[i].status=0;
for(j=1;j<=17;j++){
player[i].handcard[j].number=p->arr[(p->top)--];
}
player[i].size=17;
}
}
free(p);
p=NULL;
}
(3)手牌信息补完功能
static void handcard_init(){
int i,j;
for(i=0;i<3;i++){
for(j=1;j<=20;j++){
int number=player[i].handcard[j].number;
int *p_level=&(player[i].handcard[j].level);
char **pp_flower=&(player[i].handcard[j].flower);
char *p_point=&(player[i].handcard[j].point);
if(number>=0&&number<=51){
*p_level=number/4+1;
*p_point=point[number/4+1];
*pp_flower=farr[number%4];
}
else if(number==52){
*p_level=14;
*p_point='w';
*pp_flower="小王";
}
else if(number==53){
*p_level=15;
*p_point='W';
*pp_flower="大王";
}
else {
*p_level=0;
*p_point=' ';
*pp_flower=" ";
}
}
}
}
(4)打印当前玩家手牌功能
void print(){
int i,j;
for(i=0;i<3;i++){
if (