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

Osadnicy Laravel + Vue

0 głosów
166 wizyt
pytanie zadane 9 listopada 2019 w Nasze projekty przez kordix Gaduła (3,430 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,030 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,430 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,030 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 (207,390 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,430 p.)
Masz z grubsza jakąś wizję, jak wówczas wyglądałyby kolumny w bazie danych?
komentarz 10 listopada 2019 przez Ehlert Ekspert (207,390 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,430 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 (207,390 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,430 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ź 149 wizyt
pytanie zadane 1 lipca 2020 w PHP przez Samek2222 Początkujący (440 p.)
0 głosów
1 odpowiedź 182 wizyt
pytanie zadane 16 kwietnia 2020 w PHP przez spicedagger Użytkownik (530 p.)
0 głosów
0 odpowiedzi 58 wizyt
pytanie zadane 4 czerwca 2021 w PHP przez mikey Użytkownik (800 p.)

88,311 zapytań

136,904 odpowiedzi

305,517 komentarzy

58,593 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...