Tips:
1、二维数组里面高维可以不要,低维需要保留。
2、if(strcmp(tempName,names[i]) == 0) 需要引入头文件 #include <string.h> //支持字符串操作
0表示两个字符串相等,1,前一个大于后一个,-1,前一个小于后一个
abc和bca字符串谁大呢?
其实判断的是ascll码,比较第一个字符,一样的话再比较第二个字符
97/98
结果:-1
3、条件运算符 ?:
是C语言中的唯一一个三目运算符,
<表达式1>?<表达式2>:<表达式3>
表达式1为真则执行表达式2
表达式1为假则执行表达式3
4、C语言中不支持数组的直接赋值,我们需要使用strcpy函数实现数组的赋值
5、音乐文件放在 bin\Debug\sounds 下
- 程序功能(待完善): 1、选妃 2、宠妃 3、打冷宫 4、小树林 5、按级别排序输出(冒泡排序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //支持字符串操作
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "Winmm.lib")
#define MAX 6 //常量max表示系统要求的最大妃子数量
int main()
{
int i,j,temp; //循环变量和临时整型变量
int count = 5; //当前未打入冷宫的嫔妃个数(因为数组长度会变,所以定义一个count)
int choice; //皇帝的选择1-4之间
int searchIndex = -1; //用来存放查找到元素的下标
//使用字符数组表示字符串
char emperorName[50]; //皇帝的名号
char tempName[20]; //用于存放临时字符串的字符数组
char names[MAX][20] = {"貂蝉","杨玉环","不知火舞","西施","郭德纲"};
//嫔妃的级别数组
char levelNames[5][10] = {"贵人","嫔妃","贵妃","皇贵妃","皇后"};
//用来存放每位妃子的级别,每个数组元素对应每个妃子的当前级别
int levels[MAX] = {1,2,0,4,0,-1};//不固定长度的数组定义
int loves[MAX] = {100,100,100,100,100,-1};//初始i情况,每个人的好感度都是100
PlaySound(TEXT("sounds\\背景音乐.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
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("请输入当前登基的皇帝名称:\n");
scanf("%s",emperorName);//实际上是输入了一个字符串(字符数组),因为后面是字符数组,所以不用取地址符&
printf("当前皇帝是%s,万岁万岁万万岁!\n",emperorName);
while(1) //循环游戏
{
printf("1、皇帝选妃:\t\t (增加功能)\n");
printf("2、翻牌宠幸:\t\t(修改状态功能)\n");
printf("3、打入冷宫!\t\t(删除功能)\n");
printf("4、单独召见爱妃。\n");
printf("陛下请选择:\n");
scanf("%d",&choice);
switch(choice)
{
case 1://皇帝下旨选妃:\t\t(增加功能)\n");
PlaySound(TEXT("sounds\\选妃.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
//1、增加前需要判断数组有没有空间
//2、增加数组元素(names、loves、levels)
if(count < MAX)//如果当前的妃子数量小于系统规定的妃子总数
{
//执行添加操作
printf("请输入娘娘的名讳:\n");
scanf("%s",names[count]); //不能有取地址符
//将第count个元素的状态初始化
levels[count] = 0; //初始级别为0
loves[count] = 100; //初始好感度为100
count++; //总人数加一
}
else
{
printf("陛下要注意龙体啊!后宫已人满为患!\n");
}
break; //switch 必须有break ,否则会接着执行下一个case
case 2:
printf("2、翻牌宠幸: \t\t(修改状态功能)\n");
PlaySound(TEXT("sounds\\翻牌.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
//1、找到要宠幸妃子的下标
//2、修改这个妃子的状态,好感度+10,级别升1级,如果最高级就不再升级
//3、修改其他妃子的状态,由于羡慕嫉妒恨,其他妃子好感度-10
printf("陛下,请输入今天翻牌娘年的名讳:\n");
scanf("%s",tempName);
//字符串的查找strcmp,需要引入<string.h>
for(i=0; i<count; i++)
{
if(strcmp(tempName,names[i]) == 0)//如果输入的姓名刚好等于数组中的某个姓名
{
loves[i] += 10;
//级别不能超过五级(0-4之间)
levels[i] = levels[i] >=4 ? 4: levels[i] +1;
}
else
{
loves[i] -= 10;
}
}
break;
case 3:
printf("3、打入冷宫!\t\t(删除功能)\n");
PlaySound(TEXT("sounds\\冷宫.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
//1、查找
//2、后面一个赋给前面一个元素
//3、总数--
//4、修改其他妃子的状态,好感度+20
printf("陛下,请输入打入冷宫的姓名:\n");
scanf("%s",tempName);
//循环查找
for(i = 0; i < count; i++)
{
if(strcmp(tempName, names[i]) == 0)
{
//记录下要查找的下标
searchIndex = i;
break;
}
}
if(-1 == searchIndex)//如果earchIndex的值为处置-1,表示没有找到
{
printf("虚惊一场,无人打入冷宫,该吃吃该喝喝!\n");
}
else
{
for(i = searchIndex; i< count -1; i++)//后面一个赋给前面一个
{
strcpy(names[i], names[i +1]);//C语言中不支持数组的直接赋值(把某个数组给某个数组是不支持的),我们需要使用strcpy函数实现数组的赋值
loves[i] = loves[i +1];
levels[i] = levels[i +1];
}
count--;
}
break;
case 4://单独召见爱妃
PlaySound(TEXT("sounds\\一笑倾城.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
//1、查找
//2、增加好赶赴即可
//3、可以使用数组设计诗歌,使用随机数字的方式,表现皇帝的文采
break;
default:
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");
} //while(1)循环游戏
return 0;
}