Igor
когда ты работаешь в чужой кодовой базе ты автоматически варишься в решениях которые принял автор, почему он их принял и как можно было сделать еще остается за кадром. А это самая важная часть как мне кажется особенно на начальном этапе
Bogdan
а я никак не могу найти для себя идеальную технологию и направление
Сидредин
бухай м700 рекомендует. .. я тоже ;)
чтобы мозг в труху превратить?)
Иаков
бухай м700 рекомендует. .. я тоже ;)
Ну... Не особо охото.. В г##но не хочу. Пару раз пил, потом еще попью. Пхпх
Igor
чтобы мозг в труху превратить?)
чтобы мозг превратить в труху нужно чтобы он был ;)
Сергей
а я никак не могу найти для себя идеальную технологию и направление
А какая разница? Есть задачи и есть инструменты) Поиск идеального = поиск задачи под инструмент, а должно быть наоборот
Igor
ну я про обычных людей)
так и я про обычных ;) людей с мозгами единицы ;)
Виталик Голоенко
function evaluateBoard(game, move, prevSum, color) { if (game.in_checkmate()) { // Opponent is in checkmate (good for us) if (move.color === color) { return 10 ** 10; } // Our king's in checkmate (bad for us) else { return -(10 ** 10); } } if (game.in_draw() || game.in_threefold_repetition() || game.in_stalemate()) { return 0; } if (game.in_check()) { // Opponent is in check (good for us) if (move.color === color) { prevSum += 50; } // Our king's in check (bad for us) else { prevSum -= 50; } } var from = [ 8 - parseInt(move.from[1]), move.from.charCodeAt(0) - 'a'.charCodeAt(0), ]; var to = [ 8 - parseInt(move.to[1]), move.to.charCodeAt(0) - 'a'.charCodeAt(0), ]; // Change endgame behavior for kings if (prevSum < -1500) { if (move.piece === 'k') { move.piece = 'k_e'; } // Kings can never be captured // else if (move.captured === 'k') { // move.captured = 'k_e'; // } } if ('captured' in move) { // Opponent piece was captured (good for us) if (move.color === color) { prevSum += weights[move.captured] + pstOpponent[move.color][move.captured][to[0]][to[1]]; } // Our piece was captured (bad for us) else { prevSum -= weights[move.captured] + pstSelf[move.color][move.captured][to[0]][to[1]]; } } if (move.flags.includes('p')) { // NOTE: promote to queen for simplicity move.promotion = 'q'; // Our piece was promoted (good for us) if (move.color === color) { prevSum -= weights[move.piece] + pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum += weights[move.promotion] + pstSelf[move.color][move.promotion][to[0]][to[1]]; } // Opponent piece was promoted (bad for us) else { prevSum += weights[move.piece] + pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum -= weights[move.promotion] + pstSelf[move.color][move.promotion][to[0]][to[1]]; } } else { // The moved piece still exists on the updated board, so we only need to update the position value if (move.color !== color) { prevSum += pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum -= pstSelf[move.color][move.piece][to[0]][to[1]]; } else { prevSum -= pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum += pstSelf[move.color][move.piece][to[0]][to[1]]; } } return prevSum; } большая часть кода взята из инета понять мне полностью его тяжело ну а свою оценочную функцию написать не в силах)
Иаков
чтобы мозг в труху превратить?)
Ахахаха... Если не уже, учитывая, что у меня систематический недосып, а я игнорю свою усталость, а ещё заснуть не могу. Ахаха
Igor
function evaluateBoard(game, move, prevSum, color) { if (game.in_checkmate()) { // Opponent is in checkmate (good for us) if (move.color === color) { return 10 ** 10; } // Our king's in checkmate (bad for us) else { return -(10 ** 10); } } if (game.in_draw() || game.in_threefold_repetition() || game.in_stalemate()) { return 0; } if (game.in_check()) { // Opponent is in check (good for us) if (move.color === color) { prevSum += 50; } // Our king's in check (bad for us) else { prevSum -= 50; } } var from = [ 8 - parseInt(move.from[1]), move.from.charCodeAt(0) - 'a'.charCodeAt(0), ]; var to = [ 8 - parseInt(move.to[1]), move.to.charCodeAt(0) - 'a'.charCodeAt(0), ]; // Change endgame behavior for kings if (prevSum < -1500) { if (move.piece === 'k') { move.piece = 'k_e'; } // Kings can never be captured // else if (move.captured === 'k') { // move.captured = 'k_e'; // } } if ('captured' in move) { // Opponent piece was captured (good for us) if (move.color === color) { prevSum += weights[move.captured] + pstOpponent[move.color][move.captured][to[0]][to[1]]; } // Our piece was captured (bad for us) else { prevSum -= weights[move.captured] + pstSelf[move.color][move.captured][to[0]][to[1]]; } } if (move.flags.includes('p')) { // NOTE: promote to queen for simplicity move.promotion = 'q'; // Our piece was promoted (good for us) if (move.color === color) { prevSum -= weights[move.piece] + pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum += weights[move.promotion] + pstSelf[move.color][move.promotion][to[0]][to[1]]; } // Opponent piece was promoted (bad for us) else { prevSum += weights[move.piece] + pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum -= weights[move.promotion] + pstSelf[move.color][move.promotion][to[0]][to[1]]; } } else { // The moved piece still exists on the updated board, so we only need to update the position value if (move.color !== color) { prevSum += pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum -= pstSelf[move.color][move.piece][to[0]][to[1]]; } else { prevSum -= pstSelf[move.color][move.piece][from[0]][from[1]]; prevSum += pstSelf[move.color][move.piece][to[0]][to[1]]; } } return prevSum; } большая часть кода взята из инета понять мне полностью его тяжело ну а свою оценочную функцию написать не в силах)
ну а какой смысл тогда писать движок ? ;) я думал ты свою оценочную функцию придумал
Иаков
чтобы мозг превратить в труху нужно чтобы он был ;)
Ахахаха... Можно не париться, я понял. Пойду в г##но... Сегодня.. Пятница же😁
Виталик Голоенко
ну а какой смысл тогда писать движок ? ;) я думал ты свою оценочную функцию придумал
можно конечно такой var calculateBestMove = function (game) { var newGameMoves = game.ugly_moves(); var bestMove = null; //Используйте любое отрицательное число var bestValue = -9999; for (var i = 0; i < newGameMoves.length; i++) { var newGameMove = newGameMoves[i]; game.ugly_move(newGameMove); //Возьмите отрицательное число, поскольку ИИ играет черными var boardValue = -evaluateBoard(game.board()) game.undo(); if (boardValue > bestValue) { bestValue = boardValue; bestMove = newGameMove } } return bestMove; }; этот не берет в учет расположение на доске, тут все понятней, но и движок соответственно слабей
Иаков
Иаков
так и я про обычных ;) людей с мозгами единицы ;)
Жаль, конечно... Ну, гении пусть будут гениями, хватит и житейской мудрости. Пхпхп)
Виталик Голоенко
здесь нет отсечени это какой то перебор ... непонятный
так вы путаете оценочную функцию и функцию нахождение наилучшего хода ну или я путаю)
Igor
так вы путаете оценочную функцию и функцию нахождение наилучшего хода ну или я путаю)
оценочная функция выдает число имеет настройки которые влияют на глубину и скорость оценки
Igor
после этого мы ипользуем ее в переборе с альфа бетта отсечением = профит
Виталик Голоенко
ну на словах возможно просто но на деле нет)
Igor
возьми шашки ;) оценочная фукнция самая примитивная разница между кол-вом своих чужих шашек или отношение
Igor
без разницы что это будет ... дальше принудительный бой делаешь
Igor
хорошо все возможные ходы ты умеешь генерить?
Igor
из текущей позиции
Виталик Голоенко
хорошо все возможные ходы ты умеешь генерить?
да с помощью chessboard.js и chess.js это не сложно сделать
Виталик Голоенко
game.moves тебе возвратит все возможные ходы
Виталик Голоенко
"rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq e6 0 2", ему надо просто дать что-то подобное
Igor
я понял ;) скукота ...
Виталик Голоенко
чего это?)
Виталик Голоенко
если бы я свой генератор писал бы это бы на неделю затянулось со всеми правилами
Bogdan
времени не на что кроме учебы нет
Igor
чего это?)
https://gist.github.com/byanofsky/c8dd06cd1b1fb8d06a9dd695d07e403e
Роман
а на что учишься?
Igor
если ты взял все готовое возьми уже готовый минимакс ... скажи что ты крут и написал шахматы ... и забей
Bogdan
в Украине сейчас образование пошло по п****
Роман
я хз, всегда учился хреново, но успевал и поработать и на себя время оставалось. А ПИ это что?
Bogdan
а сдавать надо
Роман
Не представляю, че сейчас школьники и студенты беженцы делают, это катастрофа
Igor
ну тогда в этом не будет смысла
бинго ;) это я до тебя и пытаюсь донести
Bogdan
я дома с интернетом, техникой и семьей
Alexey
Добрый день Подскажите плз, как сделать размер flex контейнера, что бы он всегда занимал 80% экрана?
Иаков
времени не на что кроме учебы нет
Эх... У меня, вот, экзамены в колледже, но я стараюсь больше в свое обучение вливать, нежели готовиться к экзамену по выш мату, например. Пхпхпх
Роман
это хорошо, я за тебя правда рад
Роман
у меня друганам пришлось уехать в Львов
Bogdan
во Львове 2 месяца, снимал квартиру но потом надоело и я вернулся к семье
Роман
хз как школьникам заканчивать в этом году, студенты хоть отпуск ни на долго могут взять
Bogdan
началось моё путешествие с Харькова, я жил отдельно от семьи ибо учился и работал в Харькове
Иаков
Не представляю, че сейчас школьники и студенты беженцы делают, это катастрофа
О, у меня есть друг, в тг общаемся, из Украины. Она потом уехала в Польшу, там она теперь и польский учит, то есть, украинский + польский сдавать будет... Экзамены по ним...
Alexey
ну сделай его ширину в соответствии с размером экрана
Всмысле что бы в высоту был 80%, независимо от контента Тоже width?
Роман
пиздец конечно, жили себе мирно учились
Роман
мне друзья пишут что их сегодня сирена разбудила когда спрашиваю как у них дела
Роман
я даже хз че ответить бл
Роман
извините
Oleg
Чат для политики и другого оффтопа: https://t.me/devworden_offtop
Роман
извини)
Bogdan
самый простой пример который есть это обернуть контейнером а дальше задать flex: 80
Oleg
Я на всякий случай апну
Bogdan
а вообще непонятно какая структура у тебя
Bogdan
можешь ещё задать попробовать высоту 80vh
Сергей
Ну, а если вы бэк учили, а у вас идея под фронт. Фронт учить придётся ? Новичку-то?
Я сомневаюсь, что если ты беком занимаешься, захочешь фронтом идти)
Иван
Всем доброго времени суток, я нашёл исходники Wolfenstein 3D, написанные вроде на старом Borland C++ 3.0. Оно заработает на Windows 7?
Сергей
Хм? Почему?
Ну а зачем?)
Роман
есть еще grid там легко настроить размер колонки, чтоб он занимал 4/5 экрана (4fr 1fr) или 80% если надо