• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Osadnicy Laravel + Vue

VPS Starter Arubacloud
0 głosów
330 wizyt
pytanie zadane 9 listopada 2019 w Nasze projekty przez kordix Gaduła (3,910 p.)

Zrobiłem klasyczną apkkę w stylu osadnicy.

https://github.com/kordix/osadnicy

Mam tu trzy surowce i magazyny mogę robić upgrade i surowce nie mogą przekroczyć maksymalnego stanu.

Front jest zrobiony we Vue.

Chciałem się pokusić o logowanie się przez api ale ostatecznie przeniosłem routy do web.php

Surowce się naliczają na podstawie czasu od ostatniego update'a

public function updatestats(Request $request)
    {
        $id = Auth::id();
        $time = Stat::find($id)->updated_at;
        $wood = Stat::find($id)->wood;
        $woodfactor = Stat::find($id)->woodfactor;
        $stone = Stat::find($id)->stone;
        $stonefactor = Stat::find($id)->stonefactor;
        $iron = Stat::find($id)->iron;
        $ironfactor = Stat::find($id)->ironfactor;

        $interval = Carbon::now()->diffInSeconds($time);
        $woodamount = $interval * $woodfactor;
        $stoneamount = $interval * $stonefactor;
        $ironamount = $interval * $ironfactor;


        Stat::find($id) ->update([
            'wood' => $wood += $woodamount,
            'stone' => $stone += $stoneamount,
            'iron' => $iron += $ironamount,
        ]);
    }


Co mnie tu razi to analogia dotycząca surowców. Wszystkie działają tak samo różnica jest właściwie tylko w nazwie.

Już lepiej mam coś zrobione na froncie w funkcji która sprawdza czy stan nie przekracza magazynu: 

   checkMax(){
            let self = this;
            let resources=['wood','stone','iron'];
            for(let i=0;i<resources.length;i++){
                let operand = resources[i];
                let max = self.dane[operand+'Store']*100+200;

                if (self.dane[operand] > max){
                    self.dane[operand]=max;
                    console.log('działa');
                }

            }
        }


Ale pytanie czy można to zrobić w ogóle jakoś inaczej?

Jeszcze myślę jaka najlepsza byłaby tu baza danych, teraz migracja wygląda tak:

   

Schema::create('stats', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->float('wood')->default(100);
            $table->float('stone')->default(0);
            $table->float('iron')->default(0);
            $table->float('gold')->default(0);
            $table->float('woodLevel')->default(1);
            $table->float('stoneLevel')->default(1);
            $table->float('ironLevel')->default(1);
            $table->integer('woodStore')->default(1);
            $table->integer('stoneStore')->default(1);
            $table->integer('ironStore')->default(1);
            $table->timestamps();
        });


Pytanie czy trzeba robić tyle pól czy jakoś jednym polem ograć surowce, może lepiej by było mapowanie obiektu JSON jako string do jednego pola?

2 odpowiedzi

0 głosów
odpowiedź 9 listopada 2019 przez Kamil Naja Nałogowiec (27,550 p.)

Czemu masz w repo skompilowany js wielkości ponad 1.4 mb i nie masz plików źródłowych js?  https://github.com/kordix/osadnicy/tree/master/public/js 

komentarz 10 listopada 2019 przez kordix Gaduła (3,910 p.)
moge dodać public js do gitignore, myślisz że wszyscy to robią? zaleta jest taka że można odpalic js bez node'a

Zródłowy jest w resources/js
komentarz 10 listopada 2019 przez Kamil Naja Nałogowiec (27,550 p.)
Moim zdaniem ten plik powinien być ignorowany, nie jest kodem źródłowym, tylko wynikiem kompilacji.
0 głosów
odpowiedź 10 listopada 2019 przez Ehlert Ekspert (214,020 p.)
edycja 10 listopada 2019 przez Ehlert

Kilka słów ode mnie:

  1. Backed nie jest do oceny, bo to Larva. Oprócz jakichś konfiguracji i pokracznego kontrolera, jest tam kod frameworka także nie wiem co mam oceniać.
  2. Jeśli już... Przytoczony przez Ciebie kontroler jest... Kiepski. Cała logika w nim, wszystko statycznie. Spróbuj napisać do niego test jednostkowy. 
  3. Front imo powinien mieć osobne repo. 
  4. Nie commituj do repo jakichkolwiek buildów. Tak nie wygląda dobre Flow. Każdy powinien pobrać repo, zainstalować zależności i zrobić build. 
  5. Surowce powinny być traktowane warstwą abstrakcji, po stronie domeny backendu jakiś value object, po stronie frontu jakąś spójna struktura. W kodzie nie powinieneś wiedzieć którego surowca dotyczy problem.
  6. Jeden plik vue na całą grę?
komentarz 10 listopada 2019 przez kordix Gaduła (3,910 p.)
Masz z grubsza jakąś wizję, jak wówczas wyglądałyby kolumny w bazie danych?
komentarz 10 listopada 2019 przez Ehlert Ekspert (214,020 p.)
Po pierwsze oddzielna tabela na typ surowca. Każdy rekord mapowany do innego typu z jednym wspólnym bazowym dla wszystkich.

Oddzielna tabela na operacje na surowcach.
komentarz 10 listopada 2019 przez kordix Gaduła (3,910 p.)

Każdy rekord mapowany do innego typu z jednym wspólnym bazowym dla wszystkich.

Czyli zrobić osobną tabelke typu resource_id, resource_name, bardziej chodzi mi o zapisanie ilości dla każdego usera - to zrobić w jednej kolumnie? Właśnie myślałem czy nie zapisywać tego w postaci JSON w stylu   id usera|{iron:50,stone:50,wood:50} itd. właściwie to będą id surowców zamiast nazw tym trybem

komentarz 11 listopada 2019 przez Ehlert Ekspert (214,020 p.)
Co zły pomysł. Co jeśli będziesz chciał dodać surowiec? Poza tym nie ma żadnej historii.

Projektujesz grę przez pryzmat tego jak i co będziesz trzymał w bazie danych.
komentarz 11 listopada 2019 przez kordix Gaduła (3,910 p.)
To w jaki sposób przechowywalibyśmy ilość surowców dla każdego gracza? Podejrzewam że masz wizję taką że na każdą operację na surowcu jest wiersz w tabeli stylu

resource_id|user_id|ilość|data

 i na bazie historii wylicza się aktualna ilość surowca?

Podobne pytania

0 głosów
1 odpowiedź 349 wizyt
pytanie zadane 1 lipca 2020 w PHP przez Samek2222 Początkujący (440 p.)
0 głosów
1 odpowiedź 654 wizyt
pytanie zadane 16 kwietnia 2020 w PHP przez spicedagger Użytkownik (530 p.)
0 głosów
0 odpowiedzi 120 wizyt
pytanie zadane 4 czerwca 2021 w PHP przez mikey Użytkownik (820 p.)

93,004 zapytań

141,968 odpowiedzi

321,247 komentarzy

62,340 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...