老九C语言案例皇帝选妃

皇帝选妃

数组应用

冒泡排序

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "Winmm.lib")
#include <string.h> //支持字符串操作的头文件
#define MAX 6  //常量MAX表示系统要求的最大妃子数量
int main()
{
    //播放背景音乐
    PlaySound(TEXT("sounds\\背景.wav"),
                NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
    //循环遍历
    int i,j,temp;//临时变量temp
    //当前未打入冷宫的嫔妃个数
    int count = 5;
    //使用字符数组表示字符串皇帝名号
    char empporName[50];
    //用来存放临时字符串的字符数组
    char tempName[20];
    //皇帝的选择1-4
    int choice;
    //查找 存放娘娘元素下标
    int searchIndex = -1;
    //姓名数组 6个嫔妃 一个预留 名字长度为10
    char names[MAX][20] = {"貂蝉","杨玉环","西施","王昭君","姬灵焰"};
    //嫔妃级别数组 五个级别 10个长度
    char levelNames[5][10] = {"贵人","嫔妃","贵妃","皇贵妃","皇上"};
    //每位妃子的级别 每个数组元素对应每个妃子的当前级别
    //对应 1 是貂蝉 以此类推 -1是预留给增加的那个人的 备用
    int levels[MAX] = {1,2,0,0,0,-1};//真正是操控这个去改变级别
    //对应每个妃子的好感度 初始每个妃子的好感度都为100
    int loves[MAX] = {100,100,100,100,100,-1};

    printf("******************************************\n");
    printf("查看当前嫔妃的状态: \n");
    printf("%-12s级别\t好感度\t\n","姓名");
    for(i = 0; i < count; i++)
    {
        printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
    }
    printf("******************************************\n");
    //游戏菜单
    printf("请输入当前登基的皇帝名号: ");
    scanf("%s",empporName);//录入字符串,不需要&符号
    printf("欢迎当前皇帝是%s,万岁万岁万万岁\n",empporName);
    while(1)
    {
        printf("1.皇帝下旨选妃: \t(增加功能)\n");
        printf("2.翻拍宠幸: \t\t(修改状态功能)\n");
        printf("3.打入冷宫! \t\t(删除功能)\n");
        printf("4.单独召见爱妃与其共乐。(好感度)\n");
        printf("陛下请选择: ");
        scanf("%d",&choice);//录入皇帝的选择
        switch(choice)
        {
            case 1://"1.皇帝下旨选妃: \t(增加功能)\n"
                //播放选妃音乐
        PlaySound(TEXT("sounds\\选妃.wav"),
                    NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);

                //增加数组元素 姓名 等级 好感度
                //判断后宫是不是满了 不满才插入
                if(count < MAX)//如果当前妃子数量小于最大妃子  表示可以添加妃子
                {
                    //执行添加
                    printf("请输入娘娘的名讳:");
                    scanf("%s",names[count]);//数组下标从0开始 空闲第六个元素下标是5
                    //初始化对应状态 等级和好感度
                    levels[count] = 0; //级别初始为0
                    loves[count] = 100;//好感度初始为100
                    count++;//添加完后  增加计数器
                }
                else
                {
                    //当前妃子数量已经满了 无法再添加
                    printf("陛下,要注意龙体啊,后宫已经人满为患!\n添加失败!\n");
                }
                break;
            case 2://".翻拍宠幸: \t\t(修改状态功能)\n"
                   //播放翻牌音乐
        PlaySound(TEXT("sounds\\翻牌.wav"),
                    NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
                //1.找到要宠幸妃子的下标
                //2.修改这个妃子的状态 等级提升1级 最高级就不提升 好感度+10
                //3.修改其它妃子的状态 好感度-10
                printf("陛下,请输入今天翻拍娘娘的名讳:");
                scanf("%s",tempName);//录入字符串
                //字符串查找 引入头文件<string.h>
                //strcmp 结果为0则表示两个字符串相等 1 前一个大于后一个 -1后一个大于前一个
                for(i = 0; i < count; i++){
                    //如果输入的姓名刚好等于数组中某个娘娘的名称找到妃子了
                    if(strcmp(tempName,names[i]) == 0)
                    {
                        loves[i] += 10;//好感度+10
                        //操控这个字符级别也会根据levels升级
                        levels[i] = levels[i] >= 4 ? 4 : levels[i] + 1; //级别+1 不能超过5级
                    }else{
                        //其它娘娘好感度 - 10
                        loves[i] -= 10;
                    }
                }
                break;
            case 3://".打入冷宫! \t\t(删除功能)\n" 障眼法
                 //播放冷宫音乐
        PlaySound(TEXT("sounds\\冷宫.wav"),
                    NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
                //1.查找
                //2.后面一个覆盖前面一个
                //3.count --  障眼法 总数--
                //4.其它妃子的好感度+10
                printf("陛下,请输入要打入冷宫的娘娘名讳:");
                scanf("%s",tempName);//录入字符串
                //循环查找
                for(i = 0; i < count; i++)
                {
                    if(strcmp(tempName,names[i]) == 0)
                    {//找到了该娘娘
                        //记录要找到的娘娘下标
                        searchIndex = i;
                        break;//找到了就退出 提高效率
                    }
                }
                if(-1 == searchIndex)
                {//没有找到 因为它的值还是初值-1
                    printf("虚惊一场,无人打入冷宫,该吃吃该喝喝!");
                }
                else
                {//有人打入冷宫了
                    //删除算法
                    for(i = searchIndex; i < count - 1; i++){
                        //后面一个赋给前面一个
                        //c 语言不支持字符串的直接赋值
                        //names[i] = names[i+1];
                        //使用strcpy 函数来实现数组的赋值
                        strcpy(names[i],names[i+1]);
                        levels[i] = levels[i+1];
                        loves[i] = loves[i+1];
                    }
                    count--;//总数减去1 障眼法
                    //其它妃子好感度+10
                    for(i = 0;i < count; i++){
                        loves[i] += 10;
                    }
                }
                break;
            case 4://"4.单独召见爱妃与其共乐。(好感度)\n"
                 //播放美人笑音乐
        PlaySound(TEXT("sounds\\一笑倾城.wav"),
                    NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
                //1.查找
                //2.增加好感度即可
                printf("陛下,请输入要打入单独召见的娘娘名讳:");
                scanf("%s",tempName);//录入字符串
                for(i = 0; i < count; i++)
                {
                    if(strcmp(tempName,names[i]) == 0)
                    {//找到了该娘娘
                        //记录要找到的娘娘下标
                        searchIndex = i;
                        break;//找到了就退出 提高效率
                    }
                }
                if(-1 == searchIndex)
                {//没有找到 因为它的值还是初值-1
                    printf("无人与你同行天下!\n");
                }
                else
                {
                  //找到了
                  loves[searchIndex] += 10;
                }
                break;
            default:
                printf("君无戏言,陛下请再次确认!\n");
        }
        //最后打印所有妃子状态前,以级别进行排序,冒泡排序
        for(i = 0; i < count -1; i++)
        {//外层循环控制行 轮数
            for(j = 0; j < count - 1 - i; j++)
            {//比较次数
                //根据级别从大到小拍
                if(levels[j] < levels[j+1])
                {
                    //等级
                    temp = levels[j];
                    levels[j] = levels[j+1];
                    levels[j+1] = temp;
                    //好感度
                    temp = loves[j];
                    loves[j] = loves[j+1];
                    loves[j+1] = temp;
                    //姓名 字符串的交换
                    strcpy(tempName,names[j]);
                    strcpy(names[j],names[j+1]);
                    strcpy(names[j+1],tempName);
                }
            }
        }
        printf("******************************************\n");
        printf("查看当前嫔妃的状态: \n");
        printf("%-12s级别\t好感度\t\n","姓名");
        for(i = 0; i < count; i++)
        {
            printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
        }
        printf("******************************************\n");
    }
    return 0;
}

在这里插入图片描述
以上完毕!

发布了18 篇原创文章 · 获赞 2 · 访问量 1488

猜你喜欢

转载自blog.csdn.net/AppWhite_Star/article/details/104159865