2014-05-09 137 views
0

我正在使用數組來存儲我創建的基於文本的遊戲的位置數據。更改數組字符串的值

我試圖編輯數組中的每個字符串,例如,如果我的數組是['___','_1_','___']1是字符而_是空格;也保留我在另一個陣列中的角色位置([1,1]);如果我嘗試移動角色1並用散列替換他的位置(#),那麼它就不起作用。我可以編輯位置數組,但沒有別的。

map[pos[1] - 1][pos[0]] = '1'; 
map[pos[1]][pos[0]] = '#'; 
pos[1] = pos[1] - 1; 

這就是我現在使用的,但只有第三行實際工作。如果我運行一次,地圖數組仍然是['___','_1_','___'],但是我的位置數組會變爲[1,0]

什麼是最好的方式來改變地圖的價值,以適應我的需求?

+0

我開始回答這個問題,但是我對你的map變量感到困惑。這可能是一個非常糟糕的名字,因爲它經常用於'map()'數組方法。 –

+0

請你澄清問題,你正在使用的問題和代碼是什麼意思使用pos [1] -1 ??? – ProllyGeek

+0

@JezenThomas錯誤的名字是的,但它的準確性與我可以做到的一樣。 – Spedwards

回答

2

最好的辦法是分離問題,以防止獲得c onfused。首先,能夠在給定位置替換字符串中的字符。 (from elsewhere on so

String.prototype.replaceAt=function(index, character) { 
    return this.substr(0, index) + character + this.substr(index+character.length); 
} 

接着,做,在一個特定的ASCII陣列的能力。

replaceInAsciiMap = function(array, row, index, character) { 
    array[row] = array[row].replaceAt(index, character); 
} 

現在您可以添加同時更新整數數組和ascii數組,新舊職位等的函數。總結:原子第一,然後是分子,然後是蛋白質,然後是細胞,然後是有機體...

2

問題是字符串不能被修改。您必須改爲創建一個新字符串。

數組表示法可能會引起誤解,charAt表示法顯然是隻讀的。

然後,如果你想改變一個字符串的給定的字符,你可以使用

function changeStr(str, pos, newChar) { 
    return str.substring(0, pos) + newChar + str.substring(pos+1); 
} 

使用方法如下:

var map = ['___','_1_','___'], pos = [1,1,]; 
map[pos[1] - 1] = changeStr(map[pos[1] - 1], pos[0], '1'); 
map[pos[1]]  = changeStr(map[pos[1]],  pos[0], '#'); 
pos[1] = pos[1] - 1; 

在你的情況,因爲要修改字符串在陣列中,你可以簡化以上到

function changeArrStr(arr, key, pos, newChar) { 
    arr[key] = arr[key].substring(0, pos) + newChar + arr[key].substring(pos+1); 
} 
var map = ['___','_1_','___'], pos = [1,1,]; 
changeArrStr(map, pos[1] - 1, pos[0], '1'); 
changeArrStr(map, pos[1],  pos[0], '#'); 
pos[1] = pos[1] - 1; 
+0

http://fiddle.jshell.net/prollygeek/8px24/,這是真的 – ProllyGeek