• 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
221 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,330 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,330 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 (212,630 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 (212,630 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 (212,630 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ź 223 wizyt
pytanie zadane 1 lipca 2020 w PHP przez Samek2222 Początkujący (440 p.)
0 głosów
1 odpowiedź 459 wizyt
pytanie zadane 16 kwietnia 2020 w PHP przez spicedagger Użytkownik (530 p.)
0 głosów
0 odpowiedzi 110 wizyt
pytanie zadane 4 czerwca 2021 w PHP przez mikey Użytkownik (820 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...