Игра "Морской бой", версия 2. Возможность игры с компьютером и по сети




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

37 Comments

  1. Душелов

    А скриншоты?

    Reply
  2. hame1e00n

    Прикольно!!!

    Reply
  3. hame1e00n

    Со статистикой))) Красиво!

    Reply
  4. Арчибальд

    Вот погоди, доберусь я до восьмерки…

    :))

    Reply
  5. mdzen

    Нормально! А по сетке поиграть?

    Reply
  6. zzerro

    Нормуль… Вот тока игры уж больно быстро проходят… Одна минута и все, компьютер повержен.

    Reply
  7. Robertik

    Всем, БОЛЬШОЕ спасибо за оценки и комментарии!:-)

    Да, согласен, чтоб по сети можно было — это интересно 🙂

    Reply
  8. Greymem

    Достойный конкурент… а с моей игрушкой всё наоборот, по сети можно а в одиночку с компом никак =))

    Reply
  9. jhfrek

    Молодец!

    Reply
  10. lame

    Форма.Форма(1763)}: Поле объекта не обнаружено (СтрелкаНазад)

    КартинкаПереместитьВлево = БиблиотекаКартинок.СтрелкаНазад;

    нало было указать — что работает только с типовыми конфигурациями

    Reply
  11. fuxic

    заменить строки картинок на примерно следующие стандартные

    КартинкаПереместитьВлево = БиблиотекаКартинок.Назад;

    КартинкаПереместитьВправо = БиблиотекаКартинок.Вперед;

    КартинкаИгрока = БиблиотекаКартинок.Пользователь;

    КартинкаКомпьютера = БиблиотекаКартинок.Калькулятор;

    Reply
  12. hame1e00n

    Хаха, и все таки косяк, что по сети играть нельзя))) Так бы можно было через SQL сервер шпилить))))))))))))

    Reply
  13. Robertik

    Ошибку исправил, спасибо. (12), (13). Теперь должно работать

    во всех конфигурациях.

    Reply
  14. avi88

    Идея хорошая но если бы кто смог ее перегнать на 7.7. и сеть в ней доработать то ей цены бы небыло!

    Reply
  15. invertex

    Автор, как насчет новой, сетевой версии?

    Reply
  16. invertex

    +17 на регистре сведений, через обработку ожидания?

    Reply
  17. Robertik

    На счет сетевой версии, пробую. Если получится, обязательно выложу

    Reply
  18. RailMen

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

    Reply
  19. Robertik

    Добавлена сетевая версия игры! (14), (17)

    Reply
  20. melvin

    Есть возможность сделать сетевую игру для большего количества людей? Было бы замечательно

    Reply
  21. buh888

    не запускается в 1с 8.2.

    после попытки добавление этой обработки выдается: «{Справочник.ВнешниеОбработки.Форма.ФормаЭлемента.Форма(189)}: Ошибка при вызове метода контекста (Создать)»

    👿

    Reply
  22. Robertik

    (23) Обработка должна работать только под 1С 8.1. Под 1С 8.2 не предназначена.

    Reply
  23. minikos

    Прикольно… Только по окончанию игры не ничего не обнулилось. Клацаешь новая игра, все остается по прежнему.

    Reply
  24. Robertik

    (25) Спасибо за найденную ошибку. Исправил, выложил рабочую (исправленную) версию.

    Теперь при нажатии на «Новая игра» всё должно работать как задумывалось.

    Reply
  25. Robertik

    Если Вы скачали немного не до конца работающую версию приношу свои извинения. Сейчас выложил работающую версию. Спасибо за понимание.

    Reply
  26. mr.Kot

    Клёво, в пятницу искали с сотрудником моской бой, все приложения — фигня, а тут оказывается сразу в 1С можно рубиться 🙂 Спасибо.

    Reply
  27. Robertik

    (28) Вам спасибо!)

    Reply
  28. mr.Kot

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

    Reply
  29. AruslanM

    За игрушку благодарю )

    Reply
  30. EvgSt

    Прикольно!!!

    Reply
  31. barsa-05

    прикольная игруха

    Reply
  32. CHELLL

    ща заценим)

    Reply
  33. Master07

    Прикольно!!!

    Reply
  34. lees

    А круто!!! Спасибо, поиграл

    Reply
  35. aleksey2

    почему-то комп всегда выигрывает

    Reply
  36. mc1c80

    Круто.

    Reply
  37. Иваныч

    Плюс однозначно

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *