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;
}