Super_Saimon

Ошибка в задаче "игра в города"

Recommended Posts

Добрый день! Есть задание - игра в города. Нужно из бд взять перечень городов и в момент ответа компьютера или игрока сравнивать города из списка, взятого из базы. Все, вроде, понятно, но столкнулся с проблемой, что некорректно удаляются города из массива, в котором хранится список городов из базы. Я использую этот массив чтобы знать когда игра закончилась и не повторялись города в ответах. Собственно, сам код без файла с подключением в бд. Там проблем я не обнаружил, массив городов функция возвращает корректный. Но удаление уже выбранных городов - проблема, которую никак не могу решить, вернее, понять в чем суть самой проблемы. Извиняюсь что выкладываю код в таком виде, не нашел аналога jsfiddle для php

 

session_start();
if(!empty($_GET['restart'])) {
    unset($_SESSION['cities']);
    unset($_SESSION['answer']);
    unset($_SESSION['incorrect_city']);
    unset($_SESSION['game_over']);
    header('Location: ./form.php');
    exit;
}

define('HOST', 'localhost');
define('USER', 'root');
define('PASSWORD', '');
define('DATABASE', 'gamecity');
$connect = mysqli_connect(HOST, USER, PASSWORD, DATABASE);

function getCityFromDB($dbconfig) {
    $listOfCities = "SELECT * FROM city ORDER BY city_id ASC";
    $query = mysqli_query($dbconfig, $listOfCities);
    while($res[] = mysqli_fetch_assoc($query)) {
        $cities = $res;
    }
    foreach($cities as $key => $val) {
        foreach($val as $key2 => $val2) {
            if($key2 == 'city_name') {
                $city[] = $val2;
            }
        }
    }
    return $city;
}

if (empty($_SESSION['cities'])) {
    $_SESSION['cities'] = getCityFromDB($connect);
}

if(!empty($_POST['send'])) {
    if (findCity($_POST['city'], $_SESSION['cities'])) {
        if (empty($_SESSION['answer'])) {
            $_SESSION['answer'] = firstStep($_POST['city'], $_SESSION['cities']);
            $temp = deleteCity($_SESSION['answer'], $_SESSION['cities']);
        }else {
            $answer = answer($_POST['city'], $_SESSION['answer'], $_SESSION['cities']);
            if($answer) {
                $_SESSION['answer'] = $answer;
                $temp = deleteCity($_SESSION['answer'], $_SESSION['cities']);
            }else {
                $_SESSION['game_over'] = 2;
            }
        }
        if(!$temp){
            $_SESSION['game_over'] = 1;
        }else {
            $_SESSION['cities'] = $temp;
        }
    }else {
        $_SESSION['incorrect_city'] = 'Некорректный город';
    }
    header('Location: /form.php');
    exit;
}

function firstStep($userCity, $arrayOfCities) {
    $temp = '';
    if(!empty($userCity)) {
        foreach ($arrayOfCities as $key => $val) {
            if(mb_strtoupper(mb_substr($userCity, -1, 1, 'utf-8')) == mb_substr($val, 0, 1, 'utf-8')) {
                $temp .= $userCity . ',' . $val;
                return $temp;
            }
        }
    }
    return false;
}

function findCity ($city, $listCities) {
    foreach($listCities as $key => $val) {
        if($val == $city) {
            return true;
        }
    }
    return false;
}

function answer($city, $answer, $arrayOfCities) {
    if(mb_substr($city, 0, 1, 'utf-8' ) == mb_strtoupper(mb_substr($answer, -1, 1, 'utf-8'))) {
        $char = mb_strtoupper(mb_substr($city, -1, 1, 'utf-8'));
        foreach($arrayOfCities as $key => $val) {
            $temp = mb_strpos($val, $char, 0,'utf-8');
            if ($temp !== false) {
                $answer .= ',' . $city . ',' . $val;
                break;
            }
        }
        return $answer;
    }
    return false;
}

function deleteCity($town, $cities) {
    if (count($cities) > 0) {
        $town = explode(',', $town);
        $cities = array_values($cities);
        for($i = 0; $i < count($town); $i++) {
            for($j = 0; $j < count($cities); $j++) {
                if($town[$i] == $cities[$j]) {
                    unset($cities[$j]);
                }
            }
        }
        return $cities;
    }
    return false;
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By kuzia007
      Пример сайта по разработке reactiq точка net 
      Цена на разработку 70 000 рублей. Без дизайна и верстки, от вас нам нужен функционал 
      на фреймворке Lavarel 
      Нужно постараться уложиться в 20 дней по срокам. 
      Работа по Сделке без риска. B и больше ни как. 

      Основные моменты работы сайта: 
      авторизация сайта через стим 
      считывания апи через официальный сайт pubg 
      Трейдов скинов и все остальное не будет! 
      подключить систему оплат 
      создание личного кабинета для пользователя. 
      Есть полное ТЗ проекта, которое мы готовы упрощать на первом этапе.
      Готовы достойно оплачивать ваш труд! 
      Пишите в телеграм @evgensalyah
    • By kuzia007
      Ищем талантливого программиста в игровой проект
      Для разработки игрового проекта требуются талантливые программисты.
      Отличное знание: PHP, JavaScript, Python
      Преимуществом будет если когда-то работали с платформой steam и с голосовым мессенджером Discord.

      Вкратце о проекте: Будет разрабатываться площадка для проведения турниров по играм pubg, dota, cs go.
      Ищем программиста с руками. Не важно какой вы ориентации, вероисповедания и т.д. Нам от вас важен результат!
      Готовы достойно оплачивать ваш труд! 
      Пишите в телеграм @evgensalyah
    • By deekep
      Как запустить файл типа index.php на пк? 
  • Member Statistics

    46,528
    Total Members
    3,128
    Most Online
    SANTIMEL
    Newest Member
    SANTIMEL
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.