皇帝选妃
数组应用
冒泡排序
#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;
}
以上完毕!