gpt4 book ai didi

c++ - 难以理解功能

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:11 25 4
gpt4 key购买 nike

基本上我有一张藏宝图,用户正在尝试寻找宝藏。藏宝图应该是用二维数组打印的。我们应该调用函数来随机化宝藏和开始位置,用户的每个回合等等。

我不知道如何在我的函数中声明我的变量。我每次编写函数时都必须重新声明,但我的教授说我应该只声明一次?

教授写的主要功能:

int main() 
{
char Map[ROWS][COLS];
int TreasureR, TreasureC;
int StartR, StartC;
int Row, Col;
int NumMoves = 0; // The number of player moves
bool Winner = false;
bool Quit = false;

cout << "This homework was written by Savanna Bruce.\n";
cout << "You are stranded on a desert island with no idea how to survive.\n";
cout << "Fortunately, there are tools to survive and a hidden Treasure!\n";
cout << "Find the Treasure!!!\n\n\n";


// Seed the random number variable
srand (time(NULL));

// Start a New Game or Continue an Old one
InitMap (Map);

// Add code to place the treasure and start
Random();
// Add code to play the game
PlayTurn();
// Print the Map, hide the Treasure
PrintMap(Map, false);

return 0;
}

我目前拥有的功能:

// Name: InitMap
// Description: Initialize the Map with all EMPTY cells
// Return: Nothing
// ---------------------------------------------------
void InitMap(char Map[][COLS])
{
Map = 0;
}
// ---------------------------------------------------
void Random()
{
int TreasureC, TreasureR;
int StartC, StartR;
int Col, Row;

// Set the location of the treasure chest
TreasureC = rand() % COLS; // set to a value in range 0..XDIM-1
TreasureR = rand() % ROWS; // set to a value in range 0..YDIM-1

// Set the starting location of the player
StartC = rand() % COLS; // set to a value in range 0..XDIM-1
StartR = rand() % ROWS; // set to a value in range 0..YDIM-1
Col = StartC;
Row = StartR;
}

void PrintMap(const char Map[][COLS], const bool showTreasure)
{
int TreasureR = 0;
int TreasureC = 0;

for (int row = 0; row < ROWS; row++)
{
for (int col = 0; col < COLS; col++)
{
if ((row == TreasureR && col == TreasureC) && showTreasure == true)
cout << TREASURE;
else
cout << EMPTY;
}
cout << endl;
}

}

全局变量:

const int FAST = 3;
const int SLOW = 5;
const int COLS = 20; // For MAP Size
const int ROWS = 10; // For MAP Size
const int MAX_ROW = ROWS - 1; // valid locations are 0..ROWS - 1
const int MAX_COL = COLS - 1; // valid locations are 0..COLS - 1
const string FILENAME = "Map.txt"; // File to save/load Map from

// Cell types - The Map can have any of these
// characters at a location on a Map.
const char START = 'S';
const char PLAYER = 'P';
const char TREASURE = 'T';
const char EMPTY = '*';
const char VISITED = 'X';

谁能告诉我这些是否正确以及我是否应该一遍又一遍地声明我的变量?

最佳答案

你的问题是你要重新声明

int TreasureR, TreasureC; 
int StartR, StartC;
int Row, Col;

mainRandom

只需通过引用将这些值传递给 Random() 即可解决您的问题:

void Random(int& TreasureC, int& TreasureR, int& StartC, int& startR, int& Col, int& Row)
{
// Set the location of the treasure chest
TreasureC = rand() % COLS; // set to a value in range 0..XDIM-1
TreasureR = rand() % ROWS; // set to a value in range 0..YDIM-1

// Set the starting location of the player
StartC = rand() % COLS; // set to a value in range 0..XDIM-1
StartR = rand() % ROWS; // set to a value in range 0..YDIM-1
Col = StartC;
Row = StartR;
}

对您的 PrintMap 函数执行相同的操作。

您应该查看有关 understanding variable scope 的教程.也就是说,当您声明一个变量时,它只会“存活”一定的时间(通常在 {} 之间)。当您在 main 中声明这些变量时,它们并不会神奇地存在于您的函数中。您应该声明一次,然后将它们传递给需要它们的函数。

您的 InitMap() 函数实际上应该遍历矩阵中的所有单元格并将它们设置为某个值。 Map = 0 不会那样做。您需要像在 PrintMap

中那样遍历行和列

最后,在 Random() 中,虽然您确实在计算行和列,但实际上并没有在 Map 中“放置”任何内容。按照你做事的方式,你实际上并不需要 Map 数据结构;你可以只选择一个宝藏的行和列,然后按原样使用你的 PrintMap() 函数。

关于c++ - 难以理解功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com