C语言模拟王者荣耀排位赛禁用和选择英雄【注释详细】
Hello,各位兄弟,我们又见面了,今天攀哥给大家带来的是用C语言模拟实现王者荣耀排位赛中的ban选英雄,代码比较简单,兄弟们操练起来吧!!
给波关注,不过分吧~~
【需求】
王者荣耀排位赛中 ban 选模式
- 敌我双方轮流禁用英雄,每次禁用 1 名英雄,敌我双方各禁 3 名英雄 (优先这个功能做)
- 敌我双方轮流选英雄,每次选 1 名英雄,敌我双方各选 5 名英雄
我方手动输入禁用的英雄,地方随机禁用英雄
英雄池已经贴心的为大家准备好了,像我这样贴心帅气的博主已经很难找到了,
char hero_pool[61][20] = {"李白", "王昭君", "公孙离", "庄周", "妲己", "安琪拉", "后羿", "鲁班七号", "凯", "镜", "关羽", "典韦", "夏侯惇", "张飞", "赵云", "李元芳", "狄仁杰",
"赵怀真", "艾琳", "马可波罗", "米莱迪", "廉颇", "刘邦", "项羽", "虞姬", "瑶", "明世隐", "孙尚香", "孙悟空", "猪八戒",
"金蝉子", "甄姬", "雅典娜", "女娲", "鬼谷子", "韩信", "兰陵王", "杨戬", "哪吒", "杨玉环", "百里守约", "百里玄策", "伽罗", "苏烈", "小乔"
, "大乔", "墨子", "李信", "盾山", "东皇太一", "白起", "芈月", "貂蝉", "吕布", "曹操", "蔡文姬", "云中君", "海月", "嫦娥", "盘古", "狂铁", "黄忠"};
大家可以先自己尝试一下,先不要看下面的参考代码(我知道我是拦不住的)
【参考代码】
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(){
// 英雄池
char hero_pool[61][20] = {"李白", "王昭君", "公孙离", "庄周", "妲己", "安琪拉", "后羿", "鲁班七号", "凯", "镜", "关羽", "典韦", "夏侯惇", "张飞", "赵云", "李元芳", "狄仁杰","赵怀真", "艾琳", "马可波罗", "米莱迪", "廉颇", "刘邦", "项羽", "虞姬", "瑶", "明世隐", "孙尚香", "孙悟空", "猪八戒","金蝉子", "甄姬", "雅典娜", "女娲", "鬼谷子", "韩信", "兰陵王", "杨戬", "哪吒", "杨玉环", "百里守约", "百里玄策", "伽罗", "苏烈", "小乔", "大乔", "墨子", "李信", "盾山", "东皇太一", "白起", "芈月"};
// 存放我方禁用英雄的数组
char my_ban[3][20];
// 存放敌方禁用英雄的数组
char di_ban[3][20];
// 禁用英雄不能重复禁用:
// 1. 简单的方法:
// 1) 从英雄池中随机选择1个英雄
// 2) 将这个英雄存放到,我方的禁用英雄数组中
// 3) 将这个英雄从英雄池数组中删掉,这样下次再随机英雄的时候,随机不到这个英雄了
// 2. 复杂的方法:
// 1) 从英雄池中随机选择1个英雄
// 2) 拿着这个英雄分别在 我方和敌方禁用英雄列表中查看一下是否有重复的
// 3) 如果没有重复的就放进去,有重复的再重新随机一个英雄
// 计算出英雄池有多少个英雄
int len = sizeof(hero_pool)/sizeof(hero_pool[0]);
// 开始禁用英雄,敌我双方各禁3个英雄,循环3次禁用3个英雄
for (int i = 0; i < 3; ++i)
{
// 首先输入一个英雄,如果这个英雄被禁用了或者在英雄池中不存在,那么就重新输入英雄
do{
printf("请输入第%d位要禁用的英雄:",i+1);
char name[20];
scanf("%s",name); // 获取英雄名称
// 标记为-1,表示不能存入禁用英雄的数组中
// 标记为其他,就可以存入到禁用英雄数组中
int flag=-1;
// 判断这个英雄的名称,是否在英雄池中,
// 并且是否已经被我放或者敌方禁用了
// 1. 判断输入的英雄,是否在英雄池中
for(int m=0;m<len;m++){
// 如果当前英雄名和输入的英雄名相同
if(strcmp(hero_pool[m],name)==0){
// 说明英雄在英雄池中
// 修改标记,暂时标记为可以可以存储到数组中
flag = m; // m就是英雄在英雄池中的下标
break;
}
}
// 如果出了循环,此时flag是-1
if(flag==-1){
printf("~暂无此英雄~\n");
//结束本次循环,不再做后面的代码
continue;
}
// 2.判断是否在my_ban数组或者di_ban数组中,是否被我方或者敌方禁用了
for(int m=0;m<3;m++){
// 如果输入的英雄和我方禁用的英雄名字相同
if(strcmp(name,my_ban[m])==0){
printf("该英雄已经被我方禁用,请重新选择\n");
// 修改状态,将标记改为不可用状态
flag = -1;
break;
}
// 如果输入的英雄和敌方禁用的英雄名字相同
if(strcmp(name,di_ban[m])==0){
printf("该英雄已经被敌方禁用,请重新选择\n");
flag = -1;
break;
}
}
// 经过上面层层筛选,最后走到这里,flag不为-1
if(flag!=-1){ // 这个输入的名称是可用的
// 将名称加入到我方禁用英雄列表中
strcpy(my_ban[i],hero_pool[flag]);
printf("我方禁用了:%s\n",my_ban[i]);
break; // 结束掉do while循环
}
}while(1); //循环,直到找到能禁的英雄
//敌方禁用英雄(随机禁用)
// 1. 设置随机数种子
srand(time(0));
do{
// 在英雄池的范围内随机一个英雄出来
int index = rand()%len;
// 根据随机下标,选择一个英雄
// hero_pool[index];
// 只需要判断当前这个随机出来的英雄是否被我方或者敌方禁用了
int flag = index;
for (int m = 0; m < 3; ++m)
{
// 如果输入的英雄和我方禁用的英雄名字相同
if(strcmp(hero_pool[index],my_ban[m])==0){
// 修改状态,将标记改为不可用状态
flag = -1;
break;
}
// 如果输入的英雄和敌方禁用的英雄名字相同
if(strcmp(hero_pool[index],di_ban[m])==0){
flag = -1;
break;
}
}
if(flag!=-1){
// 将随机出来的英雄,放入到敌方禁用列表中
strcpy(di_ban[i],hero_pool[flag]);
printf("敌方禁用了:%s\n",di_ban[i] );
break;// 结束循环
}
}while(1);
}
printf("-----------我方禁用的英雄------------\n");
for (int i = 0; i < 3; ++i)
{
printf("%s\t", my_ban[i]);
}
printf("\n");
printf("-----------敌方禁用的英雄------------\n");
for (int i = 0; i < 3; ++i)
{
printf("%s\t", di_ban[i]);
}
printf("\n");
return 0;
}
没点关注的宝宝,点一下关注!
点完关注的宝宝,可以撤了!!去关注一下攀哥的小破站,墨轩大楼 O(∩_∩)O哈哈~
原文地址:https://blog.csdn.net/yueyehuguang/article/details/142816072
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!