Jump to content
  • Sign Up
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By SuperSaimon
      Добрый день! Я начал изучать этот бандл. И столкнулся с непониманием логики заполнения статических страниц на сайте (информация на которых не меняется: "о нас", "контакты" и т.д.). Возникло сразу несколько вопросов: 1. Нужно ли создавать сущности для записи в бд данных с  этих страниц? Если с другим контентом на сайте я понимаю  что надо писать в бд(товары, категории и т.д.) , то тут я в замешательстве. 2. Если на странице имеется описание чего - либо со списком, то как это записать в бд и потом отобразить в твиге? Зарание спасибо и извиняюсь за глупый вопросы, если что. 
    • By kuzia007
      Пример сайта по разработке reactiq точка net 
      Цена на разработку 70 000 рублей. Без дизайна и верстки, от вас нам нужен функционал 
      на фреймворке Lavarel 
      Нужно постараться уложиться в 20 дней по срокам. 
      Работа по Сделке без риска. B и больше ни как. 

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

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

    46,873
    Total Members
    1,451
    Most Online
    riyasteve
    Newest Member
    riyasteve
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...