Cohen - 2009-08-05 09:07:17

Planuje wprowadzić na stronie kalkulator obrażeń dla jednostek. Jednak nie mam jeszcze pewnego źródła. Muszę znaleźć jakieś orginalne źródło.
Na razie mam wzór:
DMG=N*BASIC DMG(1+P(ATAK-OBRONA)

DMG -> obrażenia,
N -> liczba jednostek,
BASIC DMG -> podstawowy atak
ATAK -> atak jednostki atakującej
OBRONA -> obrona jednostki atakującej

gdy ATAK>OBRONA, to P=5% (0,05)
gdy ATAK=OBRONA, to P=0%, a wzór DMG = N * BASIC DMG
gdy ATAK<OBRONA, to P=2,5% (0,025)

Jednak nie wiem jakie są wyjątki w tym wzorze, maksymalne redukcje itp. Wzór wzięty z http://heroes3.pl, a ten post nie znam źródła. Więc chwilowo są plany. Jakbym trafił na źródło to postaram się opracować dobry wzór:
* formularz do wysyłania danych,
* skrypt PHP służący do obliczeń,
* dodatkowo funkcje generowania liczb z podanego zakresu, tutaj podstawowe obrażenia.

Źródło prawdopodobnie jest w języku angielskich (może i rosyjskim). Mnie interesuje angielski. Jeśli ktoś ma jakiś pdf czy inny dokument dotyczący obliczeń dotyczących zadawanych obrażeń. Niech wysyła linka na PW.

Nie wykluczam także że jest możliwe zrobienie skryptu na obliczenie ilości pkt. na koniec scenariusza/kampanii (ale także potrzebny wzór wraz z opisem). Najłatwiejszym z tego będzie napisanie skryptu PHP.

Prawdopodobnie wyląduje to na stronie www.heroes3.waw.pl.

Majer - 2009-08-05 10:18:24

Co do drugiego to wzoru z opisem ci nie dam, ale możesz zobaczyć że takie coś już istnieje.
http://www.heroes3.eu/forum/viewtopic.php?t=1000

Cohen - 2009-08-05 11:22:14

Dzięki za link, ale nie wiele mi to pomoże. To jest tylko formularz html, ale pliku php nie zobaczę (tak już nimi jest, chyba że włamanie ;p, nie to nieetyczne).

Chyba nawet wcześniej ten temat przechodziłem. Ale to nie jest jeszcze to. Chyba sam muszę poszukać.

@do kalkulatora...
Nawet kodowania poprawnie polskich znaków nie chciało mu się robić.... wrzucił byle jak i nie poprawiał (ten kto go zrobił...). A ile to stoi? Chyba długo... Nic tylko widać tylko "kościane smoki" zamiast polskich liter.

Majer - 2009-08-05 13:18:33

A co do pierwszego wzoru to kiedyś to testowałem i liczyłem i plus minus się wszystko zgadzało. Fajnie jakbyś w takim kalkulatorze ustawił kilka rzeczy dla ułatwienia czyli to co dany człowiek ma wklepać by mu wyliczyło:

- Jednostka atakująca: i do wyboru wszystkie jed. i liczba
- Jed. broniąca: tak samo do wyboru i liczba
- Staty boha broniącego: Atk,obr lub brak
- Staty boha atakującego atk,obr lub brak
- Czar jednostki atakującej: Do zaznaczenia 1 lub kilka ma np. blessa (maksymalne obrażenia) itp.
- Czar jed. broniącej: tak samo
- Bonus jed. atakującej: morale, szczescie
- Bonus jed. broniącej: morale, szczescie
- Skille boha atakującego: te przydatne w walce płatnerz,łucznictwo itp. i poziom na jakim jest dany skill
- Skille boha broniącego: tak samo
- Spec. boha atakującego: Jak płatnerz to wiadomo że będzie większa obrona itp.
- Spec boha broniącego: tak samo
- lvl boha atakującego: np. Płatnerz na większym lvl boha jest skuteczniejszy
- lvl boha broniącego: tak samo
- Artefakty boha atakującego: np. od lucznictwa itp.
- Artefakty boha broniącego: tak samo
- Specjalne: np. ile heksów pokonał czempion atakujac jednostke (Szarża)

Nie każdy zna staty jednostek na pamięć, a kalkulator sam brałby DMG jed., atk i obr i dodawał do atk,obr boha. Umiejetnosci podstawowe to nie wszystko liczą się też umiejetnosci bohatera i tutaj jest troche zabawy bo wchodzą w to arty, lvl bohatera (nie znam dokładnie % ale na jakimś lvl np. płatnerz się zatrzymuje bo inaczej jed. byłaby nieśmiertelna) i jeżeli mamy płatnerza na exp 30% to 5% na każdy lvl tzn. że na nastepnym lvl płatnerz będzie działał na 30% + 5% = 31,5%, a nie jak niektórzy myślą na 35%. Opcji jest naprawdę masa i z tym miałbyś naprawdę dużo roboty, by wszystko ładnie grało ze sobą. Równie dobrze można zrobić do wyboru dla przeciętnego kowalskiego:

- atk,,liczba, obrażenia jed. atakującej
- obrona jed. broniącej,

I będziemy mieli samo surowe DMG, które jest nawet w Heroes wystarczy w opcjach walki włączyć i najechać na jed. którą chcemy zaatakować i wychodzi nam DMG (100-350) np., więc nie wiem czy jest sens takie coś robić.

Można dodać wytrzymałość jeszcze danych jednostek i kalkulator obliczy nam ile jed. zabijemy i np. ile stracimy po kontrze. Dlatego mówie opcji jest masa ja ci tylko szkicuje jak to może wyglądać.

Cohen - 2009-08-06 11:06:12

Gdyby co zaczynam pracę nad skryptem. Prawdopodobnie w trakcie dojdzie do konieczności użycia funkcji, może nawet i obiektów.
Wszystko zależy co będzie potrzeba. Im więcej powtarzających się funkcji tym większa pokusa na ulepszenie pracy. Może nawet zrobię zestaw tablic PHP zawierających statystyki jednostek. Tylko zastanawiam się czy tablica zawierająca tablice asocjacyjne wystarczy. 1 tablica asocjacyjna na 1 jednostkę. Byłoby dość wygodnie zrobić mechanizm.

Zalążek mam już:
* generator podstawowych obrażeń gotowy,
* idioto odporność zrobiona, nikt nie prześle javascriptu ;p,
* nacisk na poprawność działania w toku,
* już mi oblicza obrażenia ;p.

Prawdopodobnie będzie to działać w pełni strukturalnie, tzn. ciągły tekst skryptu, chyba że podziele na funkcje (aby oddzielić wygodniej od całości).
Więc ogłaszam wersję beta: Formularz oraz Skrypt.
Najpierw wchodzimy do formularza.

Wszelkie próby wpisania tektu, skryptów kończą się automatyczną konwersją na zero. Teraz w planach komplikowanie kalkulatora. Muszę poczytać jeszcze kilka innych rzeczy. Oraz opracować mechanizm wyboru gotowych postaci oraz całą tą listę funkcji. Wtedy można mówić o funkcjonalnym narzędziu.
Kwestią jest jeszcze odpowiedniego wyglądu (ale ja nie jestem grafikiem, więc ograniczy się tylko do styli CSS, oraz poprawienia wydruku wyniku, może jakiś pop-up i normalnie, do wyboru w formularzu).

Majer - 2009-08-06 11:17:02

Zrobiłem przykładowe:
Ilosc agresorow: 20
Podstawowy atak agresora: 23
Zakres podstawowy: 100-200
Podstawowa obrona obroncy: 100
Ilosc pkt zycia: 150
Ilosc obroncow: 25
Zadawane obrazenia: 3382.5, przy podstawowych obrazeniach: 165
Ilosc jednostek, które przezyly: 2
Ostatnia jednostka z oddzialu ma: 3750

Moim zdaniem powinno dawać DMG (x - y), bo za każdym razem będzie co innego teraz wyliczyło jak akurat obrażenia będą 165. I nie rozumiem ostatniego "Ostatnia jednostka z oddzialu ma: 3750" ??

Cohen - 2009-08-06 14:17:42

Nie mam jeszcze dobrego serwera PHP, więc nie wiem jak dużo błędów. Jest jeszcze.
Mi też to nie działa. Z pkt życia... no właśnie tutaj sęk. Jest....
Do wzoru to jednak nie masz racji. We wzorze jest BASIC DMG. A to jest zakres... np.: 25-50.
To więc mamy kilkadziesiąt możliwości od 25 do 50, z 25 i 50 włącznie. Wykorzystałem do tego celu funkcję mt_rand(x,y).

A obrażenia zadawane zależą od współczynnika P oraz BASIC DMG, a także ilości jednostek.
Coś duży wziołeś zakres... Niedługo temu zaradzę wprowadzając gotowe jednostki i statystyki bohatera.

Majer - 2009-08-06 14:55:22

Rozumiem że jak basic DMG to 10 - 15 to Heroes losuje z tych liczb jakie DMG zada jednostka atakująca, nie licząc czarów, morali itp., ale mi chodziło o to żeby właśnie kalkulator nie losował tylko podawał dokładnie czyli np.

Zadawane obrazenia: (100 - 150) i niepotrzebne jest przy obrażeniach np. 122.
Ilość jed. które przezyly: (2 - 4)

Cohen - 2009-08-06 15:36:36

Rozumiem o co ci chodzi. Hmm, może dodam opcję jak ma to obliczać i będzie git, czy losowo, czy minimalne i maksymalne obrażenia.
Zastanawiam się jeszcze jak dodać do tego wpływ czarów i umiejętności bohatera.

Tablica asocjacyjna gotowa:
tabela asocjacyjna

Na podstawie tego napiszę skrypt php (to jest wydruk print_r). Więc nie ma sensu kopiować ;p.

Chwilowo tylko tak skrobię ten kod. Bo mój komputer z wszystkimi programami nie ma internetu i mam dostęp do internetu bardzo różny. Na wielu komputerach: a wszędzie nie będę instalował edytora do php oraz Krasnala 2.7.

sk0rp - 2009-09-02 18:50:15

nie lepiej napisac to w js?
nie potrzebujesz specjalnie serwera no i nie trzeba przeladowywac strony ;)

co do ilosci obrazen, lepiej by bylo moc recznie wybrac z dostepnych (input select) - czyli wartosci pomiedzy min - max

jesli nie znasz za dobrze js, wrzucam to co naskrobalem w pare min :)
na tej podstawie reszta powinna byc prostsza ;)

Kod:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="language" content="pl" />
  <title>Kalkulator Obrażeń - HOMM3</title>

  <script>
    function calc() {
      // pobieramy dane i obiekt wynikow
      var aattack = document.getElementById('aattack').value;
      var aamount = document.getElementById('aamount').value;
      var abase = document.getElementById('abase').value;
      var ddefense = document.getElementById('ddefense').value;
      var damount = document.getElementById('damount').value;
      var dhp = document.getElementById('dhp').value;
      var oResult = document.getElementById('result');
      
      // obliczamy parametr
      var param = 0;
      if (aattack > ddefense) {
        param = 0.05;
      } else if (aattack < ddefense) {
        param = 0.025;
      }
      
      // obliczamy wynik i go prezentujemy
      var iResult = aamount * abase * (1 + param * (aattack - ddefense));
      oResult.innerHTML = 'obrażenia: ' + iResult;
    }
  </script>
</head>

<body>

<form onsubmit="calc(); return false;">
  <h4>Agresor</h4>
  <div>
    <label for="aattack">Atak: </label>
    <input type="text" name="aattack" id="aattack" />
  </div>
  <div>
    <label for="aamount">Ilość: </label>
    <input type="text" name="aamount" id="aamount" />
  </div>
  <div>
    <label for="abase">Podstawa ataku: </label>
    <input type="text" name="abase" id="abase" />
  </div>
  
  <h4>Obrońca</h4>
  <div>
    <label for="ddefense">Obrona: </label>
    <input type="text" name="ddefense" id="ddefense" />
  </div>
  <div>
    <label for="damount">Ilość: </label>
    <input type="text" name="damount" id="damount" />
  </div>
  <div>
    <label for="dhp">Punkty życia: </label>
    <input type="text" name="dhp" id="dhp" />
  </div>
  
  <div>
    <input type="submit" value="Oblicz" />
  </div>
  
</form>

<div id="result"></div>

</body>
</html>
Cohen - 2009-09-03 08:14:10

Może i byłoby lepiej. Ale javascript według mnie jest strasznie nieczytelny. W PHP mam kilka takich elementów składni, które pomagają naprawdę pisać (prawie) wszystko. Jednak narazie nie mam czasu na zajęcie się kalkulatorem, ale projekt ten jest dalej aktualny.

Do javascriptów nie mam też przekonania, gdyż wykonują się po stronie przeglądarki klienta. Nie lubię polegać na tym, że każdy ma nowoczesną przeglądarkę i nie wyłącza JavaScriptów. Tacy też się trafiają. A co z odwiedzającymi z Lynx?

Javascripty mają taką cudowną właściwość, że trudno się na nich pracuje.

A jeszcze też jest aspekt praktyczny. Zawsze ktoś może mi ukraść kod źródłowy bez żadnych włamań. Tylko chodząc po linkach i patrząc kod źródłowy. Jakby JavaScript nie był jawny może bym tak zrobił. Nie lubię jak ktoś mnie okrada z JS. Dlatego stosuje go tylko w wersji basic. Tylko podstawowe elementy.

Dlatego utworzyłem tablicę asocjacyjną zawierającą te informacje. PHP kod będzie się nimi posługiwał do poprawnej pracy. Potrzebny tylko formularz HTML i odpowiedni kod PHP odbierający dane oraz je używający.

Jednak już teraz nie pamiętam struktury kodu PHP, dlatego musze go poważnie przeanalizować. Minęło już okolo 3 tygodni od pierwszych prac. Ale szkoda jakby to poszło na marne. Dlatego projekt przechodzi w stan uśpienia. Wydrukuje go i przeanalizuje. Napiszę kod PHP i zobaczymy czy będzie działać poprawnie.

sk0rp - 2009-09-03 17:01:12

Do javascriptów nie mam też przekonania, gdyż wykonują się po stronie przeglądarki klienta.

Kalkulator obrazen nie jest raczej aplikacja w ktorej mialoby znaczenie czy mozesz ufac klientowi. Klient odpala ja jedynie z mysla o sprawdzeniu danych dla siebie. Walidacja jest tutaj nie potrzebna, moze byc jedynie pomocna dla samego uzytkownika (takie dodatkowe ulatwienie) - nie ma tu bowiem mowy o modyfikacji jakiejs bazy danych ;)

Nie lubię polegać na tym, że każdy ma nowoczesną przeglądarkę i nie wyłącza JavaScriptów. Tacy też się trafiają. A co z odwiedzającymi z Lynx?

To stwierdzenie moze mialoby znaczenie, ale jakies 10 lat temu. Obecnie nawet w mojej komorce mam przegladarke swietnie obslugujaca duzo bardziej zaawansowane skrypty :). Ciezko tez namierzyc osoby wylaczajace javascript. Jesli juz ktos to robi to jest swiadomym i zaawansowanym uzytkownikiem i spokojnie sobie z takim fantem poradzi ;).

Javascripty mają taką cudowną właściwość, że trudno się na nich pracuje.

Javascript jest trudniejszy w nauce niz podstawy php, tu sie zgodze. Jednak jesli myslisz o programowaniu w php na powaznie, lub nawet dla samej zabawy, wczesniej czy pozniej zetkniesz sie z koniecznoscia pisania i w javascripcie

A jeszcze też jest aspekt praktyczny. Zawsze ktoś może mi ukraść kod źródłowy bez żadnych włamań. Tylko chodząc po linkach i patrząc kod źródłowy. Jakby JavaScript nie był jawny może bym tak zrobił. Nie lubię jak ktoś mnie okrada z JS. Dlatego stosuje go tylko w wersji basic. Tylko podstawowe elementy.

Sprobuj tego: http://dean.edwards.name/packer/


Powodzenia w rozwijaniu projektu.
Jakbys jednak sie zdecydowal na js, to sluze pomoca ;)
3871108

Cohen - 2009-09-04 12:04:39

Zaciemnianie kodu. To jedyna technika ochrony. Hmm, base64. Może kiedyś popiszę w JavaScript. Narazie nie mam przekonania do niego. PHP jest stosunkowo młodym tworem ;p. I ma obsługę XML, PDF, generowanie grafiki i flashu? JavaScript ma takie?

Nie, obsługę XML ma, ale tylko działa ta technika pod Internet Explorer (wykorzystuje Active-X). Nie lubię tworzyć zamkniętych kodów. XML lepiej czyta się z pomocą klasy PHP - XML Simple. Ale JS najlepiej nadaje się do wizualnych galerii zdjęć, obsługi formularzy.
Poza tym nie zapominajmy że Java Script najlepiej działa tylko z kilkoma przeglądarkami, receptą na działanie jest pisanie pętli testujących przeglądarke i dającą odpowiedni kod. Głupie.
W PHP mamy wykonywane operacje po stronie serwera, tu nie ma wersji przeglądarek. Tylko wersje PHP obsługiwane przez serwer.

Tutaj już mam gotowy plik z danymi do kalkulatora. Urywek kodu PHP:

<?
$array[1] = array('Nazwa'=>'Pikier','Atak'=>4,'Obrona'=>'5','Min'=>1,'Max'=>3,'Zycie'=>10);
?>

Tak wygląda element tablicy asocjacyjnej której elementy są argumentem innej tablicy. W tablicy jest 141 elementów. Dostęp do takiej jest bardzo prosty:

<?
echo $array[1]['Nazwa']; // wyświetli Pikier
?>

Zaś to można wykorzystać tak, na przykład tworząc dwa pliki php (jeden gotowy). Plik przetwarzający dane który przekierunkowuje na początkowy adres formularza i pod nim zwraca rezultat funkcji.
Zaś dane można przekazywać za pomocą POST formularza. W którym mamy tylko kilka opcji:
Pole wyboru jednostki broniącej się oraz atakującej, oraz dwa pola na wpisanie liczby jednostek.

Samo zrobienie ładowania statystyk jednostki można zrobić za pomocą elementu SELECT formularza. Tutaj będzie musiał napisać formularz z bardzo dużą liczbą podpunktów (tyle ile jednostek), podskrypt warunkujący wartość argumentu który będzie oznaczał później indeks w tablicy zawierającej tablice asocjacyjne:

<?php
$array[$nr_indeksu]['element_tablicy_asocjacyjnej'];
?>

Który zaś będzie warunkowany przy użyciu pętli switch i w case będzie przeprowadzana cała operacja $nr_indeksu=1 dla Pikiera etc a następnie wyjście z dalszego przetwarzania pętli switch (ma być tylko jedna operacja). Skrypt będzie długi. Nie ma lepszej możliwości.

Kiedy już będzie przyjęty nr indeksu w naszym fragmencie skryptu:

$array[$nr_indeksu]['element_tablicy_asocjacyjnej'];

Zamiast napisu: element_tablicy_asocjacyjnej, będzie jeden z listy: Nazwa, Atak, Obrona, Min, Max, Zycie. Co dla każdego potrzebnego zrobię następną zmienną.
Dla obrońcy liczy się Nazwa, Obrona, Zycie.
Dla napastnika: Nazwa, Atak, Min, Max.

Podsumując. Trochę mętnie to napisałem.
* 1 plik będzie z formularzem wyboru jednostek i ich liczby.
* 2 plik tablica asocjacyjna zawierająca ilości jednostek.
* 3 plik będzie przejściowy: będzie to potwierdzenie statystyk jednostek (nie będzie potrzebne jeśli będzie wszystko działać poprawnie).
* 4 plik będzie zaś głównym plikiem funkcyjnym: będą tutaj obliczone obrażenia Min i Max albo random (wylosowane),
* na koniec obliczeń zostanie przekierunkowanie na 1 plik, gdzie pod formularzem wyświetli wyniki, albo w 4 pliku gdzie też będzie link do strony z formularzem.
Jednak de facto mam mieć 3 pliki, z czego jeden gotowy z informacjami na temat jednostek i ich statystyk.

Trochę mi się z tym zejdzie. W wersji bez udziału bohatera oraz dodatkowych warunków. C++ i PHP mają bardzo podobną składnię, dla mnie jest ona bardzo czytelna i przyjemna, mówię o PHP 5.xx.
Odnośnie Java Script mogę się mylić, można się ze mną o tym kłucić, ale po prostu to język już stary wywodzi sie z Javy, to okrojona wersja Javy. Java Script daje tylko okrojone możliwości. A sposoby dojść do elementów (wykazujące cechy programowania obiektowego) trochę irytujące.
Nie da się w nim skutecznie programować gdy się nie operuje na obiektach. W PHP da się. Choć też są tam rozbudowane moduły do pracy z obiektami. Ale tutaj może być tylko albo aż dodatkiem. W PHP mam swobodę.
Na razie nie czuje głębokiej potrzeby zaciemniania wszystkiego w programowanie obiektowe, tak jak jest w Java Scripcie.

@@
Dziś zajmę się pisaniem formularza i przetwarzaniem informacji (1 plik ukończyć zamierzam, a 3 zacząć).

sk0rp - 2009-09-04 13:04:26

Zaciemnianie kodu. To jedyna technika ochrony. Hmm, base64. Może kiedyś popiszę w JavaScript. Narazie nie mam przekonania do niego. PHP jest stosunkowo młodym tworem ;p. I ma obsługę XML, PDF, generowanie grafiki i flashu? JavaScript ma takie?

Do czego Ci potrzebne XML, PDF, generowanie grafiki i flash w kalkulatorze obrazen? Rozwiazania dobiera sie do potrzeb.

Nie, obsługę XML ma, ale tylko działa ta technika pod Internet Explorer (wykorzystuje Active-X). Nie lubię tworzyć zamkniętych kodów. XML lepiej czyta się z pomocą klasy PHP - XML Simple. Ale JS najlepiej nadaje się do wizualnych galerii zdjęć, obsługi formularzy.

Obsluga xml z tego co sie orientuje w javascripcie jak najbardziej jest i bynajmniej nie jest zwiazany z koniecznoscia odwolywania sie do active-x ;)
Wpisz w google "javascript xml". Ja co prawda nigdy nie musialem z tego korzystac - sa prostsze sposoby przekazywania danych do javascriptu i bardziej wydajne.
Ale ponownie, po co Ci tutaj xml, z tego co zauwazylem zdecydowales sie na tablice asocjacyjna :). Dokladnie to samo mozesz zrobic w js (tutaj zastepuja je wdziecznie obiekty). Gdy uzyjesz notacji zwiezlej, przy pomocy nawiasow, nawet specjalnie roznicy nie zauwazysz ;)

Poza tym nie zapominajmy że Java Script najlepiej działa tylko z kilkoma przeglądarkami, receptą na działanie jest pisanie pętli testujących przeglądarke i dającą odpowiedni kod. Głupie.
W PHP mamy wykonywane operacje po stronie serwera, tu nie ma wersji przeglądarek. Tylko wersje PHP obsługiwane przez serwer.

Troche pisalem w js i z tego co wiem, raczej sie juz nie korzysta z przegladarek go nie obslugujacych. Wspomniany przez Ciebie lynx, bez js, odszedl juz do lamusa ;)
Zreszta, ponownie, wez pod uwage target. Kto bedzie uzywac twojego kalkulatora? Ktos kto ma na pokladzie tylko lynxa? Watpie ;)

Odnośnie Java Script mogę się mylić, można się ze mną o tym kłucić, ale po prostu to język już stary wywodzi sie z Javy, to okrojona wersja Javy. Java Script daje tylko okrojone możliwości. A sposoby dojść do elementów (wykazujące cechy programowania obiektowego) trochę irytujące.

Javascript nie wywodzi sie o dziwo z Javy. Nazwa to byl czysty chwyt marketingowy ;) Jedyne co miala wspolnego z java, to to, ze pozwala na prosta z nia komunikacje. Mozna bylo odwolywac sie bezposrednio do metod obiektow javowych.
Mozliwosci i ograniczenia kazdy jezyk ma inne. Wazne jest przy projektowaniu aplikacji to by wybrac ten jezyk ktory ma akurat te mozliwosci na ktorych nam zalezy przy zalozonej funkcjonalnosci :)
W tym wypadku js wydaje mi sie rozwiazaniem idealnym. Skrypt jest stosunkowo prosty, opiera sie na formularzach i powinien dzialac szybko.

Cohen - 2009-09-04 14:46:14

Hmm, wszystkie skrypty są dość proste o ile się poświęci na nie X czasu. PHP i JS mają pewne zbieżności, ale to PHP ma ciekawsze narzędzia. Takie jak zmienne zmienne.
Czy są zmienne zmienne w JS?? Bo jest to ceniony przeze mnie mechanizm.

Następny mechanizm: zmienne statyczne, które jak pewnie sie domyślasz przechowują wartość, nawet po wywołaniu funkcji. Takim mechanizmem zrobiłem za pomocą 3 funkcji - tabelę prezentującą informacje o grze Heroes 3. Po drobnych zmianach jestem wykorzystać ten PHP raczej wszędzie. Opis funkcji:
* tabini() generuje znacznik <table>,
* tabzaw(lista argumentow) generuje wiersz tabeli z odpowiednią zawartością, tutaj występują zmienne globalne i statyczne, wszystko napisane w tzw. programowaniu strukturalnym,
* tabend() zamyka tabelę </table>.

A kod źródłowy w postaci HTML byłby trudny do napisania bez błędów. I zająłby ponad 2h więcej. Mam tutaj generowanie tabel, znaczników i innych konstrukcji PHP.
PHP to język świetny. Ale niedługo spróbuje alternatyw (jednak tylko offline - potrzebne serwery dedykowane). Wracając do JS: czy potrafi ono tworzyć zmienne zmiennych ?

sk0rp - 2009-09-04 17:20:53

Zacznijmy od tego, ze PHP i JS to zupelnie inne jezyki, kazdy z nich sluzy do czego innego, wiec bez sensu to nawet porownywac ;) Jedyne co je laczy to to, ze oba sa skryptowe oraz ze sa uzywane glownie dla stron www.

"zmienne zmiennych" masz pewnie na mysli dynamiczne odwolywanie sie do zmiennych, tak? W js do tego sluzy funkcja eval(), ktora podobnie jak ta z php, wykonuje kod zapisany jako ciag znakow.

Takie wykonywanie kodu, czy zmienne postaci $$zmienna w php wykorzystywalem moze 2 razy ;) Poprostu zazwyczaj nie ma potrzeby na cos takiego. Co innego dynamiczne modyfikowanie definicji klasy (refleksje). Co ciekawe, obie te rzeczy sa bardzo czesto wykorzystywane w js, o wiele czesniej niz w php.

Nadal jednak nie widze zwiazku tych funkcjonalnosci z kalkulatorem obrazen :)