Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 11.02.2018, 14:35   #1
 Разведчик
Аватар для taksist0420
 
taksist0420 никому не известный тип
Регистрация: 11.02.2018
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Ищу бот 3 в ряд гибкий. Рыцари и принцессы

Ищу Бот 3 в ряд.
Рыцари и принцессы
В игре присутствуе вторичная игра ферма в которой 3 в ряд горит неймоверно.
Перепробовал кликерман бот на его основе оказался кривоват и горы танцев с бубном.
Кибор тоже самое.
Брал за основу и начал переделывать на с++ но нервов не хватило очень много платформо зависимого кода 32 бита.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Если тут не помогут сяду буду штурмовать js и делать что то более гибкое.
Можно лс если у кого есть готовое что то но боитесь фикса.
  Ответить с цитированием
Старый 15.02.2018, 00:53   #2
 Старший сержант
Аватар для Stratego
 
Stratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака Норриса
Регистрация: 25.03.2013
Сообщений: 175
Популярность: 7326
Сказал(а) спасибо: 8
Поблагодарили 36 раз(а) в 18 сообщениях
 
По умолчанию Re: Ищу бот 3 в ряд гибкий. Рыцари и принцессы

Цитата:
Кибор тоже самое

Что не получилось?)
Там даже есть готовый скрипт для игры 3 в ряд. Так же его можно и протестировать прямо там.
Переделать просто под свою игру..
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Пользователь сказал cпасибо:
object (18.09.2018)
Старый 18.09.2018, 02:45   #3
 Старший сержант
Аватар для Stratego
 
Stratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака Норриса
Регистрация: 25.03.2013
Сообщений: 175
Популярность: 7326
Сказал(а) спасибо: 8
Поблагодарили 36 раз(а) в 18 сообщениях
 
По умолчанию Re: Ищу бот 3 в ряд гибкий. Рыцари и принцессы

Набросал скрипт который легко настроить на разные игры.
Подробнее на видео
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Пользователь сказал cпасибо:
object (18.09.2018)
Старый 28.09.2018, 07:17   #4
 Старший сержант
Аватар для Stratego
 
Stratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака НоррисаStratego троюродный дядя Чака Норриса
Регистрация: 25.03.2013
Сообщений: 175
Популярность: 7326
Сказал(а) спасибо: 8
Поблагодарили 36 раз(а) в 18 сообщениях
 
По умолчанию Re: Ищу бот 3 в ряд гибкий. Рыцари и принцессы

Набросал скрипт для Кибор, который определяет лучший ход не поиском забитых позиций, а путем перебора всех ходов и определения лучшей оценки (примерно как минимакс, только с одним шагом и без ответа противника)).

Скрипт подходит для любой игры и не зависит от количества клеток.
В скрипте только определение хода.

Это надо сохранить в файл и назвать как угодно. К примеру Лучший_ход.txt
Код:
function perebor(int #t, int X, int Y, int #kx1, int #ky1, int #kx2, int #ky2)//Перебирает все возможные комбинации меняя соседнте фишки
{
int adr=address(#t[0][0]);
int tp;
int Max=-1;
int tMax=-1;
int x, y;
  for (y=1; y<Y-1; y++)
  {
    for (x=1; x<X-1; x++)
    {
    //Делаем ход меняя x на x-1
    tp=t[x][y];
    t[x][y]=t[x-1][y];
    t[x-1][y]=tp;
    Max=proverka(X, Y, adr);//Оцениваем полученную ситуацию
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x-1; ky2=y;}//Если оценка больше предыдущей, записываем координаты и оценку сохраняем.
    //Меняем назад на исходную.
    tp=t[x][y];
    t[x][y]=t[x-1][y];
    t[x-1][y]=tp;
    
    tp=t[x][y];
    t[x][y]=t[x+1][y];
    t[x+1][y]=tp;
    Max=proverka(X, Y, adr);
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x+1; ky2=y;}
    tp=t[x][y];
    t[x][y]=t[x+1][y];
    t[x+1][y]=tp;
    
    tp=t[x][y];
    t[x][y]=t[x][y-1];
    t[x][y-1]=tp;
    Max=proverka(X, Y, adr);
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y-1;}
    tp=t[x][y];
    t[x][y]=t[x][y-1];
    t[x][y-1]=tp;
    
    tp=t[x][y];
    t[x][y]=t[x][y+1];
    t[x][y+1]=tp;
    Max=proverka(X, Y, adr);
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y+1;}
    tp=t[x][y];
    t[x][y]=t[x][y+1];
    t[x][y+1]=tp;
    }
  }
return tMax;
}


function proverka(int X, int Y, int mas)//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.
{
int Ocenka;
int tOcenka=-1;
int x, y;
for (x=0; x<X; x++)
{
Ocenka=1;
for (y=0; y<Y-1; y++)
{
if (addressi(mas+(x*Y+y)*4)==addressi(mas+(x*Y+y+1)*4))Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}

for (y=0; y<Y; y++)
{
Ocenka=1;
for (x=0; x<X-1; x++)
{
if (addressi(mas+(x*Y+y)*4)==addressi(mas+((x+1)*Y+y)*4))Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}
return tOcenka;
}
Это его использование в своем скрипте
Код:
#include "C:\Лучший_ход.txt"//В начале скрипта

int X=7, Y=8;//Размерность поля


/*
Массив с типами фигур. Заполнить любыми числами по типу и любым способом
Координаты фишек надо хранить так же в двухмерных массивах. Пример:
new int fX[X][Y];//Координаты X фишек
new int fY[X][Y];//Координаты Y фишек
*/
new int mas[X][Y];



/*
Индексы заменяемых массивов. kx1 ky1 меняется на kx2 ky2
то есть фишки с координатами fX[kx1][ky1] fY[kx1][ky1] и fX[kx2][ky2] fY[kx2][ky2] поменяются местами
*/
int kx1, ky1, kx2, ky2;


/*
//Использование
if (perebor(#mas[0][0], X, Y, #kx1, #ky1, #kx2, #ky2)>2)//Есть замена
{
//Тут поменять местами фишки.
messagebox ("Есть замена "+format(kx1)+" " +format(ky1)+" -" +format(mas[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas[kx2][ky2]));
}
*/






//Тест с файла (убрать после весь ниже код)
if (fopen ("c:\Исходник.txt", "r")!=0)//В этом файле массив 7 на 8 заполнен цифрами которые соответствуют фишкам
{
    for(int n1=0; n1<Y; n1++)
    {
   for(int n=0; n<X; n++)
  {   fread(mas[n][n1]);
    }
  }
fclose();//закрываем файл
}

int L=perebor(#mas[0][0], X, Y, #kx1, #ky1, #kx2, #ky2);
//Покажет лучший результат замены
messagebox ("Лучший ход на "+format(L)+" Заменить "+format(kx1)+" " +format(ky1)+" -" +format(mas[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas[kx2][ky2]));
Сам файл теста примерно такой
Код:
0 1 2 3 4 5 2
2 3 1 1 2 5 3 
1 5 1 7 5 9 2 
5 5 2 1 5 5 2 
4 3 2 5 2 0 5 
0 6 1 4 5 6 1 
5 5 5 2 5 5 5 
0 5 4 5 5 1 5
----------------------------------------

А это побыстрее, но с одной глобальной переменной, которая должна обязательно называться так как в скрипте

mas_pole. Такое имя должно быть массива в котором хранятся фишки.

Это надо сохранить в файл и назвать как угодно. К примеру Лучший_ход.txt
Код:
function perebor(int X, int Y, int #kx1, int #ky1, int #kx2, int #ky2)//Перебирает все возможные комбинации меняя соседнте фишки
{
int tp;
int Max=-1;
int tMax=-1;
int x, y;
  for (y=1; y<Y-1; y++)
  {
    for (x=1; x<X-1; x++)
    {
    //Делаем ход меняя x на x-1
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x-1][y];
    mas_pole[x-1][y]=tp;
    Max=proverka(X, Y);//Оцениваем полученную ситуацию
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x-1; ky2=y;}//Если оценка больше предыдущей, записываем координаты и оценку сохраняем.
    //Меняем назад на исходную.
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x-1][y];
    mas_pole[x-1][y]=tp;
    
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x+1][y];
    mas_pole[x+1][y]=tp;
    Max=proverka(X, Y);
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x+1; ky2=y;}
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x+1][y];
    mas_pole[x+1][y]=tp;
    
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x][y-1];
    mas_pole[x][y-1]=tp;
    Max=proverka(X, Y);
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y-1;}
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x][y-1];
    mas_pole[x][y-1]=tp;
    
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x][y+1];
    mas_pole[x][y+1]=tp;
    Max=proverka(X, Y);
    if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y+1;}
    tp=mas_pole[x][y];
    mas_pole[x][y]=mas_pole[x][y+1];
    mas_pole[x][y+1]=tp;
    }
  }
return tMax;
}


function proverka(int X, int Y)//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.
{
int Ocenka;
int tOcenka=-1;
int x, y;
  for (y=0; y<Y; y++)
  {
  Ocenka=1;
    for (x=0; x<X-1; x++)
    {
    if (mas_pole[x][y]==mas_pole[x+1][y])Ocenka++;
    else Ocenka=1;
    if (Ocenka>tOcenka)tOcenka=Ocenka;
    }
  }

  for (x=0; x<X; x++)
  {
  Ocenka=1;
    for (y=0; y<Y-1; y++)
    {
    if (mas_pole[x][y]==mas_pole[x][y+1])Ocenka++;
    else Ocenka=1;
    if (Ocenka>tOcenka)tOcenka=Ocenka;
    }
  }
return tOcenka;
}





Это его использование в своем скрипте
Код:
#include "C:\Лучший_ход.txt"//В начале скрипта

int X=7, Y=8;//Размерность поля


/*
Массив с типами фигур. Заполнить любыми числами по типу и любым способом
Координаты фишек надо хранить так же в двухмерных массивах. Пример:
new int fX[X][Y];//Координаты X фишек
new int fY[X][Y];//Координаты Y фишек
*/
new int mas_pole[X][Y];//ОБЯЗАТЕЛЬНО с ТАКИМ ИМЕНЕМ, так как тут она используется глобально в коде нахождения лучшего хода



/*
Индексы заменяемых массивов. kx1 ky1 меняется на kx2 ky2
то есть фишки с координатами fX[kx1][ky1] fY[kx1][ky1] и fX[kx2][ky2] fY[kx2][ky2] поменяются местами
*/
int kx1, ky1, kx2, ky2;






/*
//Использование
if (perebor(X, Y, #kx1, #ky1, #kx2, #ky2)>2)//Есть замена
{
//Тут поменять местами фишки.
messagebox ("Есть замена "+format(kx1)+" " +format(ky1)+" -" +format(mas[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas[kx2][ky2]));
}
*/






//Тест с файла (убрать после весь ниже код)
if (fopen ("c:\Исходник.txt", "r")!=0)//В этом файле массив 7 на 8 заполнен цифрами которые соответствуют фишкам
{
for(int n1=0; n1<Y; n1++)
{
for(int n=0; n<X; n++)
{ 
fread(mas_pole[n][n1]);
}
}
fclose();//закрываем файл
}

int L=perebor(X, Y, #kx1, #ky1, #kx2, #ky2);
//Покажет лучший результат замены
messagebox ("Лучший ход на "+format(L)+" Заменить "+format(kx1)+" " +format(ky1)+" -" +format(mas_pole[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas_pole[kx2][ky2]));
Для теста надо создать файл c:\Исходник.txt и заполнить его числами по типу фишек 7 на 8 (или другими и поменять размер в скрипте)
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Верность: рыцари и принцессы - взлом игры Александра898 Свободное обсуждение 0 30.04.2016 20:31
[Помогите!] Верность: Рыцари и Принцессы Alikkryt2 Свободное обсуждение 13 05.09.2015 18:03

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 01:52.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net