2014-05-09 91 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