Artificial Intelligence
Please fill the required field.

код в peinte на тетрис


``` //сетна база let grille;//игровое поле let block;//блоки let posX;//позиция по X let posY;//позиция по Y let gameover; //завершение игры //размещение игры function setup() { createCanvas(700, 730);// размер сцены grille = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]]; block = [ [[1,1,1], [0,1,0]], [[0,2,2], [2,2,0]], [[3,3,0], [0,3,3]], [[8,8], [8,8]], [[0,0,0], [4,4,4], [0,0,4]], [[5,5,5], [5,0,0]], [[0,6,0], [6,6,6]], [[7,0,0], [7,7,7]] ]; posX = 5;//по крдении 5 по X а posY = 0;//по крдении 0 по Y gameover = false;//проверка на окончание игры randomPiece(); //Определение позицыии блока } function draw() { background(51); //цвет фона genererGrille(); //отображение нашей сетки if(frameCount % 15 === 0 || posY === 0) { posY++; //движение блоков по Y } if(posesionValide(posX,posY)==false) { posY--; //определение координаты Y fixer(); //фиксация блоков verification(); //проверка каждой линии и бонусы randomPiece();// определение следующих блоков } afficherBloc(); // заполненные блоки } function fixer() { for(let ligne = 0; ligne < block[blockCourrant].length; ligne++) { for(let colonne = 0; colonne < block[blockCourrant][ligne].length; colonne++) { if(block[blockCourrant][ligne][colonne] != 0) { grille[posY + ligne][posX + colonne] = blockCourrant; //блоки рисуются } } } } function genererGrille() { for(let y = 0; y < 10; y++){ for(let x = 0; x < 10; x++){ if(grille[y][x] === 0 || grille[y][x] === 4) { noFill(); strokeWeight(2); //толщина линии stroke(51); //цвет линии rect(x*66,y*66, 66,66); //размер игрового блока } else if(grille[y][x] === 1) { fill(255,0,0); //красный цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); //позиция игрового блока } else if(grille[y][x] === 2) { fill(0,204,0); //зеленый цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); } else if(grille[y][x] === 3) { fill(0,0,255); //синий цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); } else if(grille[y][x] === 4) { fill(153,51,255); //фиолетовый цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); } else if (grille[y][x] === 5) { fill(255,153,0); //оранжевый цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); } else if (grille[y][x] === 6) { fill(255,255,0); //желтый цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); } else { fill(255,0,153); //розовый цвет strokeWeight(2); stroke(51); rect(x*66,y*66, 66,66); } } } } function posesionValide(posX, posY) { for(let ligne = 0; ligne < block[blockCourrant].length; ligne++) { for(let colonne = 0; colonne < block[blockCourrant][ligne].length; colonne++) { if(block[blockCourrant][ligne][colonne] != 0) { //проверяем, есть ли блоки в сетке if(grille[posY + ligne][posX + colonne] !== 0) { // если блоки не действительные, возвращаем false return false; } } } } return true; } function rotation() { //ротация блока let nextPattern = block[(blockCourrant + 1)%block.length]; //следующий шаблон let nextPoss = 3; //возможный следующий блок if(nextPossible(nextPattern,nextPoss)) { //обозначение на поворот blockCourrant++;//добавление нового блока if(blockCourrant === block.length) { blockCourrant = 0;//возвращение блока в начало } } } function keyPressed(e) { //нажатие на клавишу if(gameover === false) { //если игра не окончена, то продолжаем if(e.keyCode === 37) { // влево if(protection(-1)) { posX--; //позиция по X } } else if(e.keyCode === 39) { //вправо if(protection(1)) { posX++; //эазиция по X } } else if(e.keyCode === 40) { //вниз if(posesionValide(posX,posY+1)){ //проверка на граничные условия Х и если игра не окончена posY++; //позиция по Y } } else if(e.keyCode === 38) { //вверх rotation(); //вращение блока } } } function randomPiece() { //случайный выбор блока blockCourrant = Math.floor(random(0,block.length)); //определение случайного положения блока } function protection(mag) { //блокируем выход блока за пределы сцены for(let ligne = 0; ligne < block[blockCourrant].length; ligne++) { for(let colonne = 0; colonne < block[blockCourrant][ligne].length; colonne++) { if(block[blockCourrant][ligne][colonne] != 0) { let NewpossX = posX + colonne + mag; //добавляем координаты X и mag if(NewpossX < 0 || NewpossX > 9) { //условия для блоков вне сцены return false; } } } } return true; } function nextPossible(nextPattern, nextPoss) { //следующий блок for(let ligne = 0; ligne < nextPattern.length; ligne++) { for(let colonne = 0; colonne < nextPattern[ligne].length; colonne++) { if(nextPattern[ligne][colonne] != 0) { let nextMODEL = posX + colonne + nextPoss; if(protection(-nextPoss) === false) { return false; } if(nextMODEL < 0 || nextMODEL > 9) { return false; } } } } return true; } function verification() { //проверка линий let compt = 0; //счетчик строк for(let ligne = 0; ligne < grille.length; ligne++) { let remplie = true; //устанавливаем значение true for(let colonne = 0; colonne < grille[ligne].length; colonne++) { if(grille[ligne][colonne] === 0) { //если в ней находятся 0, то ложь remplie = false;//перезаписываем переменную на false } } if(remplie === true) { //если линия заполнена compteur++;//каждая линия будет добавляться и записываться в переменную for(let temp = ligne; temp > 1; temp--) { for(let colonne = 0; colonne < grille[temp].length; colonne++) { grille[temp][colonne] = grille[temp-1][colonne]; //если линия еще не заполнена цвет ставится } } } }