Witajcie, mam za zadanie napisać grę typu lights out. Wymagane w zadaniu jest aby po wciśnięciu przycisku "pomoc", "podpowiedzi" czy "help" (nieistotne) program pokazywał jak wciskać klawisze aby rozwiązać dany schemat. Sam core programu napisałem i wygląda to tak:
Problem mam z tym jak uzyskac te podpowiedzi - jakiego algorytmu użyć. Będę wdzięczny za jakąkolwiek pomoc :3
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="Remigiusz Drobinski">
<title>Lights Out</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
<script type="text/javascript" src="script.js" charset="utf-8" defer></script>
</head>
<body onload="generateButtons(defaultRowSize, defaultColumnSize); randomizeLights(); addControls();">
<footer>
Autor: Remigiusz Drobinski
</footer>
</body>
</html>
[defaultRowSize, defaultColumnSize] = [9, 9];
function generateButtons(rowSize, columnSize) {
var rowId, columnId;
var buttonObject;
for(rowId = 0; rowId < rowSize; rowId++) {
for(columnId = 0; columnId < columnSize; columnId++) {
buttonObject = document.createElement("input");
buttonObject["type"] = "button";
buttonObject["id"] = rowId*columnSize + columnId;
buttonObject["className"] = "lightOn";
buttonObject.addEventListener("click", function(){clickButton(parseInt(this.id))});
document.body.appendChild(buttonObject);
}
document.body.appendChild(document.createElement("br"));
}
}
function deleteButtons(rowSize, columnSize) {
for(var i=0; i < rowSize*(1+columnSize); i++)
document.body.removeChild(document.body.lastChild);
}
function clickButton(buttonId) {
var adjacentObjectArray = [document.getElementById(buttonId)];
var leftId = buttonId - 1;
var rightId = buttonId + 1;
var upId = buttonId - defaultColumnSize;
var downId = buttonId + defaultColumnSize;
if((leftId+1)%defaultColumnSize != 0)
adjacentObjectArray.push(document.getElementById(leftId));
if(rightId%defaultColumnSize != 0)
adjacentObjectArray.push(document.getElementById(rightId));
if(upId >= 0)
adjacentObjectArray.push(document.getElementById(upId));
if(downId < defaultRowSize * defaultColumnSize)
adjacentObjectArray.push(document.getElementById(downId));
for(let adjacentObject of adjacentObjectArray)
adjacentObject["className"] = (adjacentObject["className"] == "lightOn") ? "lightOff" : "lightOn";
}
function randomizeLights() {
for(var i=0; i<defaultRowSize*defaultColumnSize; i++)
clickButton(Math.floor(Math.random()*defaultRowSize*defaultColumnSize));
}
function addControls() {
document.body.addEventListener("keydown",
function(e) {
if(e.key == "r" || e.key == "R") randomizeLights();
}
);
}
input[type="button"] {
width: 80;
height: 80;
}
.lightOn {
background-color: white;
}
.lightOff {
background-color: black;
}