写一个js代码 随机100个数字 0-2 10*10 矩阵 每行有10个 有10行 每行不能有三个相邻 每列也不能三个相邻
看看ai写的 
function generateMatrix() {
const size = 10; // 10x10 矩阵
const matrix = Array.from({ length: size }, () => Array(size).fill(0));
function isValid(matrix, x, y, value) {
// 检查行的三个连续数字
if (y >= 2 && matrix[x][y - 1] === value && matrix[x][y - 2] === value) return false;
if (y < size - 2 && matrix[x][y + 1] === value && matrix[x][y + 2] === value) return false;
if (y >= 1 && y < size - 1 && matrix[x][y - 1] === value && matrix[x][y + 1] === value) return false;
// 检查列的三个连续数字
if (x >= 2 && matrix[x - 1][y] === value && matrix[x - 2][y] === value) return false;
if (x < size - 2 && matrix[x + 1][y] === value && matrix[x + 2][y] === value) return false;
if (x >= 1 && x < size - 1 && matrix[x - 1][y] === value && matrix[x + 1][y] === value) return false;
return true;
}
for (let x = 0; x < size; x++) {
for (let y = 0; y < size; y++) {
let validValues = [0, 1, 2]; // 候选值
let placed = false;
while (validValues.length > 0) {
const value = validValues.splice(Math.floor(Math.random() * validValues.length), 1)[0];
if (isValid(matrix, x, y, value)) {
matrix[x][y] = value;
placed = true;
break;
}
}
if (!placed) {
// 回溯(重新生成当前行)
matrix[x].fill(0);
y = -1; // 重新开始当前行
}
}
}
return matrix;}
// 打印结果
const matrix = generateMatrix();
matrix.forEach(row => console.log(row.join(" ")));
AI 写的不行 不会直接卡的黑屏哪里
给你一个思路,生成全部是3-5个横列相邻的矩阵,就是可以全部消掉的数据,然后在随机偏位其中一个打乱
getBlockIndex(row : number , column : number){
let arr : number[] = [1,2,3,4];
let count;
let index;
if(row != 0){
count = 0;
index = 0;
for(let i = row - 1; i >= 0; -- i){
//向下找
if(this.checkArr[i][column] != 0){
if(index == 0){
count ++ ;
index = this.checkArr[i][column];
}else{
if(this.checkArr[i][column] == index){
count ++ ;
}else{
break;
}
}
}else{
break;
}
}
if(count >= 2){
arr.splice(arr.indexOf(index),1);
}
}
if(column != 0){
count = 0;
index = 0;
for(let i = column - 1; i >= 0 ; -- i){
if(this.checkArr[row][i] != 0){
if(index == 0){
count ++ ;
index = this.checkArr[row][i];
}else{
if(this.checkArr[row][i] == index){
count ++ ;
}else{
break;
}
}
}else{
break;
}
}
if(count >= 2){
arr.splice(arr.indexOf(index),1);
}
}
return arr;
}
自己写的三消生成逻辑,可以参考一下
统一回复啊 解决了
首先 创建一个数组0,1,2
我就是简单判断 上两个的 如果是一样的会删除 在数组中相同的
只要判断上和左就可以也是 i-1,i-2 和i-10 ,i-20