MyFirstDemo_(项目示例)皇帝Emperor

Emperor

数组

1、皇帝下旨选妃 (增加功能)
2、翻牌宠幸 (修改状态功能)
3、打入冷宫 (删除功能)
4、单独召见爱妃(查找功能)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>//支持字符串操作

#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

#define MAX 6
int main()
{

    //使用字符数组表示字符串
    int i, j, count = 5,temp;
    int a;
    char emperorName[50];   //皇帝的名号
    int choice ;                //皇帝的选择1—4之间
    int searchIndex = -1;   //用来存放查找到元素的下标
    char tempName[20] ;     //用来存放临时字符串变量
    char names[MAX][20] = {"貂蝉","杨玉环","不知火舞","西施","郭德纲"};
    //嫔妃的级别数组
    char levelNames[5][10] = {"贵人","嫔妃","贵妃","皇贵妃","皇后"};//[10]表示最多5个字
    //levels用来存放每位妃子的级别,每个数组元素对应每个妃子的当前级别
    int levels[MAX] = {1, 2, 0, 0, 4, -1};
    //loves数组中每个元素的对应每个妃子的好感度,初始情况,每个人的好感度都为100
    int loves[MAX] = {100, 100, 100, 100, 100, -99999};

    printf("********************************************\n");
    printf("测试代码:查看当前嫔妃的状态\n");
    printf("%-12s级别\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",emperorName);//录入字符串时,不需要&符号
    for (a = 0; a < 10; a++)
    {   

        printf("当前为第%d次游戏\n",a + 1);
        //播放音乐
        PlaySound(TEXT("sounds\\苍山.wav"),NULL, SND_FILENAME  | SND_ASYNC |SND_LOOP);
        printf("皇帝%s驾临,有事上奏,无事退朝\n",emperorName);
        printf("1、皇帝下旨选妃:\t\t(增加功能)\n");
        printf("2、翻牌宠幸:    \t\t(修改状态功能)\n");
        printf("3、打入冷宫:    \t\t(删除功能)\n");
        printf("4、单独召见爱妃   \t\t(查找功能)\n");
        printf("陛下请选择:");
        scanf("%d",&choice);

        switch (choice)
        {
        case 1:
            PlaySound(TEXT("sounds\\小城谣.wav"),NULL, SND_FILENAME  | SND_ASYNC |SND_LOOP);
            //printf("1、皇帝下旨选妃:\t\t(增加功能)\n");
            //1、增加前需要判断数组有没有空间
            //2、增加数组元素(names/loves/levels)
            if (count < MAX)//如果当前的妃子数量小于系统最大值
            {
                    //执行添加操作
                printf("请输入娘娘名讳:");
                scanf("%s",names[count]);
                //将第count个元素的状态
                levels[count] = 0;//级别初始状态为0
                loves[count] = 100;//好感度初始状态为100
                count++;//添加完元素后,记得增加计数器
            }
            else
            {
                printf("陛下要注意龙体,后宫已经人满为患了");    
            }
            printf("********************************************\n");
            printf("测试代码:查看当前嫔妃的状态\n");
            printf("%-12s级别\t好感度\n","姓名");
            for (i = 0; i < count; i++)
            {
                printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
            }

            printf("********************************************\n");

            break;
        case 2:
            PlaySound(TEXT("sounds\\断肠天涯.wav"),
                NULL, SND_FILENAME  | SND_ASYNC |SND_LOOP);
            //printf("2、翻牌宠幸:\t\t(修改状态功能)\n");
            //1、找到要宠幸的妃子的下表
            //2、修改这个妃子的状态 好感度+10,级别升1级如果最高级就不再升级
            //3、修改其他妃子的状态 好感度-10
            //4、需要解决的BUG:未支持姓名不存在的情况
            printf("陛下,请选择今晚侍奉的娘娘:");
            scanf("%s",tempName);
            //字符串的查找,strcmp,需要引入<string.h>
            //strcmp(tempName,"abc") == 0-两个字符串相等,1-前一个大于后一个,-1-前一个小于后一个
            for (i = 0; i < count; i++)
            {
                if (strcmp(tempName,names[i]) == 0 )//比较字符串是否相等
                {
                    //记录下要查找的下标
                    searchIndex = i;
                    break;
                }
            }
            if (-1 == searchIndex )//如果searchIndex的值为初值-1,表示没有找到
            {
                printf("陛下,没有叫此名字的娘娘\n");
            }
            else
            {
                for (i = 0; i < count; i++)
                {
                    if (strcmp(tempName,names[i]) == 0)//如果输入的姓名刚好等于数组中的某个名字
                    {
                        loves[i] += 10;
                        //级别要注意,不能超过5级(0-4之间)
                        levels[i] = levels[i] >=4 ? 4:levels[i] + 1;//?简写“:”意思为否则
                    }
                    else
                    {
                        loves[i] -= 10;
                    }
                }
                printf("********************************************\n");
                printf("测试代码:查看当前嫔妃的状态\n");
                printf("%-12s级别\t好感度\n","姓名");
                for (i = 0; i < count; i++)
                {
                    printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
                }
                printf("********************************************\n");
            }
            break;


        case 3:
            PlaySound(TEXT("sounds\\花落.wav"),NULL, SND_FILENAME  | SND_ASYNC |SND_LOOP);
            //printf("3、打入冷宫:\t\t(删除功能)");
            //1、查找
            //2、后面一个赋给前面一个元素
            //3、总数--
            //4、修改其他妃子的状态,好感度加20
            printf("陛下,请选择要打入冷宫的娘娘:");
            scanf("%s",tempName);
            for (i = 0; i < count; i++)
            {
                if (strcmp(tempName,names[i]) == 0 )//比较字符串是否相等
                {
                    //记录下要查找的下标
                    searchIndex = i;
                    break;
                }
            }
            if (-1 == searchIndex )//如果searchIndex的值为初值-1,表示没有找到
            {
                    printf("虚惊一场,无人被打入冷宫\n");
            }
            else
            {
                for (i = searchIndex; i < count - 1; i++)
                {
                    //names[i]= names[i + 1];因为是字符数组,C语言中不支持数组的直接赋值
                    //我们需要使用strcpy函数实现数组的赋值,后续课程讲解
                    strcpy(names[i], names[i + 1]);
                    loves[i] = loves[i + 1];
                    levels[i] = levels[i + 1];
                }
                count--;
                printf("********************************************\n");
                printf("测试代码:查看当前嫔妃的状态\n");
                printf("%-12s级别\t好感度\n","姓名");
                for (i = 0; i < count; i++)
                {
                    printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
                }

                printf("********************************************\n");
            }

            break;


        case 4:
            PlaySound(TEXT("sounds\\命定情缘.wav"),NULL, SND_FILENAME  | SND_ASYNC |SND_LOOP);
            //printf("4、单独召见爱妃\n");
            //1、查找
            //2、增加此妃子的好感度即可
            printf("陛下,请选择要单独召见的娘娘:");
            scanf("%s",tempName);
            for (i = 0; i < count; i++)
            {
                if (strcmp(tempName,names[i]) == 0)
                {
                    searchIndex = i;//记录i
                    break;
                }
            }
            if (searchIndex == -1)//没有找到
            {
                printf("陛下,没有你要召见的娘娘\n");
            }
            else
            {
                        loves[searchIndex] += 10;

                        printf("********************************************\n");
                        printf("测试代码:查看当前嫔妃的状态\n");
                        printf("%-12s级别\t好感度\n","姓名");
                        for (i = 0; i < count; i++)
                        {
                            printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
                        }

                        printf("********************************************\n");
            }
            break;

        default:
            printf("君无戏言,陛下请再次确认!\n");
        }
        printf("********************************************\n");
    }
    //最后打印妃子状态前,以级别进行排序,使用冒泡排序
    for (i = 0; i < count -1; i++)
    {
        for (j = 0; j < count - i -1; 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好感度\n","姓名");
    for (i = 0; i < count; i++)
    {
        printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
    }
    printf("********************************************\n");
    PlaySound(TEXT("sounds\\断肠天涯.wav"),NULL, SND_FILENAME  | SND_ASYNC |SND_LOOP);

    printf("游戏结束\n");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值