Нова моя джаджа - игра морски шах (GPL)

Unwise

Well-Known Member
Наскоро ми се наложи да направя една интерсна, макар и елементарна джаджа. Тъй като реално не изпълни предназначението си, я споделям за масово ползване. Става въпрос за елементарна онлайн игра морски шах (онова с хиксовете и нулите).
Ето ви линк до творението ми:
http://hitori.animerulezzz.org/x0/
Както да играете, можете и да си изтеглите самата система и да си я инсталирате където поискате. Използвани са MVC концепции, както и разделение на клиент-сървър с връзка посредством AJAX с пренасяне на JavaScript променливи. Ботът е със средно добър интелект. Системата позволява да се слагат повече интелекти и да се сменят. Същото важи и за темплейтите. Би ми било интересно по-програмистко настроените тукашни форумци да споделят мнение за кода и структурата на джаджата. Е, и за дизайнът би ми било интересно да чуя коментар, макар този темплейт да съм го правил набързо. Който иска да му направя подобна или някаква друга система може да прати ЛС и да се договорим за нещо справедливо (приемам и бартерни сделки стига да си струват).
 
От: Нова моя джаджа - игра морски шах (GPL)

Играта е много яка, даже ме би няколко пъти :clap:

Отворих 1-2 файла и веднага се зачудих защо има 30 preg_replace вътре, след като може да се направи с един str_replace (многократно по-бърза фунцкия) :

PHP:
$tpl=preg_replace("/\{charset\}/",$charset,$tpl);
$tpl=preg_replace("/\{title\}/",$title,$tpl);
.... 
....
още много
PHP:
$tpl=str_replace(
 array('{charset}', '{title}', .....),
 array($charset, $title, ....),
 $tpl
);
Също и това:

PHP:
$value_username=$_POST['username'];
$value_password=$_POST['password'];
и още на доста места
В повечето случаи тези POST данни няма да ги има. Ако е пуснат error reporting-а ще напълни един екран грешки, а сега сигурно ги трупа в някой лог файл.
 
От: Нова моя джаджа - игра морски шах (GPL)

* Това със str_replace е добра идея. Аз лично тази функция не съм я ползвал досега, но ми се вижда удачна, така че мога да пробвам да модифицирам кода.

* Това за грешките от празните POST заявки е невярно (специално прегледах логовете). Празното също се води стойност, както и нулата се води число, както и "" се води низ.

* Това за шаха (към harkon):
Ми, направи, за да играем.

П.П.:
Всъщност, не съм много сигурен за удачността на str_replace.
 
От: Нова моя джаджа - игра морски шах (GPL)

* Това със str_replace е добра идея. Аз лично тази функция не съм я ползвал досега, но ми се вижда удачна, така че мога да пробвам да модифицирам кода.

* Това за грешките от празните POST заявки е невярно (специално прегледах логовете). Празното също се води стойност, както и нулата се води число, както и "" се води низ.

* Това за шаха (към harkon):
Ми, направи, за да играем.

П.П.:
Всъщност, не съм много сигурен за удачността на str_replace.

Това разбира се си е твоя работа, но защо питаш след като не харесваш критика?

За разлика от str_replace, preg_replace работи с регулярни изрази - тя е Много по-бавна и натоварваща. Освен това е по-трудно да напишеш регулярен израз, отколкото един стринг. Освен това си написал 40 реда код вместо 3. Мен най-малкото би ме домързяло да ги напиша и да ескейпна скобите - \{ и \}. Като ти се случи някой път на натоварен сайт да се чудиш как да го облекчиш ще видиш разликата.

http://www.php.net/manual/en/function.str-replace.phphttp://www.php.net/manual/en/function.str-replace.php
This function returns a string or an array with all occurrences of search in subject replaced with the given replace value. If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().
Това за POST данните е напълно вярно. В масива пост не съществуват индексите, които търсиш там. Не са null или празни, такива индекси просто няма. Сложи си този код е един файл и тествай:

PHP:
<?php 
ini_set('display_errors',1);
ini_set('log_errors',1);
error_reporting(E_ALL);
echo $_POST['MENE_ME_NQMA_TUKA'];
die;
?>
Резултата е:

Notice: Undefined index: MENE_ME_NQMA_TUKA in D:\Apache\Htdocs\www\index.php on line 6

ПП: Не мога да повярвам, че си написал тази игра, а не си чувал за str_replace и пускане на error_reporting(E_ALL) докато проекта е в development фаза :)
 
От: Нова моя джаджа - игра морски шах (GPL)

Благодаря за съветите! Обичам да експериментирам и вероятно ще пробвам някои от споменатите неща.

П.П.:
Относно това за POST-а: Рядко някой принти директно променливата от POST-а. При моя алгоритъм нито веднъж не изби със споменатата грешка. Май, говорим за друг случай.
А иначе за str_replace е умно да се ползва за обикновено заместване (то мойте май са само такива). Това, че не съм ползвал тази функция не означава, че не я знам. Просто когато съм писал този код така ми е хрумнало да го направя :)
 
От: От: Нова моя джаджа - игра морски шах (GPL)

...Празното също се води стойност, както и нулата се води число, както и "" се води низ...

мхммм... тъй де тъй... нулл не е нула, нали знаете :wink:
 
Последно редактирано:
От: Нова моя джаджа - игра морски шах (GPL)

Не е само за принтене на пост-а. Пусни показването на грешките в register.php и отвори http://hitori.animerulezzz.org/x0/register.php

<?php
ini_set('display_errors',1);
ini_set('log_errors',1);
error_reporting(E_ALL);

#Init data if have POST
$value_username=$_POST['username'];
$value_password=$_POST['password'];
$value_repassword=$_POST['repassword'];
$value_mail=$_POST['mail'];
$value_answer=$_POST['answer'];

В пост масива има нещо само след като субмитнеш формата. При клик на "регистрация" от началната страница е винаги празен. Същото ще е ако използваш недекларирана променлива така:

<?php
$a = $b;
?>

Notice: Undefined variable: b in D:\Apache\Htdocs\www\index.php on line 2

В конкретния случай (даже в повечето случаи) това не е никакъв проблем и всичко си работи ок. Сигурно 80% от сайтовете в нета са така. Понякога обаче това може да те накара да ровиш 2 дена в кода и да се чудиш къде точно е грешката и защо нещо не работи.

Нещо не съм дочел за str_replace, за това така съм се изказал неподготвен - сори :)
 

Горе