2016-02-03 31 views
0

我想製作非圖形(文本)C++遊戲(使用n,s,w,e移動角色,並描述每個位置)。位置將是一個對象的數組(將在這個數組中有位置描述和其他信息)。我已經開始製作這個遊戲了,但是我有一個問題:是否可以製作尺寸爲x的陣列 - 從-100到100,z - 從-100到100?如果不可能,還有其他方法可以做到嗎? (我不想在4個角之一的[0] [0]的位置,但在中間。)如何使單元格編號從負數到正數?

+1

轉換地圖座標陣列的座標:MapX控件+ 100,+ mapY 100 – Donnie

+0

是的,它是可能的。嘗試幾種方法,然後回過頭來解決任何問題。 – AndyG

回答

1

陣列可以僅具有陽性指數:

Location loc[201][201]; 

定義返回一個的Funktion您想要的位置:

Location getLocation(int xCoord, int yCoord) 
{ 
    if (abs(x)>100 || abs(y)>100) 
    throw std::invalid_argument("value out of range"); 
    return loc[xCoord+100][yCoord+100]; 
} 

然後你就可以通過調用函數來獲取位置getLocation(x,y)

+2

恩,這是無效的C++。 –

+1

如果位置是可複製的類,則它是有效的代碼。但一定要檢查xCoord和yCoord是否合法,並且這僅支持範圍[-100,+ 99]。 –

0

一個常見的(而粗略的)方法是做這樣的事情(例如爲21×21板):

#include <iostream> 

using namespace std; 

int main() 
{ 
    typedef int (*board_ptr)[21]; 

    int board_data[21][21]; 
    board_ptr board = (board_ptr)&board_data[10][10]; 

    for (int i = -10; i <= 10; ++i) 
     for (int j = -10; j <= 10; ++j) 
      board[i][j] = 0; 
    board[-10][-10] = 1; 
    board[-10][10] = 2; 
    board[10][-10] = 3; 
    board[10][10] = 4; 
    board[0][0] = 5; 
    for (int i = -10; i <= 10; ++i) 
    { 
     for (int j = -10; j <= 10; ++j) 
     { 
      cout << " " << board[i][j]; 
     } 
     cout << endl; 
    } 
    return 0; 
} 

這就產生了一個正常的21×21陣列,但然後將其還創建了一個指針,該被初始化在真實陣列的中心指向一個假陣列。然後,您可以使用這個假指針,就好像它是一個索引範圍從-10到+10(含)的真實數組。

LIVE DEMO

相關問題