算法-程序设计课程week10-炉石传说

ccf 炉石传说 201609-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的 阅读详情


在这里插入图片描述

题目

试题编号: 201609-3
试题名称: 炉石传说
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下:
在这里插入图片描述
  * 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。
  * 玩家各控制一个英雄,游戏开始时,英雄的生命值为 30,攻击力为 0。当英雄死亡时,游戏结束,英雄未死亡的一方获胜。
  * 玩家可在游戏过程中召唤随从。棋盘上每方都有 7 个可用于放置随从的空位,从左到右一字排开,被称为战场。当随从死亡时,它将被从战场上移除。
  * 游戏开始后,两位玩家轮流进行操作,每个玩家的连续一组操作称为一个回合。
  * 每个回合中,当前玩家可进行零个或者多个以下操作:
  1) 召唤随从:玩家召唤一个随从进入战场,随从具有指定的生命值和攻击力。
  2) 随从攻击:玩家控制自己的某个随从攻击对手的英雄或者某个随从。
  3) 结束回合:玩家声明自己的当前回合结束,游戏将进入对手的回合。该操作一定是一个回合的最后一个操作。
  * 当随从攻击时,攻击方和被攻击方会同时对彼此造成等同于自己攻击力的伤害。受到伤害的角色的生命值将会减少,数值等同于受到的伤害。例如,随从 X 的生命值为 HX、攻击力为 AX,随从 Y 的生命值为 HY、攻击力为 AY,如果随从 X 攻击随从 Y,则攻击发生后随从 X 的生命值变为 HX - AY,随从 Y 的生命值变为 HY - AX。攻击发生后,角色的生命值可以为负数。
  本题将给出一个游戏的过程,要求编写程序模拟该游戏过程并输出最后的局面。
输入格式
  输入第一行是一个整数 n,表示操作的个数。接下来 n 行,每行描述一个操作,格式如下:
  <action> <arg1> <arg2> …
  其中<action>表示操作类型,是一个字符串,共有 3 种:summon表示召唤随从,attack表示随从攻击,end表示结束回合。这 3 种操作的具体格式如下:
  * summon <position> <attack> <health>:当前玩家在位置<position>召唤一个生命值为<health>、攻击力为<attack>的随从。其中<position>是一个 1 到 7 的整数,表示召唤的随从出现在战场上的位置,原来该位置及右边的随从都将顺次向右移动一位。
  * attack <attacker> <defender>:当前玩家的角色<attacker>攻击对方的角色 <defender>。<attacker>是 1 到 7 的整数,表示发起攻击的本方随从编号,<defender>是 0 到 7 的整数,表示被攻击的对方角色,0 表示攻击对方英雄,1 到 7 表示攻击对方随从的编号。
  * end:当前玩家结束本回合。
  注意:随从的编号会随着游戏的进程发生变化,当召唤一个随从时,玩家指定召唤该随从放入战场的位置,此时,原来该位置及右边的所有随从编号都会增加 1。而当一个随从死亡时,它右边的所有随从编号都会减少 1。任意时刻,战场上的随从总是从1开始连续编号。

输出格式

输出共 5 行。
  第 1 行包含一个整数,表示这 n 次操作后(以下称为 T 时刻)游戏的胜负结果,1 表示先手玩家获胜,-1 表示后手玩家获胜,0 表示游戏尚未结束,还没有人获胜。
  第 2 行包含一个整数,表示 T 时刻先手玩家的英雄的生命值。
  第 3 行包含若干个整数,第一个整数 p 表示 T 时刻先手玩家在战场上存活的随从个数,之后 p 个整数,分别表示这些随从在 T 时刻的生命值(按照从左往右的顺序)。
  第 4 行和第 5 行与第 2 行和第 3 行类似,只是将玩家从先手玩家换为后手玩家。

样例输入

8
summon 1 3 6
summon 2 4 2
end
summon 1 4 5
summon 1 2 1
attack 1 2
end
attack 1 1

样例输出

0
30
1 2
30
1 2

样例说明
  按照样例输入从第 2 行开始逐行的解释如下:
  1. 先手玩家在位置 1 召唤一个生命值为 6、攻击力为 3 的随从 A,是本方战场上唯一的随从。
  2. 先手玩家在位置 2 召唤一个生命值为 2、攻击力为 4 的随从 B,出现在随从 A 的右边。
  3. 先手玩家回合结束。
  4. 后手玩家在位置 1 召唤一个生命值为 5、攻击力为 4 的随从 C,是本方战场上唯一的随从。
  5. 后手玩家在位置 1 召唤一个生命值为 1、攻击力为 2 的随从 D,出现在随从 C 的左边。
  6. 随从 D 攻击随从 B,双方均死亡。
  7. 后手玩家回合结束。
  8. 随从 A 攻击随从 C,双方的生命值都降低至 2。

评测用例规模与约定

* 操作的个数0 ≤ n ≤ 1000。
  * 随从的初始生命值为 1 到 100 的整数,攻击力为 0 到 100 的整数。
  * 保证所有操作均合法,包括但不限于:
  1) 召唤随从的位置一定是合法的,即如果当前本方战场上有 m 个随从,则召唤随从的位置一定在 1 到 m + 1 之间,其中 1 表示战场最左边的位置,m + 1 表示战场最右边的位置。
  2) 当本方战场有 7 个随从时,不会再召唤新的随从。
  3) 发起攻击和被攻击的角色一定存在,发起攻击的角色攻击力大于 0。
  4) 一方英雄如果死亡,就不再会有后续操作。
  * 数据约定:
  前 20% 的评测用例召唤随从的位置都是战场的最右边。
  前 40% 的评测用例没有 attack 操作。
  前 60% 的评测用例不会出现随从死亡的情况。

思路

这是一道模拟题,关键就在于要耐心地一步一步实现游戏规则。

for 
	if 召唤
	else if 攻击
	else if 结束
	else  非法操作

输出结果

心得

  1. 发现vector 15秒,静态数组0秒,STL的效率打折太多了。
  2. 学会了,这就下载炉石传说去跟别人对线。
  3. 总觉得这游戏跟数码宝贝,赛尔号之类的游戏差不多,就是把精灵换成卡牌😂。
  4. 本题目不存在英雄死亡则游戏结束的情况。

代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct node {
	int hp, attack;
};
int main() {
	int n;
	cin >> n;

	vector<node> player[2];
	player[0].push_back({30, 0});
	player[1].push_back({30, 0});

	int cur_player = 0;
	while (n--) {
		string op;
		cin >> op;
		if (op == "summon") {  //召唤策略
			int p, t_at, t_hp;
			cin >> p >> t_at >> t_hp;

			player[cur_player].insert(player[cur_player].begin() + p, {t_hp, t_at});
		} else if (op == "attack") {  //攻击策略
			int from, to;
			cin >> from >> to;

			player[cur_player][from].hp -= player[!cur_player][to].attack;	//这里没有先后手区别,死亡效果在双方都攻击之后触发!!!
			player[!cur_player][to].hp -= player[cur_player][from].attack;

			//消除死亡者
			if (player[cur_player][from].hp <= 0)  //由于自己英雄不能发动攻击,因此无需进行!=0判断
				player[cur_player].erase(player[cur_player].begin() + from);
			if (player[!cur_player][to].hp <= 0 && to != 0)
				player[!cur_player].erase(player[!cur_player].begin() + to);
		} else if (op == "end") {  //end,切换选手
			cur_player = !cur_player;
		} else {
			cout << "no such op" << endl;
		}
	}
	//第一行
	if (player[0][0].hp <= 0) {
		cout << -1 << endl;
	} else if (player[1][0].hp <= 0) {
		cout << 1 << endl;
	} else {
		cout << 0 << endl;
	}
	//第二行
	cout << player[0][0].hp << endl;
	//第三行
	cout << player[0].size() - 1;
	for (int i = 1; i < player[0].size(); i++) {
		cout << " " << player[0][i].hp;
	}
	cout << endl;
	//第四行
	cout << player[1][0].hp << endl;
	//第五行
	cout << player[1].size() - 1;
	for (int i = 1; i < player[1].size(); i++) {
		cout << " " << player[1][i].hp;
	}
	cout << endl;

	return 0;
}
炉石传说系统拆解 《炉石传说系统拆解》 炉石传说系统思维导图 以下是我对此系统拆解图的分析理解: 一.战斗系统 《炉石传说》的战斗流程主要分为3个阶段,分别为开场抽牌、战斗阶段与游戏结束。 开场抽牌 游戏开始时,双方各自从自己的牌库中抽取三张卡牌。然后由系统决定双方的先后手顺序,后手的一方再抽取一张卡牌并且获得一枚硬币(可换取一个行动点)。当先后顺序决定好后,玩家可以根据自己手牌的情况,选择是否更换手牌。如果更换,则从自己的牌库中抽取相同数量的卡牌进行更换,补充到手牌中;如不更换,点击确定后,. 阅读详情

相关推荐

用Unity实现AR类炉石传说游戏——开发框架(一)

游戏流程图 玩家类 每场对战中有两个玩家实例 每个玩家拥有: 卡组 牌库 手牌 场上的英雄 生命值,能量值等属性 卡组 vector作为容器存储 vector&lt;Card&gt; CardsCombination; 由玩家自行组合 牌库 使用栈来作为容器,在对局开始时,用洗乱的玩家卡组作为玩家的牌库 stack&lt;Card&gt; Ca...

沉剑池 3778

FZU Problem 2232 炉石传说(匈牙利算法)

Problem 2232 炉石传说 Accept: 170    Submit: 619 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description GG学长虽然并不打炉石传说,但是由于题面需要他便学会了打炉石传说。但是传统的炉石传说对于刚入门的GG学长来说有点复杂,所以他决定自己开发一个简化版

huatian5的博客 834

炉石传说项目c++版本

模仿炉石传说游戏(可以联网),写了一些基本的卡牌制作,对战机制。大部分完善模仿了这款游戏

CCF 201609-3炉石传说 (100分)

(1)题目描述 (2)算法思想 题目看起来很长,但是只要玩过游戏阅读起来很容易理解,充分理解后按照要求模拟即可没有什么难度。 需要注意的一点就是从者的位置,可以选用vector容器存储,方便召唤时的插入以及死亡时的删除。 (3)代码实现 #include<vector> #include<iostream> using namespace std; struct servant { int HP; int ATK; }; struct player { int HeroH

Henimal00的博客 468

射频指纹识别技术:原理、应用与深度学习实现

射频指纹识别(RFFI)是一种基于硬件特征的设备身份认证技术,通过分析无线设备发射信号中的独特硬件特征实现设备识别。其核心原理源于发射器硬件电路的非线性特性,如功率放大器的相位噪声和混频器的非线性失真,这些特征具有难以伪造的特点。在物联网和边缘计算场景中,RFFI技术展现出独特优势,尤其在智能家居和工业物联网中,能有效防止非法接入和设备伪造。深度学习方法的引入进一步提升了RFFI的性能,通过自动特征提取和端到端优化,显著提高了识别准确率。本文详细探讨了RFFI的技术原理、应用场景及实现方法,为相关领域的研究

weixin_30457465的博客 891

【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包

在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。

赖德发的博客 1105

【Java算法题】牛牛冲钻五

牛牛最近在玩炉石传说,这是一款一对一对战的卡牌游戏,牛牛打算努力冲上钻五分段,获得丰厚的天梯奖励。炉石传说的段位可以用星数来表示,具体规则为:若牛牛本场失败,则扣除一星;若牛牛本场获胜,需要看牛牛是否触发了连胜奖励,若牛牛获得了至少三连胜(即本局对局的上一局和上上局都获胜)则获得k星,否则获得一星。现在给出牛牛游玩的n场记录,请你判断牛牛最终的星数和初始星数的差。

m0_60462557的博客 468

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 259

小沙的炉石(二分+思维)

题目 原题链接 问题描述 给定n(1≤n≤109)n(1\leq n\leq 10^9)n(1≤n≤109)张法术攻击牌和m(1≤m≤109)m(1\leq m\leq 10^9)m(1≤m≤109)张法术回复牌,人物初始拥有111点法力值,法力值无上限,再给定询问次数kkk,每次询问会给定初始血量xxx,问通过出牌是否可以恰好消耗完血量(血量恰好扣为000)。 出牌阶段,可以出攻击牌和回复牌,攻击牌的初始伤害值为111,但每出完一张牌,剩余的攻击牌的伤害值会加一。 分析 需要注意的是,一开始虽然给定

qq_52441682的博客 801

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型(附常见问题解决)

本文详细介绍了如何在本地快速部署阿里达摩院开源的Paraformer语音识别模型。通过FunASR工具包,用户可在5分钟内完成环境配置、模型下载与基础识别,并掌握批量处理、性能调优及构建API服务等进阶技巧。文章重点解析了Paraformer的非自回归架构带来的速度优势,并提供了音频格式转换、依赖冲突、显存不足等常见问题的实战解决方案,助力开发者实现高效、离线的语音转写应用。

p1q2r的博客 705

Java对接快递鸟,查询快递物流信息

根据用户输入的订单号,我们的后台识别订单号并根据快递鸟查询快递API接口,实现自动查询的功能。下面是java版本的根据单号查询物流跟踪信息的详细示例代码。只需要下载就可以运行,(自己需要简单的修改)注:登录快递鸟用户管理后台后获得。登录快递鸟用户管理后台。

Roc的博客 960

c语言炉石传说算法设计,CCF-CSP题解 201609-3 炉石传说

模拟。注意随从的编号在\(summon\)和\(attack\)随从死亡时都可能改变。#include using namespace std;struct tNode{int attack;int health;};tNode aPlayer[8];tNode bPlayer[8];int aM = 0, bM = 0;int aHealth = 30, bHealth = 30;int mai...

weixin_36332616的博客 802

风-车-桥耦合随机振动预测框架:从物理模型到高效代理

本文提出了一种风-车-桥耦合随机振动预测的混合框架,结合物理模型与代理模型实现高效计算。该框架的核心数学本质是时变参数-随机激励-高维动力系统,主要解决三大计算难点:自由度规模悬殊、时变特性和随机性传播。系统采用分层解耦-代理加速的技术路线,底层基于物理模型建立车辆运动方程和桥梁运动方程,上层通过深度学习代理实现随机激励到响应的端到端映射。文中详细介绍了随机激励建模(包括脉动风速和路面不平度)、子系统建模、耦合求解方法,并提供了可运行的Python代码实现。该框架可显著提高风-车-桥系统随机振动分析的效率,

huanghm88的专栏 103

week9 CSP201609-3-炉石传说

炉石传说 问题描述: 《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下:   * 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。   * 玩...

qq_43738677的博客 163

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图。

qq_36287830的博客 3105

Nmap源码分析(端口扫描)

端口扫描是Nmap的核心功能,用于确定目标机的端口状态(开放、关闭、过滤等),也为Nmap的服务与版本扫描、OS扫描、脚本扫描提供基本的指引信息。所以,深入理解端口扫描的实现对分析其他的扫描方式很有帮助。 1简单回顾   首先简要回顾一下端口扫描的原理以及命令行选项。 1.1扫描原理   Nmap提供的10多种类型的端口扫描方法,如TCP SYN/ACK/FIN/Xmas/NULL/ Windows/Connect,FTP Bounce, Idle scan, UDP port u...

墨痕诉清风的博客 1598

SDU程序设计思维实践题目总结

山东大学大二下学期程序设计思维与实践课程,平时作业以及训练题目,包含讲解博客,涉及算法,原题链接。部分T1,T2级别的简单题目未收录。

龙征天的博客 3679

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c语言炉石传说算法设计,FZU Problem 2232 炉石传说(匈牙利算法)

Problem Description GG学长虽然并不打炉石传说,但是由于题面需要他便学会了打炉石传说。但是传统的炉石传说对于刚入门的GG学长来说有点复杂,所以他决定自己开发一个简化版的炉石传说。在简化版的炉石传说中:每个随从只有生命值和攻击力,并且在你的回合下,你的每只随从在本回合下只能选择一个敌方随从进行攻击。当两个随从a,b交战时,a的生命值将减去b的攻击力,b的生命值将减去a的攻击力,...

weixin_42127369的博客 474

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【福州大学第十三届程序设计竞赛_重现】D - 炉石传说(二分图最大匹配)

Problem D 炉石传说 Accept: 47    Submit: 224 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description GG学长虽然并不打炉石传说,但是由于题面需要他便学会了打炉石传说。但是传统的炉石传说对于刚入门的GG学长来说有点复杂,所以他决定自己开发一个简化版的炉石传

wyg1997 1157

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【亲测免费】 探索智慧的边界:Hearthrock —— 炉石传说AI引擎

在数字游戏的世界中,炉石传说以其策略性与趣味性深受玩家喜爱。而现在,借助于[Hearthrock](https://yangyuan.github.io/hearthrock),AI研究人员可以在这个平台上展开他们的探索之旅。Hearthrock是一个开放源代码的引擎,旨在让人工智能科学家无需深入游戏编程或掌握技术细节,就能实现自定义的炉石传说AI。 ## 项目简介 Hearthrock的核心...

gitblog_00214的博客 2348

如何用Python在3小时内打造你的第一个炉石传说AI机器人?[特殊字符]

还在为复杂的游戏逆向工程而头疼吗?想用AI技术玩转炉石传说却不知从何入手?今天,我将带你用**Hearthrock引擎**在短短3小时内,打造你的第一个炉石传说AI机器人!无论你是AI研究者、游戏开发者,还是编程爱好者,这篇指南都将为你打开一扇新的大门。 ## 🔍 为什么选择Hearthrock?三大核心优势 **Hearthrock**是一个专门为炉石传说设计的AI引擎,它解决了传统游戏A

gitblog_00640的博客 481

《炉石传说》架构设计赏析(1):游戏启动流程

转自:http://blog.youkuaiyun.com/neil3d/article/details/39104329 前些天看新闻,Unity Awards两项大奖颁给了暴雪的《炉石传说》,这真是对Unity一个再好不过的宣传了——你看,暴雪都开始用Unity了。大家都知道,目前Unity发布的游戏大多都没有对程序集进行混淆、加密,所以作为一个炉石的玩家&Unity的初学者,自然不能错

郭佳 1839

炉石传说 C# 设计文档(序)

经过3个月的开发,有很多感触。 以前一直以为技术是开发成败的第一因素,现在发现,等到你代码写的时间够长,经验够丰富,什么功能都能随手完成,对于业务的分析能力变成了第一位。 炉石山寨版的BS版本用到的HTML5的SVG,我看了一个下午的教程,借鉴以前GUI+和HTML的经验,很快就能写点东西出来了。 WebSocket,Github上找了一个开源的C#项目,通讯这块也是几个小时就搞定了。Jav...

weixin_33705053的博客 182

炉石传说分析报告

炉石传说分析报告前言1、游戏系统架构2、核心玩法核心玩法机制核心玩法分析3、卡牌收集收集途径收集途径分析卡牌设计4、主要系统匹配/天梯模式标准模式狂野模式竞技场冒险模式乱斗模式任务系统结 尾 前言 该文编写于“奥丹姆奇兵”版本。 本报告是本人的第一份游戏分析报告,以下仅为个人对《炉石传说》的核心玩法、游戏系统的分析。本人不才,如有疏漏,希望各位指正。 1、游戏系统架构 《炉石传说》是由暴雪出品的...

qq_37972249的博客 3646

炉石传说爆牌鱼斩杀算法C语言实现

欢迎吐槽我的代码虽然我只有三岁><

superkunn的博客 1561
上一篇: Quartus II 13的下载、安装与学习
下一篇: 算法-程序设计课程week14-元素选择器
trialley
博客等级 码龄9年 62粉丝 217原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值