c语言实现皇帝翻牌游戏
一个综合的游戏,对所学的知识进行整合!融会贯通!
#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()
{
// 项请目实践之陛下翻牌
// 播放音乐
PlaySound(TEXT("sounds\\背景音乐.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
// 8个字符能存放4个汉字
char tempName[20];
// 定义二维数组来存放妃子
char names[MAX][20] = {"西施","貂蝉","王昭君","杨玉环","赵飞燕"};
// 定义二维数组来存放妃子等级
char levelNames[5][8] = {"贵人","嫔妃","贵妃","皇贵妃","皇后"};
// 存放每个妃子的等级
int levels[MAX] = {0,0,2,0,0,-1};
// 用来存放每个妃子的好感度
int loves[MAX] = {100,100,100,100,100,-1};
int i,j,temp; // 用于冒泡排序
int count = 5; // 当前未被打入冷宫的妃子数量
int day = 1; // 第几天
/*
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]);
}
*/
// 皇帝的名号
char emperorName[50];
// 皇帝的选择
int choice;
int selectIndex; // 选择的妃子的index
// 使用字符数组表示字符串
printf("请输入当前登基的皇帝名号:");
scanf("%s",emperorName); // 录入字符串
printf("当前皇帝是【%s】,万岁万岁万万岁!\n",emperorName);
while (day <= 10) {
printf("******************************************************\n");
printf("第%d天\n",day);
day++;
// 做出菜单
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: // 1.皇帝下旨选妃\t\t (增加)\n
PlaySound(TEXT("sounds\\选妃.wav"),NULL,SND_FILENAME | SND_ASYNC);
if (count < MAX) {
// 执行添加操作
printf("请输入娘娘的名讳:");
scanf("%s",names[count]);
// 初始化状态
levels[count] = 0;
loves[count] = 100;
count++;
} else {
printf("陛下要注意龙体啊,后宫已经人满为患!\n");
}
break;
case 2: // 2.翻牌宠幸 \t\t (修改状态)\n
PlaySound(TEXT("sounds\\翻牌.wav"),NULL,SND_FILENAME | SND_ASYNC);
// 1. 找到妃子
// 2. 修改妃子状态 好感度+10 级别升1级 最高级不再升
// 3. 修改其他妃子的状态 其他妃子 好感度 -10
printf("陛下请输入今天要翻牌的妃子:");
scanf("%s",tempName);
selectIndex = -1;
// strcmp(tempName,"abc") 0表示两个字符串相等,1表示前一个大于后一个,-1表示前一个小于后一个
for (i = 0;i<count ;i++) {
if (strcmp(tempName,names[i]) == 0) {
selectIndex = i;
break;
}
}
if (selectIndex == -1) {
printf("皇上,这个妃子不存在啊!\n");
break;
}
// 更改选中人的状态
if (levels[selectIndex] < 4) {
levels[selectIndex] += 1;
}
loves[selectIndex] += 10;
// 更改其他妃子的状态
for (i = 0;i<count ;i++) {
if (i != selectIndex) {
loves[i] -= 10;
}
}
break;
case 3: // 3.打入冷宫 \t\t (删除)\n
PlaySound(TEXT("sounds\\冷宫.wav"),NULL,SND_FILENAME | SND_ASYNC);
// 1.查找
// 2.后面一个赋给前面一个
// 3.总数--
printf("请输入需要打入冷宫的妃子姓名:");
scanf("%s",tempName);
selectIndex = -1;
// strcmp(tempName,"abc") 0表示两个字符串相等,1表示前一个大于后一个,-1表示前一个小于后一个
for (i = 0;i<count ;i++) {
if (strcmp(tempName,names[i]) == 0) {
selectIndex = i;
break;
}
}
if (selectIndex == -1) {
printf("皇上,这个妃子不存在啊!\n");
break;
}
for (i = selectIndex ; i<count - 1;i++) {
// names[i] = names[i + 1]; C语言中不支持数组的直接赋值,字符串在C语言中就是数组
strcpy(names[i],names[i+1]);
loves[i] = loves[i + 1];
levels[i] = levels[i + 1];
}
count-- ;
break;
case 4: // 4.召见爱妃去谈心 \n
PlaySound(TEXT("sounds\\一笑倾城.wav"),NULL,SND_FILENAME | SND_ASYNC);
printf("请输入需要单独约见的妃子姓名:");
scanf("%s",tempName);
selectIndex = -1;
// strcmp(tempName,"abc") 0表示两个字符串相等,1表示前一个大于后一个,-1表示前一个小于后一个
for (i = 0;i<count ;i++) {
if (strcmp(tempName,names[i]) == 0) {
selectIndex = i;
loves[i] += 10;
break;
}
}
if (selectIndex == -1) {
printf("皇上,这个妃子不存在啊!\n");
break;
}
break;
default:
printf("君无戏言,陛下请再次确认!\n");
break;
}
// 播放背景音乐
PlaySound(TEXT("sounds\\背景音乐.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
// 按照级别进行排序,使用冒泡排序
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("%-12s级别\t好感度\n","姓名");
for (i = 0;i <count;i++) {
printf("%-12s%s\t%d\n",names[i],levelNames[levels[i]],loves[i]);
}
for (i = 0;i <count ;i++) {
if (loves[i] < 60) {
printf("皇上,有妃子被冷落了,生了杀意。游戏失败。\n");
// 跳转到over的位置
goto over;
}
}
}
printf("恭喜你,赢了!\n");
over:
return 0;
}

通过这个小游戏,感悟循环,数组,变量,输入输出,冒泡排序等综合知识的运用!
c语言实现皇帝翻牌游戏的更多相关文章
- js之翻牌游戏中的一个深刻感悟
先“上菜”: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)
使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?和C Socket服务器比起来有什么优劣?可行性怎么样? 从2013年起,经朋友推荐开始用Golang编写游戏登陆服务器, 配合C++做第三方 ...
- C语言实现推箱子游戏完整代码
C语言实现推箱子游戏完整代码 前言 自己做的,可能有些代码不够工整,或者有些小问题,但游戏的基本操作是可以实现的 代码效果 代码一共分为8个部分,4个控制上下左右移动,2个判断输赢,1个统计归为的个数 ...
- unity 翻牌游戏(全都是gui)
;//列数 ;//行数 ;//所有卡片的数量 var matchesNeededToWin:int = totalCards*0.5;//最大匹配数,用来判断游戏是否胜利 ; ; ; var aCar ...
- 简单的C语言猜数字小游戏
猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <st ...
- 一款c语言实现的赛车游戏
博主学习c语言已经有一段时间了,出于对自己学习检验的目的,自制了一款c语言赛车游戏. 由于本质是检验和尝试,所以并没有注重游戏的界面.下文是开发文档,在博主的github网页可以下载源码,注意本项目使 ...
- C语言之推箱子游戏代码
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Yan_Less 正文 新手注意:如果你学习遇到问题找不到人解答,可以点 ...
- C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!
中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...
- 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!
俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...
随机推荐
- 小程序-wx:for
wx:for (列表渲染) index默认数组下标item默认数组当前项的变量名 数组是对象的形式,单纯写{{item}},结果是[object object]的形式,必须加对象名,并且对象名基本设置 ...
- arttemplate.js简洁写法案例
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 基于 Web 的 Go 语言 IDE - Wide 1.4.0 发布!
Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE . 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈. Lint 实时运行:极速编 ...
- 使用PyQT编写界面程序
使用PyQT比QT好在,可以随时监测函数正确性,省去编译时间 ! 这是个不小的节省. 1. PyQt: 打开对话框 msgbox = QtGui.QMessageBox(self)# 我的语句是 ms ...
- PCL:解决PCL和OpenCV冲突的方法
不是PCL的问题,而是OpenCV的问题. (1):先包含PCL库,再包含OpenCV库: (2):把里面的UCHAR冲突全部换掉! 如果你有闲情逸致,用正则表达式 慢慢替换去吧! (3):或者把F ...
- iphone通讯录的备份与恢复
最近在做iOS系统通讯录备份到服务器,并且可以从服务器中下载备份文件恢复到手机的功能,部分实现细节记录如下. 将iphone系统通讯录生成.vcf文件 ABAddressBookRef address ...
- Installshield下如何在指定目录执行bat
在做InstallShield中碰到这样的问题,有service.bat需要在指定的一个目录运行. 一开始在bat内写入语句: cd d:\XXXXX command1.exe command2.ex ...
- RxSwift の Observable とは何か
Qiita にあげていた記事ですが.ここにもバックアップをとっておきます この記事は.2017/09/15〜17 に早稲田大学 理工学部 西早稲田キャンパスで開催される iOSDC Japan 201 ...
- eclipse创建maven的ssm项目
自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...
- 路飞学城Python-Day113
107-HTTP协议的无状态保存 什么是无状态保存? HTTP无状态请求就是客户端每次发送的请求都是单独的新请求,每一次请求都是独立的,这样的特点在网站上就是服务器登录的时候记录浏览器的信息,建立 ...