2D линкор игры демо.Предложения и логические исправления приветствуются - PullRequest
0 голосов
/ 17 октября 2018

Я начинающий программист.Я использовал генератор случайных чисел для размещения кораблей.Размещение кораблей требует нескольких настроек.Будет использовать петли, чтобы использовать все доступное пространство, а также включать вертикальное размещение.

Пожалуйста, просмотрите мой код ниже и предложите любые изменения или логические исправления.Спасибо.

var rn = 0;
var bx = by = cx = cy = 0;
var guess;
var guesses
var fsunk;
var bhit;
var c1hit;
var userchoices = [];
var battleship = []; //ship position stored in array
var cruiser1 = [];
var sunk = []; //ship status array 0 = floating, 1 = sunk
//var cruiser2 = [];
//var destroyer1 = [];
//var destroyer2 = [];
//var destroyer3 = [];
//var submarine1 = [];
//var submarine2 = [];
//var submarine3 = [];
//var submarine4 = [];

function rng() //Generates Random Numbers
{
rn = Math.floor(Math.random() * 5);
console.log("rn = " + rn);
return rn;
}
function spawn() //uses rng() to get x and y coordinates
{
bx = rng();
by = rng();
cx = rng();
cy = rng();
position();
}
function position() // ship positon generated
{
battleship[0] = ("" + bx + by);
battleship[1] = ("" + bx + (by + 1));
battleship[2] = ("" + bx + (by + 2));
battleship[3] = ("" + bx + (by + 3));
cruiser1[0] = ("" + cx + cy);
cruiser1[1] = ("" + cx + (cy + 1));
cruiser1[2] = ("" + cx + (cy +2));
}
function play() // onclick function
{
console.log("game start");
sunk[0] = 0; //battleship status flag
sunk[1] = 0; //cruiser1 status flag
bhit = 0; //battleship hit counter set to zero
c1hit = 0; //cruiser hit counter set to zero
console.log("sunk array = " + sunk[0] + " " + sunk[1]);
fsunk = 0; //fleet status
spawn();
position();
console.log("battleship coordinates" + battleship);
console.log("cruiser coordinates" + cruiser1);
game();
}
function game()
{
while(fsunk == 0)
{
    if(sunk[0] && sunk[1] == 1) //check if fleet is sunk
    {
    alert("enemy fleet sunk");
    fsunk = 1;
    }
    else
    {
        userinput(); //calls function to get users input
        if(battleship.includes(guess)) //checks if users guess is in battleship array
        {
            console.log("game.if") //just to see which clause is executing
            bhit++; //no of hits on battleship incremented
            if(bhit == 4)
            {
                sunk[0] = 1; //battleship status set to sunk
                console.log("battleship sunk");
            }
        }
        else if (cruiser1.includes(guess))
        {
            console.log("game.elseif")
            c1hit++; //no of hits in cruiser1 incemented
            if(c1hit == 3)
            {
            sunk[1] = 1; //cruiser1 status set to sunk
            console.log("cruiser1 sunk");
            }
        }   
    }
}
}
function userinput()
{
guess = prompt("Enter the grid coordinates. Do not use space. X-coordinates 
0-6, Y-coordinates 0-6.");
console.log("users input = " + guess);
while(guess < 0 || guess > 66 || userchoices.includes(guess)) //checks user input for repeated strikes or out of range. Suggest better way if possible. this is just bad code
{
    alert("You have entered an invalid coordinate.");
    guess = prompt("Try Again!");
}
guesses++; //increments no of guessess
userchoices.push(guess); //add users guess to array
return guess;
}

Я добавил комментарии, чтобы лучше объяснить каждую строку кода.Но не стесняйтесь спрашивать о любых объяснениях и исправляйте мою логику там, где это необходимо.Спасибо

Редактировать: в настоящее время я работаю над включением большего количества кораблей и вертикального позиционирования.Я знаю, что требуются серьезные изменения для spawn () и position ().Я также расширяю плату до стандартной сетки 10 X 10, что также облегчает проверку пользователей.

...