Sumber daya utama dalam gim saya adalah massa , disimpan sebagai angka floating point yang berubah seiring waktu. Node sumber daya menambah massa dan pabrik mengeringkannya. Misalnya, jika saya memiliki simpul sumber daya menghasilkan 5 massa per detik, saya akan mendapatkan 5 * deltaT
massa setiap langkah gim. Massa ditampilkan dibulatkan ke bilangan bulat terdekat, dan indikator untung / rugi ditampilkan oleh persepuluh.
Bagaimana saya harus menangani massa yang memukul nol? Ini menciptakan kondisi balapan jika banyak pabrik mencoba membangun sekaligus: Pabrik-pabrik pertama dalam antrian atau yang mengalirkan lebih sedikit sumber daya mendapat prioritas begitu beberapa sumber daya lebih banyak masuk dan karenanya membangun lebih cepat daripada yang lain.
Bagaimana saya bisa mengatasi ini? Haruskah saya melewatkan langkah ini sepenuhnya?
sumber
Jawaban:
Saya setuju dengan Petr: Tidak ada cara yang pasti untuk melakukannya. Bagaimana Anda ingin melakukannya adalah masalah bagaimana Anda ingin merancang game Anda.
Dalam keadaan ini, bagaimanapun, saya pikir itu segera jelas jenis mekanik yang Anda coba selesaikan: Anda hanya ingin menghasilkan sesuatu secepat mungkin, dalam jumlah massa yang Anda miliki.
Memproduksi dalam kapasitas
Saya akan mengambil daun dari buku Panglima Tertinggi, karena Anda melakukan sistem yang sangat mirip dengan mereka: Jika Anda memproduksi di atas kapasitas, cara paling rapi untuk mengatasinya adalah memiliki produksi yang melambat di seluruh papan. Menurunkan kapasitas produksi sebenarnya cukup sederhana.
Mekanik kecepatan produksi
Setiap langkah pembaruan, pabrik Anda tidak hanya menghasilkan jumlah yang ditentukan: mereka beroperasi dengan kecepatan produksi , yang menentukan berapa banyak kemajuan yang mereka buat dalam setiap langkah dan berapa banyak massa yang mereka gunakan. Ketika Anda memproduksi pada kapasitas 75%, pabrik Anda menghasilkan kemajuan 75% setiap langkah dan menggunakan massa hingga 75% dibandingkan dengan kapasitas 100%.
Untuk menghitung kecepatan produksi, sebelum membangun apa pun, Anda harus meminta pabrik Anda untuk menentukan total sumber daya yang akan digunakan langkah ini dengan kapasitas penuh. Kemudian Anda melakukan perhitungan sederhana:
Katakanlah Anda membutuhkan 125 massa langkah ini untuk menghasilkan pada kapasitas penuh, tetapi hanya 100 massa langkah ini. Persamaan ini memberi Anda kecepatan produksi 0,8 (representasi desimal 80%). Ketika Anda memberi tahu pabrik-pabrik Anda untuk benar-benar melakukan pembangunan mereka , Anda menyerahkan nilai ini untuk memberi tahu mereka kecepatan apa yang sedang mereka bangun: dan sekarang produksi Anda melambat di seluruh papan.
Alternatif
Anda juga dapat mulai menutup pabrik untuk sementara hingga kapasitas produksinya berkurang, dan bisa sangat menarik untuk melihat bahwa terjadi pada pabrik yang jauh dari generator ketika kapasitasnya sangat rendah.
Berbagai sumber daya?
Terserah Anda bagaimana Anda menangani ini; ada banyak pilihan. Yang paling sederhana mungkin untuk menghitung kapasitas produksi untuk masing-masing sumber daya dan kemudian memilih yang terendah , sehingga sumber daya terlemah Anda menjadi hambatan bagi yang lainnya.
sumber
Walaupun saya menyukai jawaban Jonathan Hobbs, saya pikir sistem antrian lebih sederhana:
Ini mungkin akan bekerja rata-rata dengan cara yang sama dengan implementasi Jonathan. Namun solusi Jonathan mungkin memberikan masalah jika kecepatan kerja ditetapkan sangat rendah dan implementasi saya dapat memiliki pabrik dengan sumber daya yang sangat tinggi untuk frame ini, membuatnya memblokir pabrik lain untuk beberapa frame.
sumber
Saya sedang mengembangkan sistem pasokan yang serupa dalam permainan saya sendiri, jadi saya juga telah memikirkan bagaimana menyelesaikan masalah kunci-pasokan, dan favoritisme. Untuk menggambarkan masalah, saya akan membuat contoh sederhana:
Jika Anda memiliki daftar: [producer1, consumer1, consumer2, consumer3] dan Anda memperbarui secara berurutan, mulai dari persediaan = 0, Anda akan mendapatkan ini:
konsumen1 mendapatkan semua kesenangan, sementara konsumen 2 dan 3 kelaparan sampai konsumen 1 telah puas. Bergantung pada gim Anda, ini mungkin tidak diinginkan. Saya tahu dalam permainan saya, bukan. Ketika saya menyiasatinya, saya akan membuat antrian di mana konsumen yang telah diberi makan dalam satu centang akan pindah ke belakang antrian untuk centang berikutnya, yang saya percaya adalah apa yang didapat Roy T. Contoh di atas akan terlihat seperti ini:
Dengan cara ini, semua orang akan mendapatkan bagian yang adil dari sumber daya.
Saya juga berencana untuk mengimplementasikan antrian tambahan untuk digunakan sebagai antrian prioritas sehingga pengguna dapat memilih struktur tertentu untuk mendapat prioritas sumber daya. Antrian prioritas akan selalu dilayani sebelum antrian standar. Pastikan semua produsen diperbarui terlebih dahulu, lalu konsumsi semua sumber daya kedua, jika tidak antrian akan mogok ketika Anda menghasilkan sumber daya sebagian melalui tanda centang dan beberapa konsumen sudah kelaparan.
Jadi, rekaplah: Perbarui produsen, kemudian antrian prioritas, pindahkan konsumen ke akhir antrian prioritas, kemudian perbarui antrian standar, pindahkan konsumen ke akhir antrian standar.
sumber
Yah, saya akan memperluas ide John, karena kami membahas ini sedikit dalam obrolan .
sunting: Solusi ini sebenarnya hanya lebih disukai jika jumlah yang dikonsumsi relevan dengan seberapa sering pabrik harus mendapatkan sejumlah sumber daya. Jika semuanya sama, maka Anda memang bisa saja menggunakan antrian.
Solusi saya: semua pabrik terdaftar dalam antrian prioritas. Prioritas ditingkatkan karena pabrik menderita kelaparan. Kelaparan, prioritas, set ke nol ketika pabrik menghabiskan sumber daya. Prioritas utama selalu akan mendapatkan kumpulan sumber daya berikutnya.
Saat menentukan pabrik mana yang mendapatkan sumber daya apa, dalam beberapa jenis kode semu:
Dengan cara ini pabrik Anda akan membuat 1 produk masing-masing pada gilirannya, jika Anda ingin menyesuaikan dengan memperhitungkan akun konsumsi sehingga produk yang lebih murah dibuat lebih sering, Anda dapat meningkatkan prioritas dengan 1 / mengkonsumsi Akun misalnya.
sumber
Pertanyaan aneh.
Apa yang perlu Anda lakukan, tergantung pada logika permainan yang Anda buat. Anda dapat melakukan antrian, Anda dapat melewati. Bergantung pada bagaimana Anda berpikir game Anda seharusnya berperilaku. Koreksi saya, jika saya salah dengan pertanyaan Anda.
sumber
Anda dapat menyimpan sejumlah permintaan sumber daya total per centang untuk semua konstruksi. Jika satu penyimpanan sumber daya mencapai kurang dari jumlah yang disyaratkan ini, maka semua konstruksi akan berhenti sepenuhnya sampai penyimpanan telah mengumpulkan cukup untuk mendukung setidaknya 1 centang produksi. Kemudian produksi dapat dilanjutkan.
Jadi, alih-alih menyimpan laju produksi sebagai pelampung, ini biner - baik yang diproduksi pabrik Anda dengan kecepatan penuh atau tidak.
Yang sedang berkata, pendekatan ini pada dasarnya sama dengan jawaban Jonathan, untuk kasus-kasus khusus tingkat produksi 0,0 dan 1,0 - float f sewenang-wenang dengan 0,0 <= f <= 1,0 mungkin lebih elegan karena Anda tidak mendapatkan pergerakan jumlah penyimpanan dendeng , tetapi logikanya harus sedikit lebih sederhana.
sumber