2017-05-10 14 views
-1

どのように別の関数win内のローカル変数treasureXを使用するには? win関数では、プログラムはboard[6][t]で動作しますが、treasureXでは動作しません。 treasureX変数はグローバルですが、コードは意図したとおりに機能しません。ここでC++の別の関数でローカル変数を使用するには?

#include <iostream> 
#include <random> 
#include <ctime> 

char board[8][8]; 
char treasureX; 
int t; 

void Board() { 
    for (int x = 1; x < 7; x++) { 
     for (int y = 1; y < 7; y++) { 
      board[x][y] = '.'; 
     } 
    } 
} 


void treasureSpawn() { 
    t = rand() % 6 + 1; 
    board[6][t] = 'X'; 
    treasureX = board[6][t]; 
} 

int displayBoard() { 
    for (int x = 0; x<8; x++) { 
     for (int y = 0; y<8; y++) { 
      std::cout << board[x][y]; 
      if (y == 7) { 
       std::cout << std::endl; 
      } 
     } 
    } 
    return 0; 
} 

char playerPosition; 

char playerSpawn() { 
    int randomY; 
    randomY = rand() % 6 + 1; 
    board[1][randomY] = 'G'; 
    playerPosition = board[1][randomY]; 
    return playerPosition; 
} 

int movement() { 
    char move; 
    std::cout << "Use WASD keys to move." << std::endl; 
    std::cin >> move; 
    for (int x = 1; x<7; x++) { 
     for (int y = 0; y<8; y++) { 
      if (board[x][y] == 'G') { 
       board[x][y] = '.'; 
       if (move == 'W' || move == 'w') { 
        return board[x - 1][y] = 'G'; 
       } 
       else if (move == 'A' || move == 'a') { 
        return board[x][y - 1] = 'G'; 
       } 
       else if (move == 'D' || move == 'd') { 
        return board[x][y + 1] = 'G'; 
       } 
       else if (move == 'S' || move == 's') { 
        return board[x + 1][y] = 'G'; 
       } 
       else { 
        std::cout << "Wrong key!" << std::endl; 
        movement(); 
       } 
      } 
     } 
    } 
    return 0; 
} 

int win() { 
    if (treasureX == 'G') { // when player arrives at 'X' this function does not execute. Works if I put 'board[6][t]' instead of 'treasureX'. 
     std::cout << "You win" << std::endl; 
     return 0; 
    } 
} 

int main() { 
    srand(time(0)); 
    Board(); 
    playerSpawn(); 
    outOfBounds(); 
    treasureSpawn(); 
    displayBoard(); 
    do { 
     movement(); 
     checkIf(); 
     displayBoard(); 
    } while (win() != 0); 
} 
+2

'treasureX'はローカル変数ではありません。これはグローバル変数です。 – cdhowie

+1

グローバル変数は使用しないでください。あるクラスでそれを持つことができ、他の場所からのゲッターを使ってアクセスすることができます。 –

+0

私はスペア・ミーです。私はC++を使っていて、私は自分の記憶に挑戦しようとしています。 –

答えて

0

変更を実行したときに、より正確int movement()機能に、したがってそれらの値はtreasureSpawnがあると異なる変更さ

const char & treasureSpawn() { 
    t = rand() % 6 + 1; 
    board[6][t] = 'X'; 
    return board[6][t]; 
} 

プレーヤーが上に移動するとtreasureXの値が変化します

+0

フィードバックいただきありがとうございます。私は修正する必要がある、私はポインタ、スタック、クラス、構造体などについてすべて忘れてしまった –

0

TreasureXは機能​​にinintialized変数であり、その値はプログラム全体に変更(そして、常に'X'こと)されていません。 しかし、board[6][t]は、プログラムの実行中のプログラムがtreasureXの定義はconst char & treasureX = treasureSpawn();こととする機能win()

関連する問題