TypeError:无法分配给字符串的只读属性';0';
我正在开发一款终端游戏。游戏场地被字段(░)和洞(O)占据
该字段是随机生成的,但我还希望确保路径字符(*)始终位于该字段的左上角(由一定数量的数组组成)
为此,我将第一个数组的第一个索引分配给了pathCharacter(*)。请参阅下面的代码: 数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">String.prototype.replaceAt = function(index, replacement) {
return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}
hat = '^';
hole = 'O';
fieldCharacter = '░';
pathCharacter = '*';
class Field {
constructor(field) {
this._field = field;
}
print() {
this._field = field.join('
');
console.log(this._field.replace(/,/g, ''))
}
static generateField(height, width) {
let finalArray = []
for (let i = 0; i < height; i++) {
finalArray.push(fieldCharacter.repeat(width));
}
for (let i = 0; i < finalArray.length; i++) {
let randomHoleX = Math.floor(Math.random() * width);
let randomHoleY = Math.floor(Math.random() * height);
finalArray[randomHoleY] = finalArray[randomHoleY].replaceAt(randomHoleX, hole);
}
// what I tried to do
finalArray[0][0] = pathCharacter;
return finalArray.join('
').replace(/,/g, '');
}
}
console.log(Field.generateField(5, 10));
输出内容:类型错误:无法分配给字符串‘░░O░░░░░░O’的只读属性‘0’
我想要的示例:
*░░O░░░░░O
░░░░░░░░░░
░░░░O░░░░░
░░░░░░░░░░
░░░O░O░░░░
解决方案
有许多我需要解决的问题。
- 首先,您确实不应该向
String.prototype
添加您自己的方法;如果您想要任何类型的可维护性,那么这种方法就是疯狂的。 - 第二,您的
print()
方法不能工作(它引用隐式全局field
来修改实例字段_field
),但这并不意味着您无论如何都在使用它。 - 您可能应该使用数组数组而不是字符串,以减少操作的笨拙。
- 您不需要
Field
的类:
const hat = "^";
const hole = "O";
const fieldCharacter = "░";
const pathCharacter = "*";
function generateField(height, width) {
const field = [];
for (let y = 0; y < height; y++) {
field.push(Array.from(fieldCharacter.repeat(width)));
}
for (let y = 0; y < field.length; y++) {
const randomHoleY = Math.floor(Math.random() * height);
const randomHoleX = Math.floor(Math.random() * width);
field[randomHoleY][randomHoleX] = hole;
}
field[0][0] = pathCharacter;
return field;
}
function printField(field) {
for (let y = 0; y < field.length; y++) {
console.log(field[y].join(""));
}
}
const field = generateField(5, 10);
printField(field);
此输出
*░░░░░░░░░
░░O░░░░░░░
░░░░O░░░░░
░░░░░░░░░░
O░O░░░O░░░
相关文章