C语言香港跑马

#include <stdio.h>
#include <time.h>
#include <windows.h>

//定义宏
#define HORSENUM    6//赛马数量
#define DISTANCE    70//赛马跑道的长度
#define MAXSTEP        5//赛马跑动一次的最长距离
#define ACCOUNT        100000//我的账户
#define MINPAY        3000//最低下注额

char horse[] = {'%', '&', '#', '@', '$', '!'};
//获取下注额
int get_deposit()
{
    int deposit;
    printf("请下注(最低下注额为%d元):", MINPAY);
    while(!scanf("%d", &deposit) || deposit < MINPAY)
    {
        printf("错误,请重新下注(最低下注额为%d元):", MINPAY);
        fflush(stdin);
    }
    return deposit;
}
//选择赛马的编号
int get_number()
{
    int num;
    printf("请选择赛马的编号(1~%d):", HORSENUM);
    while(!scanf("%d", &num) || num < 1 || num > HORSENUM)
    {
        printf("错误,请重新选择赛马的编号(1~%d):", HORSENUM);
        fflush(stdin);
    }
    return num;
}
//赛马开始比赛
void run(int rank[])
{
    int i, j;
    int index = 1;//赛马的名次
    int dis[HORSENUM] = {0};//记录所有赛马已经跑出的距离
    memset(rank, 0, sizeof(int) * HORSENUM);//把rank数组中的元素全部赋值为0
    while(index <= HORSENUM)
    {
        system("cls");
        printf("--------欢迎来到香港赌马场-----------\n");
        for(i = 0; i < HORSENUM; ++i)
        {
            dis[i] += rand() % MAXSTEP;
            if(dis[i] >= DISTANCE)
            {
                dis[i] = DISTANCE;
                if(!rank[i])
                    rank[i] = index++;
            }
            printf("NO.%d:", i + 1);
            for(j = 0; j < dis[i]; ++j)
                printf(".");
            if(rank[i])
                printf("%d\n", rank[i]);
            else
                printf("%c\n", horse[i]);
        }
        Sleep(200);
    }    
}

int main()
{
    int deposit; //下注额
    int account = ACCOUNT;//我的账户
    int rank[HORSENUM];//存储赛马的名次
    int num;//获取赛马的编号
    int bonus;//奖金
    char answer;
    
    srand((unsigned)time(0));//初始化随机种子
    printf("你现在的账户余额为%d元!\n", account);
    while(1)
    {
        if(account < MINPAY)
        {
            printf("你的钱已经不够下注了,请离开!\n");
            break;
        }
        //获取下注额
        while((deposit = get_deposit()) > account)
        {
            printf("你的账户没有这么多钱了!\n");
        }
        num = get_number() - 1;//获取赛马的编号
        run(rank);
        printf("\n********************************************\n");
        if(rank[num] == 1)
        {
            bonus = deposit * 5;
            printf("神啊!你太厉害了,%d号赛马竟然跑了第一名,获得了5倍奖金%d元.\n",
                num + 1, bonus);
            account += bonus;
        }
        else if(rank[num] == 2)
        {
            bonus = deposit * 2;
            printf("厉害厉害了,%d号赛马竟然跑了第二名,获得了2倍奖金%d元.\n",
                num + 1, bonus);
            account += bonus;
        }
        else
        {
            deposit = deposit * rank[num] / HORSENUM;
            printf("遗憾!你选择的%d号赛马只获得了第%d名, 将扣除%d元!\n", 
                num + 1, rank[num], deposit);
            account -= deposit;
        }    
        printf("你现在的账户余额是%d元.\n", account);
        printf("你还想再玩一次吗(y or n)?");
        fflush(stdin);
        scanf(" %c", &answer);
        if(answer != 'y')
            break;
    }    
    return 0;
}
    

 

posted @ 2017-09-04 20:26  gd_沐辰  阅读(256)  评论(0编辑  收藏  举报