- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的 C++ 类开发 Dungeon Crawler,在更新/显示代表我的角色的数组元素时遇到了问题。 ‘up’、‘left’、‘right’功能正常(IE,x/y位置对应的数组元素增加或减少1并准确显示更新),但‘down’移动导致字符消失。我试过改变角色,删除覆盖旧位置的代码,以及其他一些事情来确定到底发生了什么,但都无济于事。非常感谢任何反馈(请注意,checkWin 功能尚未完成)。
#include <iostream>
#include <iomanip>
#include <cctype>
#include <cstdlib>
#include <ctime>
using namespace std;
const int max_row = 10;
const int max_col = 10;
const char character = 'O', treasure = 'X', traps = 'T', space = '.';
void showInstructions();
void createDungeon(char dungeon[max_row][max_col], int max_col);
void displayDungeon(char dungeon[max_row][max_col], int max_col);
void getMove(char& movement, char dungeon[max_row][max_col],int max_col);
void checkMove(char& movement, char dungeon[max_row][max_col], int max_col);
void updateDungeon(char& movement, char dungeon[max_row][max_col], int max_col);
int checkCharPositionY(char dungeon[max_row][max_col], int max_col);
int checkCharPositionX(char dungeon[max_row][max_col], int max_col);
void checkWin (char dungeon[max_row][max_col], int max_col, bool& playing);
string getDirection(char movement);
int main()
{
bool playing = true;
int character_pos, trap_pos[3], treasure_pos;
char movement;
char dungeon[max_row][max_col] = {{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.'}};
showInstructions();
createDungeon(dungeon, max_col);
while (playing) {
displayDungeon(dungeon, max_col);
getMove(movement, dungeon, max_col);
checkMove(movement, dungeon, max_col);
updateDungeon(movement, dungeon, max_col);
checkWin(dungeon, max_col, playing);
}
}
void createDungeon(char dungeon[][max_col], int max_col) {
int trap_count = 0, srand(time(0));
dungeon[0][0] = character;
while(trap_count < 3) {
if(dungeon[rand() % 10][rand() % 10] == space) {
dungeon[rand() % 10][rand() % 10] = traps;
trap_count++;
}
}
if (dungeon[rand() % 10][rand() % 10] == space) {
dungeon[rand() % 10][rand() % 10] = treasure;
}
}
void showInstructions() {
cout << "Hello and welcome to your doom! Whether by fate or fiat, you have entered the \n";
cout << "dungeon. To win, make your way to the treasure. If you find a trap, you will \n";
cout << "instead find death. With treasure comes release and fortune. Your character is \n";
cout << "represented with 'O', traps with 'T', and the treasure with 'X'. You will always";
cout << "begin in the upper left hand corner of the maze. Good luck - you'll need it. \n";
cout << "\nTo navigate the dungeon, use the 'W','A','S', and 'D' keys as shown below:\n\n";
cout << setw(39) << "^\n";
cout << setw(40) << "[W]\n";
cout << setw(46) << " < [A] [S] > \n";
cout << setw(40) << " [D]\n";
cout << setw(39) << "v\n";
}
void displayDungeon(char dungeon[max_row][max_col], int max_col) {
for(int row = 0; row < max_col; row++) {
cout << endl;
cout << setw(23);
for(int col = 0; col < max_col; col++) {
cout << " " << dungeon[row][col] << " ";
}
}
}
void getMove(char& movement, char dungeon[max_row][max_col], int max_col) {
cout << "\n\nPick a direction for your character to move.\n";
cin >> movement;
while (movement != 'w' && movement != 'a' && movement != 's' && movement != 'd' &&
movement != 'W' && movement != 'A' && movement != 'S' && movement != 'D' ) {
cin.clear();
cout << "That was not a valid selection. Please navigate using W, A, S, or D.\n";
cin >> movement;
}
if (movement == 'w') {
movement = 'W';
}
else if (movement == 'a') {
movement = 'A';
}
else if (movement == 's') {
movement = 'S';
}
else if (movement == 'd') {
movement = 'D';
}
}
void checkMove(char& movement, char dungeon[max_row][max_col], int max_col) {
while (movement == 'W' && checkCharPositionY(dungeon, max_col) == 0) {
cin.clear();
cout << "\nYou cannot exit the dungeon that way! Try again. \n";
getMove(movement, dungeon, max_col);
}
while (movement == 'S' && checkCharPositionY(dungeon, max_col) == 9) {
cin.clear();
cout << "\nYou cannot exit the dungeon that way! Try again. \n";
getMove(movement, dungeon, max_col);
}
while (movement == 'A' && checkCharPositionX(dungeon, max_col) == 0) {
cin.clear();
cout << "\nYou cannot exit the dungeon that way! Try again. \n";
getMove(movement, dungeon, max_col);
}
while (movement == 'D' && checkCharPositionX(dungeon, max_col) == 9) {
cin.clear();
cout << "\nYou cannot exit the dungeon that way! Try again. \n";
getMove(movement, dungeon, max_col);
}
cout << "You moved " << getDirection(movement) << endl;
}
void updateDungeon(char& movement, char dungeon[max_row][max_col], int max_col) {
switch (movement) {
case 'W':
for (int i = 0; i < max_col; i++) {
for(int j = 0; j < max_col; j++) {
if (dungeon[i][j] == 'O') {
dungeon[i][j] = '.';
dungeon[i - 1][j] = 'O';
break;
}
}
}
break;
case 'A':
for (int i = 0; i < max_col; i++) {
for(int j = 0; j < max_col; j++) {
if (dungeon[i][j] == 'O') {
dungeon[i][j] = '.';
dungeon[i][j - 1] = 'O';
break;
}
}
}
break;
case 'S':
for (int i = 0; i < max_col; i++) {
for(int j = 0; j < max_col; j++) {
if (dungeon[i][j] == 'O') {
dungeon[i+1][j] = 'O';
dungeon[i][j] = '.';
break;
}
}
}
break;
case 'D':
for (int i = 0; i < max_col; i++) {
for(int j = 0; j < max_col; j++) {
if (dungeon[i][j] == 'O') {
dungeon[i][j] = '.';
dungeon[i][j + 1] = 'O';
break;
}
}
}
break;
default:
break;
}
}
string getDirection(char movement) {
string direction;
if (movement == 'W' || movement == 'w') {
direction = "up.";
}
else if (movement == 'A' || movement == 'a') {
direction = "left.";
}
else if (movement == 'D' || movement == 'd') {
direction = "right.";
}
else if (movement == 'S' || movement == 's') {
direction = "down.";
}
return direction;
}
int checkCharPositionY(char dungeon[max_row][max_col], int max_col) {
for (int row = 0; row < max_col; row++) {
for(int col = 0; col < max_col; col++) {
if (dungeon[row][col] == 'O') {
return row;
}
}
}
}
int checkCharPositionX(char dungeon[max_row][max_col], int max_col) {
for (int row = 0; row < max_col; row++) {
for(int col = 0; col < max_col; col++) {
if (dungeon[row][col] == 'O') {
return col;
}
}
}
}
void checkWin (char dungeon[max_row][max_col], int max_col, bool& playing) {
int treasurepos[max_row][max_col], trappos[max_row][max_col];
for (int i = 0; i < max_col; i++) {
for(int j = 0; j < max_col; j++) {
if (dungeon[i][j] == 'X') {
treasurepos[i][j] = dungeon[i][j];
}
}
}
for (int i = 0; i < max_col; i++) {
for(int j = 0; j < max_col; j++) {
if (dungeon[i][j] == 'T') {
trappos[i][j] = dungeon[i][j];
}
}
}
}
编辑:这个问题似乎与尽管有 break 语句但它没有退出循环这一事实有关。陷阱将在索引 0 中生成,如果我尝试向下移动,陷阱将被覆盖。更改 '.' @ 或另一个字符的字符将表明它一直在通过索引 0 写入它。
最佳答案
发生的情况是,一旦找到正确的位置,您就不会跳出循环。因此,对于 updatedDungeon()
中的 S
情况,当您找到它时,您将 O
移动到 1 个位置。在下一次循环中,您再次找到 O
并再次移动它。在下一次循环中,您再次找到 O
并再次移动它。等。您需要在找到并移动角色后立即停止循环。
另一种可能更好的移动角色的方法可能是将其位置保留在一个单独的变量中,更新该变量,然后使用新信息重新绘制棋盘。
关于C++:Dungeon Crawler - 更新数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912676/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我最近在准备面试时读了一本书,并遇到了以下问题: 当你的爬虫遇到一个蜜 jar 并生成一个无限子图供你漫步时,你会怎么做? 我想找到这个问题的一些解决方案。就我个人而言,我会采用某种形式的深度有限搜索
我需要抓取一千个共享相同结构的网站:它们都有一个菜单、一个标题、一些文本和一个评级,很像一个博客。不幸的是,它们的编码也非常不同,有些是手动的,所以我不能重新利用 CSS 选择器,甚至可能不依赖它们。
我正在尝试抓取大约一千个网站,其中我只对 html 内容感兴趣。 然后我将 HTML 转换为 XML 以使用 Xpath 进行解析以提取我感兴趣的特定内容。 我已经使用 Heritrix 2.0 爬虫
我想从某些网站抓取有用的资源(如背景图片..)。这不是一项艰巨的工作,尤其是在一些很棒的项目(如scrapy)的帮助下。 这里的问题是我不仅只想抓取这个网站一次。我还想保持我的爬网长时间运行并爬网更新
我是 Nutch 的新手。我需要抓取网页(比如几百个网页),读取抓取的数据并进行一些分析。 我点击了链接 https://wiki.apache.org/nutch/NutchTutorial (并且
我要爬一个网站以获取一些信息。它大约有 170 000 多页。那么,我可以提出多少请求?我要提取直到 HTML 并获取一些信息。这是一个已经很受欢迎的网站,所以我认为如果只是快速浏览所有页面它不会死.
我正在构建一个小型应用程序,它将抓取内容不断增长的站点(如在 stackoverflow 上),不同之处在于一旦创建的内容很少被修改。 现在,在第一遍中,我抓取了站点中的所有页面。 但接下来,该站点的
我在比较这四个 Nutch/Heritrix/OpenPipeLine/Apache Tika 哪一个最好?各自的优缺点是什么? 我想要一些可扩展的爬虫,它可以爬取网站列表,并且可以根据需要进行修改。
正如标题所说,我一直在努力爬取文章,剩下的就是作者。 下面是我的代码,使用pyquery编译段落和作者,只有作者返回空白 目标站点:http://business.transworld.net/153
我正在为旅游搜索引擎考虑一些想法,我想知道这些网站是如何获取它们的源数据的。他们是否从航空公司主页上抓取了所有内容?考虑到航空公司等的数量,这似乎是一项艰巨的工作。 是否有每个航空公司也遵守的 API
我正在测试一个新的网络爬虫,我正在寻找一些可能会绊倒它的好网站(重定向、框架、任何东西)。有人知道一些非常复杂的网站,或者可能会出错的网站吗?谢谢 最佳答案 如果你在 Alexa 前 1000 名左右
有一种方法可以从 google 的索引中排除完整的页面。但是有没有办法专门从谷歌的抓取中排除网页的某些部分?例如,排除通常包含不相关内容的侧边栏? 最佳答案 您可以使用 IFRAME 标记包含要在 G
给定一个起始 URL start (以及关于可允许域等的一些规则)我想生成一个有向图(V,E),其中 V 中的节点是否可以从 start 访问页面,并且有一条弧线 (u,v)在 E每当页面上有超链接时
我正在开发一个Web爬网程序,该爬网程序可以为不想被索引的网站编制索引。 我的第一次尝试: 我编写了一个C#搜寻器,它遍历每个页面并下载它们。 这导致我的IP在10分钟内被其服务器阻塞。 我将其移至A
我想知道用于抓取和分析网站的最佳 eopen-source 库是什么。一个例子是爬虫属性(property)机构,我想从多个站点获取信息并将它们聚合到我自己的站点中。为此,我需要抓取网站并提取属性(p
Builtwith.com 和类似服务提供(收费)使用特定技术(如 SalesForce 或 NationBuilder)构建的域列表。有一些我感兴趣的技术 builtwith 没有扫描,可能是因为它
我正在使用scrapy 来抓取站点上的多个页面。 变量 start_urls用于定义要抓取的页面。 我最初会从第一页开始,从而定义 start_urls = [1st page]在文件中 exampl
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我有一个实现无限滚动的网站:当用户到达页面末尾时,会进行 AJAX 调用并将新内容附加到页面底部。然而,这意味着搜索爬虫无法获取第一个“分页符”之后的所有内容。例如,我有一个页面列出了所有带有“信息图
我是一名优秀的程序员,十分优秀!