A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这个游戏是我在学习c的时候自己无聊编写的,为了熟悉代码
不过涉及到模块化思想, 就是用一个打印函数, 一个流程控制函数,以及各种金币结算函数,命运卡等
所有模块都已经调试好,大家可以在这个结构上优化函数并且添加新的功能
大概有700行代码左右,大家可以分开看
made by Answer.Zhao
下面附上源代码,有不懂的欢迎留言咨询/Users/macbookair/Desktop/Answer.Zhao_Box/小游戏/大富翁内测版/大富翁内测版/main.c

点评

在哪给黑马币呢?  发表于 2015-8-10 22:51

评分

参与人数 7黑马币 +46 收起 理由
卖毛玉的小贩 + 10 赞一个!
lychae + 6
HuKare + 10
venn + 5 很给力!
Northcity + 5 很给力!
382780396 + 5 很给力!
花漾 + 5 膝盖给你

查看全部评分

17 个回复

倒序浏览
haohaoyan 来自手机 中级黑马 2015-8-10 22:13:12
沙发
相当威武  不过我的技术分刚够  送你一个黑马币  
回复 使用道具 举报
haohaoyan 发表于 2015-8-10 22:13
相当威武  不过我的技术分刚够  送你一个黑马币

目测是帅哥
回复 使用道具 举报
碉堡了,游戏很好玩
回复 使用道具 举报
在哪下载
回复 使用道具 举报
因为附件不管用,现在分行发代码,大家自己粘贴吧不好意思
1-200
//
//  main.c
//  大富翁内测版
//
//  Created by Answer.Zhao on 15/7/24.
//  Copyright (c) 2015年 Answer.Zhao. All rights reserved.
//

/*
******************
*                *
*  ************  *
*  *oooooooooo*  *
*  *oooooooooo*  *
*  *oooooooooo*  *
*  *oooooooooo*  *
*  ************  *
*                *
******************

*/

#include <stdio.h>
#include <stdlib.h>
#define M 11
#define N 18

char map[M][N]={
    {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
    {'*','>',' ',' ',' ',' ','E',' ',' ',' ','O',' ',' ',' ',' ',' ','M','*'},
    {'*',' ',' ','*','*','*','*','*','*','*','*','*','*','*','*',' ',' ','*'},
    {'*',' ',' ','*','o','o','o','o','o','o','o','o','o','o','*',' ',' ','*'},
    {'*',' ',' ','*','o','o','o','o','o','o','o','o','o','o','*',' ',' ','*'},
    {'*',' ',' ','*','o','o','o','o','o','o','o','o','o','o','*',' ','H','*'},
    {'*',' ',' ','*','o','o','o','o','o','o','o','o','o','o','*',' ',' ','*'},
    {'*',' ',' ','*','o','o','o','o','o','o','o','o','o','o','*',' ',' ','*'},
    {'*','S',' ','*','*','*','*','*','*','*','*','*','*','*','*',' ',' ','*'},
    {'*',' ',' ',' ','X',' ',' ','C',' ',' ',' ',' ',' ',' ','T',' ',' ','*'},
    {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}
};

char fate[3][50]={
    "对方原地休息一回合\n",
    "经济危机,您的钱才丢失800\n",
    "恭喜您中彩票大奖!!奖金1000元!!\n"
};
int player_1_Setep=0;
int player_2_Setep=0;
int p1_x=1,p1_y=1;
int p2_x=1,p2_y=1;
int player_1_Gold=10000;
int player_2_Gold=10000;
int e_Gold_Get=500;


char tem=' ';
char road='*';
char player1='A';
char player2='B';

int flag_Player1=1;
int flag_Player2=0;

int flag_Shop_E=1;
int flag_Shop_E_p1=0;
int flag_Shop_E_p2=0;
int flag_Shop_O=1;
int flag_Shop_O_p1=0;
int flag_Shop_O_p2=0;
int flag_Shop_H=1;
int flag_Shop_H_p1=0;
int flag_Shop_H_p2=0;
int flag_Shop_T=1;
int flag_Shop_T_p1=0;
int flag_Shop_T_p2=0;
int flag_Shop_B=1;
int flag_Shop_B_p1=0;
int flag_Shop_B_p2=0;
int flag_Shop_C=1;
int flag_Shop_C_p1=0;
int flag_Shop_C_p2=0;
int flag_Shop_S=1;
int flag_Shop_S_p1=0;
int flag_Shop_S_p2=0;


int start=1;


void show_Time(){
   
    printf("                             _ooOoo_                    \n");
    printf("                            o8888888o                   \n");
    printf("                            88  ®  88                   \n");
    printf("                            (| -_- |)                   \n");
    printf("                             O\ = /O                    \n");
    printf("                         ____/`---'\____                \n");
    printf("                       .   ' \\| |// `.                 \n");
    printf("                        / \\||| : |||// \               \n");
    printf("                      / _||||| -:- |||||- \             \n");
    printf("                       | | \\\ - /// | |  |             \n");
    printf("                    | \_| ''\---/'' | |   /             \n");
    printf("                      \ .-\__ `-` ___/-.  /             \n");
    printf("                  ___`. .' /--.--\ `. . __              \n");
    printf("                ."" '< `.___\_<|>_/___.' >'"".          \n");
    printf("               | | : `- \`.;`\ _ /`;.`/ - ` : | |       \n");
    printf("                 \ \ `-. \_ __\ /__ _/ .-` / /          \n");
    printf("        ======`-.____`-.___\_____/___.-`____.-'======   \n");
    printf("                            `=---='                     \n");
   
    printf("         .............................................  \n");
    printf("                  佛祖镇楼                  BUG辟易                 \n");
    printf("                      made  by  Answer.Zhao® \n");
   
}

void rules_Show(){
    char rules[12][150]={
        "\n",
        " 欢迎您参与大富翁游戏,每个玩家的初始金币为1W\n",
        " 在游戏中您可以购买土地,不同土地有不同的效果,具体效果如下:\n",
        " E:中国电力 $1000  特效:外人经过该土地需支付过路费$500,同时每回合给你提供$500\n",
        " O:小米科技 $1600  特效:外人经过该土地需支付过路费$600,同时每回合给你提供$600\n",
        " M:命运城堡        特效:经过此地将会得到一张随机的命运卡,祝你好运\n",
        " H:恒大地产 $3000  特效:外人经过该土地将会支付200*X(X为1~10)元\n",
        " T:泰达控股 $3500  特效:每回合为你分红150*X(X为1~10)元\n",
        " C:中国船厂 $2000  特效:外人经过该土地将会支付1000元\n",
        " X:中国银行 $2500  特效:每回合给你提供150*X(X为1~10)元\n",
        " S:百货大楼 $4000  特效:外人经过该土地将会支付给你150*X(X为1~10)元\n",
        "\n"
    };
    for(int i=0;i<12;i++){
        printf("%s",rules[i]);
    }
}
void gold_Result(int x,int y,int player){
   
    if(x==1&&y==1&player==1){
        int rand_T=-1;
        int rand_B=-1;
        rand_T=arc4random_uniform(10)+1;
        rand_B=arc4random_uniform(10)+1;
        player_1_Gold=player_1_Gold+500+e_Gold_Get*flag_Shop_E_p1+150*flag_Shop_T_p1*rand_T+150*flag_Shop_B_p1*rand_B;
      
        
    }else if (x==1&&y==1&player==2){
        int rand_T=-1;
        int rand_B=-1;
        rand_T=arc4random_uniform(10)+1;
        rand_B=arc4random_uniform(10)+1;
        player_2_Gold=player_2_Gold+500+e_Gold_Get*flag_Shop_E_p2+150*flag_Shop_T_p2*rand_T+150*flag_Shop_B_p2*rand_B;
      
    }
   
        
}
void gold_Shop(int x,int y,int player){
    if(x==1&&y==6&&player==1&&flag_Shop_E_p2==1){
        player_1_Gold=player_1_Gold-500;
        player_2_Gold=player_2_Gold+500;
        
    }else if (x==1&&y==6&&player==2&&flag_Shop_E_p1==1){
        player_1_Gold=player_1_Gold+500;
        player_2_Gold=player_2_Gold-500;
    }
    if(x==1&&y==10&&player==1&&flag_Shop_O_p2==1){
        player_1_Gold=player_1_Gold-600;
        player_2_Gold=player_2_Gold+600;
    }else if (x==1&&y==10&&player==2&&flag_Shop_O_p1==1){
        player_1_Gold=player_1_Gold+600;
        player_2_Gold=player_2_Gold-600;
    }
    if(x==5&&y==16&&player==1&&flag_Shop_H_p2==1){
        int rand =-1;
        rand=arc4random_uniform(10)+1;
        player_1_Gold=player_1_Gold-200*rand;
        printf("玩家一在酒店住的天数为%d\n",rand);
    }else if (x==5&&y==16&&player==2&&flag_Shop_H_p1==1){
        int rand =-1;
        rand=arc4random_uniform(10)+1;
        player_2_Gold=player_2_Gold-200*rand;
        printf("玩家二在酒店住的天数为%d\n",rand);
    }
    if(x==9&&y==7&&player==1&&flag_Shop_O_p2==1){
        player_1_Gold=player_1_Gold-1000;
        
    }else if (x==1&&y==10&&player==2&&flag_Shop_O_p1==1){
                player_2_Gold=player_2_Gold-1000;
    }
    if(x==8&&y==1&&player==1&&flag_Shop_H_p2==1){
        int rand =-1;
        rand=arc4random_uniform(10)+1;
        player_1_Gold=player_1_Gold-150*rand;
        printf("玩家一在超市消费的倍数为%d\n",rand);
    }else if (x==8&&y==1&&player==2&&flag_Shop_H_p1==1){
        int rand =-1;
        rand=arc4random_uniform(10)+1;
        player_2_Gold=player_2_Gold-150*rand;
        printf("玩家二在超市消费的倍数为%d\n",rand);
    }
回复 使用道具 举报
201-400
}
void print_Map(char map[M][N]){
    for(int i=0;i<M;i++){
        for(int j=0;j<N;j++){
            printf("%c",map[i][j]);
        }
        printf("\n");
    }
   
    printf("玩家一的金币为:%d\t玩家二的金币为:%d\t",player_1_Gold,player_2_Gold);
}
void setep_Get(){
    printf("请输入1来开始\n");
    int flag=-1;
    scanf("%d",&flag);
    if (flag_Player1==1&&flag==1){
        player_1_Setep=arc4random_uniform(6)+1;
        printf("plear1_setep = %d\n",player_1_Setep);
    }else if(flag!=1){
        printf("您输入的有误,请重新输入:按 1 开始!");
        scanf("%d",&flag);
        if (flag==1){
            player_1_Setep=arc4random_uniform(6)+1;
            printf("plear1_setep = %d\n",player_1_Setep);
        }
    }
    if (flag_Player2==1&&flag==1){
        player_2_Setep=arc4random_uniform(6)+1;
        printf("plear2_setep = %d\n",player_2_Setep);
    }else if(flag!=1){
        printf("您输入的有误,请重新输入:按 1 开始!");
        scanf("%d",&flag);
        if (flag==1){
            player_2_Setep=arc4random_uniform(6)+1;
            printf("plear1_setep = %d\n",player_2_Setep);
        }
    }

}
void game_Control_Player1(int setep,char map[M][N]){
   
    int o=-1,k=-1;
    o=p1_x;
    k=p1_y;
    if (o==1){
        for(int i=0;i<setep;i++){
            map[p1_x][p1_y]=tem;
            
            if(map[p1_x][p1_y+1]!=road){
                map[p1_x][++p1_y]=player1;
            }else map[++p1_x][p1_y]=player1;
        }
        
    }
    if(k==16&&o!=1){
        for(int i=0;i<setep;i++){
            map[p1_x][p1_y]=tem;
            
            if(map[p1_x+1][p1_y]!=road){
                map[++p1_x][p1_y]=player1;
            }else map[p1_x][--p1_y]=player1;
        }
        
    }
    if(o==9&&k!=16){
        for(int i=0;i<setep;i++){
            map[p1_x][p1_y]=tem;
            
            if(map[p1_x][p1_y-1]!=road){
                map[p1_x][--p1_y]=player1;
            }else map[--p1_x][p1_y]=player1;
        }
        
    }
    if(k==1&&o!=9&&o!=1){
        for(int i=0;i<setep;i++){
            map[p1_x][p1_y]=tem;
            
            if(map[p1_x-1][p1_y]!=road){
                map[--p1_x][p1_y]=player1;
            }else map[p1_x][++p1_y]=player1;
            gold_Result(p1_x, p1_y, 1);
        }
        
    }



}
void game_Control_Player2(int setep,char map[M][N]){
    int o=-1,k=-1;
    o=p2_x;
    k=p2_y;
    if (o==1){
        for(int i=0;i<setep;i++){
            map[p2_x][p2_y]=tem;
            
            if(map[p2_x][p2_y+1]!=road){
                map[p2_x][++p2_y]=player2;
            }else map[++p2_x][p2_y]=player2;
        }
        
    }
    if(k==16&&o!=1){
        for(int i=0;i<setep;i++){
            map[p2_x][p2_y]=tem;
            
            if(map[p2_x+1][p2_y]!=road){
                map[++p2_x][p2_y]=player2;
            }else map[p2_x][--p2_y]=player2;
        }
        
    }
    if(o==9&&k!=16){
        for(int i=0;i<setep;i++){
            map[p2_x][p2_y]=tem;
            
            if(map[p2_x][p2_y-1]!=road){
                map[p2_x][--p2_y]=player2;
            }else map[--p2_x][p2_y]=player2;
        }
        
    }
    if(k==1&&o!=9&&o!=1){
        for(int i=0;i<setep;i++){
            map[p2_x][p2_y]=tem;
            
            if(map[p2_x-1][p2_y]!=road){
                map[--p2_x][p2_y]=player2;
            }else map[p2_x][++p2_y]=player2;
            gold_Result(p2_x, p2_y, 2);
        }
      
    }
}
void game_Shop_Buy(int x,int y,int player){
    int buy=-1;
    if(x==1&&y==6&&flag_Shop_E==1){
        print_Map(map);
        printf("\n您是否需要支付1000元购买中国电力,外人经过该土地将会支付500元,并且每圈会给你产出500金币\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=1000;
            map[2][6]=player1;
            flag_Shop_E_p1=1;
            flag_Shop_E=0;
            printf("\n\n购买成功,感谢您支持中国电力事业\n");
        
    }   else if(buy==1&&player==2){
            player_2_Gold-=1000;
            map[2][6]=player2;
            flag_Shop_E_p2=1;
            flag_Shop_E=0;
        printf("\n购买成功,感谢您支持中国电力事业\n");
    }else if(buy==0){
            print_Map(map);
        printf("\n您已经放弃购买,请您支持中国电力事业\n");
    }
        
    }else if(x==1&&y==10&&flag_Shop_O==1){
        print_Map(map);
        printf("\n您是否需要支付1600元购买小米科技,外人经过该土地将会支付600元,并且每圈会给你产出600金币\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=1600;
            map[2][10]=player1;
            flag_Shop_O_p1=1;
            flag_Shop_O=0;
            printf("\n购买成功,感谢您支持中国手机事业\n");
            
        }   else if(buy==1&&player==2){
            player_2_Gold-=1600;
            map[2][10]=player2;
            flag_Shop_O_p2=1;
            flag_Shop_O=0;
            printf("\n购买成功,感谢您支持中国手机事业\n");
        }else if(buy==0){
            print_Map(map);
            printf("\n您已经放弃购买,请您支持中国手机事业\n");
        }
        
    }else if(x==5&&y==16&&flag_Shop_H==1){
        print_Map(map);
        printf("\n您是否需要支付3000元购买恒大宾馆,外人经过该土地将会支付200*X(X为1~10)元\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=3000;
            map[5][14]=player1;
            flag_Shop_H_p1=1;
            flag_Shop_H=0;
            printf("\n购买成功,感谢您支持中国地产事业\n");
            
        }   else if(buy==1&&player==2){
            player_2_Gold-=3000;
            map[5][14]=player2;
            flag_Shop_H_p2=1;
            flag_Shop_H=0;
            printf("\n购买成功,感谢您支持中国地产事业\n");
        }else if(buy==0){
            print_Map(map);
回复 使用道具 举报
太厉害了, 没注释完全不懂
回复 使用道具 举报
401-618
         printf("\n您已经放弃购买,请您支持中国地产事业\n");
        }
        
    }else if(x==9&&y==14&&flag_Shop_T==1){
        print_Map(map);
        printf("\n您是否需要支付3500元购买泰达控股,每回合为你分红150*X(X为1~10)元\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=3500;
            map[8][14]=player1;
            flag_Shop_T_p1=1;
            flag_Shop_T=0;
            printf("\n购买成功,感谢您支持中国经济产业\n");
            
        }   else if(buy==1&&player==2){
            player_2_Gold-=3500;
            map[8][14]=player2;
            flag_Shop_T_p2=1;
            flag_Shop_T=0;
            printf("\n购买成功,感谢您支持中国经济产业\n");
        }else if(buy==0){
            print_Map(map);
            printf("\n您已经放弃购买,请您支持中国经济产业\n");
        }
        
    }else if(x==9&&y==7&&flag_Shop_C==1){
        print_Map(map);
        printf("\n您是否需要支付2000元购买中国船厂,外人经过该土地将会支付1000元\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=2000;
            map[8][7]=player1;
            flag_Shop_C_p1=1;
            flag_Shop_C=0;
            printf("\n购买成功,感谢您支持中国航海事业\n");
            
        }   else if(buy==1&&player==2){
            player_2_Gold-=2000;
            map[8][7]=player2;
            flag_Shop_C_p2=1;
            flag_Shop_C=0;
            printf("\n购买成功,感谢您支持中国航海事业\n");
        }else if(buy==0){
            print_Map(map);
            printf("\n您已经放弃购买,请您支持中国航海事业\n");
        }
        
    }else if(x==9&&y==4&&flag_Shop_B==1){
        print_Map(map);
        printf("\n您是否需要支付2500元购买中国银行,每回合给你提供150*X(X为1~10)元\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=2500;
            map[8][4]=player1;
            flag_Shop_B_p1=1;
            flag_Shop_B=0;
            printf("\n购买成功,感谢您支持中国银行事业\n");
            
        }   else if(buy==1&&player==2){
            player_2_Gold-=2500;
            map[8][4]=player2;
            flag_Shop_B_p2=1;
            flag_Shop_B=0;
            printf("\n购买成功,感谢您支持中国银行事业\n");
        }else if(buy==0){
            print_Map(map);
            printf("\n您已经放弃购买,请您支持中国银行事业\n");
        }
        
    }else if(x==8&&y==1&&flag_Shop_S==1){
        print_Map(map);
        printf("\n您是否需要支付4000元购买百货大楼,外人经过该土地将会支付给你150*X(X为1~10)元\n如需购买请按1,否请按0\n");
        scanf("%d",&buy);
        if(buy==1&&player==1){
            player_1_Gold-=4000;
            map[8][3]=player1;
            flag_Shop_S_p1=1;
            flag_Shop_S=0;
            printf("\n购买成功,感谢您支持中国超市事业\n");
            
        }   else if(buy==1&&player==2){
            player_2_Gold-=4000;
            map[8][3]=player2;
            flag_Shop_S_p2=1;
            flag_Shop_S=0;
            printf("\n购买成功,感谢您支持中国超市事业\n");
        }else if(buy==0){
            print_Map(map);
            printf("\n您已经放弃购买,请您支持中国超市事业\n");
        }
        
    }

   
   
}
void map_Refresh(int x1,int x2,int y1,int y2){
    if(x1==x2&&y1==y2)map[x1][y1]='@';
    if((map[1][1]!='A') &&( map[1][1]!='B')) {
        
        map[1][1]='>';
    }
    if((map[1][6]!='A') &&( map[1][6]!='B')) {
        
        map[1][6]='E';
    }
    if((map[1][16]!='A') &&( map[1][16]!='B')) {
        
        map[1][16]='M';
    }
    if((map[1][10]!='A') &&( map[1][10]!='B')) {
        
        map[1][10]='O';
    }
    if((map[5][16]!='A') &&( map[5][16]!='B')) {
        
        map[5][16]='H';
    }
    if((map[9][14]!='A') &&( map[9][14]!='B')) {
        
        map[9][14]='T';
    }
    if((map[9][7]!='A') &&( map[9][7]!='B')) {
        
        map[9][7]='C';
    }
    if((map[9][4]!='A') &&( map[9][4]!='B')) {
        
        map[9][4]='X';
    }
    if((map[8][1]!='A') &&( map[8][1]!='B')) {
        
        map[8][1]='S';
    }
}

void game_Fate_Result(int rand,int player){
    if(rand==0&&player==1){
        flag_Player1=1;
        flag_Player2=0;
    }else if (rand==1&&player==1){
        player_1_Gold-=800;
    }else if (rand==2&&player==1){
        player_1_Gold+=1000;
    }
    if (rand==0&&player==2){
        flag_Player1=0;
        flag_Player2=1;
    }else if (rand==1&&player==2){
        player_2_Gold-=800;
    }else if (rand==2&&player==2){
        player_2_Gold+=1000;
    }
}
void game_Fate(int x,int y,int player){
    int rand=-1;
    if (x==1&&y==16&&player==1){
        printf("\n欢迎来到命运城堡,在此你将会抽到命运卡片,祝你好运,上帝与你同在\n");
        rand=arc4random_uniform(3);
        printf("%s",fate[rand]);
        game_Fate_Result(rand, 1);
    }else if (x==1&&y==16&&player==2){
        printf("\n欢迎来到命运城堡,在此你将会抽到命运卡片,祝你好运,上帝与你同在\n");
        rand=arc4random_uniform(3);
        printf("%s",fate[rand]);
        game_Fate_Result(rand, 2);
    }

   
   
}


int main(int argc, const char * argv[]){
    show_Time();
    rules_Show();
    print_Map(map);
    printf("player1 first");
    while(1){
    while(flag_Player1){
   
    setep_Get();
    flag_Player1=0;
    flag_Player2=1;
    game_Control_Player1(player_1_Setep, map);
    map_Refresh(p1_x,p2_x,p1_y,p2_y);
    gold_Shop(p1_x,p1_y,1);
    game_Shop_Buy(p1_x, p1_y, 1);
    game_Fate(p1_x, p1_y, 1);

    map[p2_x][p2_y]=player2;
    print_Map(map);
   
    printf("按1开始");
   
}
    while(flag_Player2){
   
    setep_Get();
    flag_Player1=1;
    flag_Player2=0;
    game_Control_Player2(player_2_Setep, map);
    map_Refresh(p1_x,p2_x,p1_y,p2_y);
    gold_Shop(p2_x,p2_y,2);
    game_Shop_Buy(p2_x, p2_y, 2);
    game_Fate(p2_x, p2_y, 2);

    map[p1_x][p1_y]=player1;
    print_Map(map);
   
        printf("按1开始");
    }
        
    }
    return 0;
   
}
回复 使用道具 举报
Mal 中级黑马 2015-8-10 22:48:25
10#
翔哥个好厉害
回复 使用道具 举报

插件出问题了你在后面直接粘吧,框架已经搭好了
回复 使用道具 举报
打赏的功能找不到 赞一个
回复 使用道具 举报
_town 中级黑马 2015-8-11 22:02:21
13#
写的不错昂
回复 使用道具 举报
酷酷酷,棒棒的
回复 使用道具 举报
太牛了吧,一学就能写游戏。。。
回复 使用道具 举报
这个有点666666,厉害了
回复 使用道具 举报
真的好棒,向楼主学习!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马