Saya tidak dapat membuat arsitektur yang bagus untuk permainan kartu saya. Saya perlu bantuan untuk memahami bagaimana game biasanya dirancang.
Pertama, saya akan menjelaskan aturan permainan.
Aturan Game
Mempersiapkan- Ada empat pemain, masing-masing dua pemain membentuk satu tim.
- Setiap pemain mendapat 12 kartu yang dikocok
- Ada 4 kartu buta di atas meja (sungai)
- Urutan pemain seperti ini
- Setiap pemain dapat melewati atau memilih nomor yang lebih besar dari taruhan saat ini antara 100 hingga 160
- Taruhan dimulai dari pemain pertama dan lingkaran hingga lulus tim
- Setelah pemain lulus mereka tidak bisa bertaruh lagi
- Tim yang memenangkan putaran taruhan setidaknya harus mengumpulkan poin yang sama dengan taruhan mereka untuk memenangkan pertandingan
Tim yang kalah dalam ronde pertaruhan seharusnya tidak membiarkan tim mereka mencapai tujuan mereka
Jika tim yang memenangkan ronde pertaruhan mendapatkan semua poin, tim lain akan mendapatkan poin negatif sama dengan taruhan mereka
- jika tim yang kalah pada putaran taruhan mengumpulkan semua poin, tim lain akan mendapatkan poin negatif ganda
Game mengalir dan mengumpulkan poin
- Pemain yang memenangkan ronde pertaruhan ( raja ) mendapat empat kartu tersisa di meja.
- Kemudian dia dapat menyimpan satu set empat kartu di bank kartu tim mereka tanpa memainkannya.
- Raja akan memilih jas sebagai jas penguasa dan membiarkan orang lain tahu itu
- King memulai permainan dengan meletakkan kartu dari tangannya di atas meja. Setiap pemain lain harus bermain dalam urutan ini
- jika mereka memiliki kartu yang sama di tangan mereka, mereka harus memainkan salah satu kartu itu
- jika mereka tidak memilikinya, mereka dapat memainkan setelan lain
- Setelah semua pemain lain memainkan tangan mereka, pemenang putaran akan:
- Orang yang memiliki kartu tertinggi jika semua kartu sama
- Orang yang memiliki kartu "penguasa" tertinggi jika ada
- Pemenang putaran akan mengumpulkan kartu dan menaruhnya di bank mereka
- Pemain yang memenangkan babak sebelumnya akan memulai babak berikutnya
- Ini akan berlanjut sampai tangan semua orang kosong
Menghitung poin
- Memenangkan setiap putaran memiliki 5 poin. Ini berarti setiap 4 kartu memiliki setidaknya 5 poin.
- Memiliki Ace, 10 atau 5 di bank masing-masing menambah 5 poin
Desain saya
Kelas
class Card {
string suit;
string rank
}
class Deck {
List cards = [];
List suits = ['S', 'H', 'D', 'C'];
List ranks = ['1', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'];
private void init(){..}
void shuffle(){...}
}
class Game{
Deck deck = new Deck();
Player player1;
Player player2;
Player player3;
Player player4;
int _isOn = 0;
Game(this.player1, this.player2, this.player3, this.player4){
deck.makeCards();
deck.shuffle();
start();
}
void start(){
player1.cards.addAll( deck.cards.getRange(0, 12) );
player2.cards.addAll( deck.cards.getRange(12, 24) );
player3.cards.addAll( deck.cards.getRange(24, 36) );
player4.cards.addAll( deck.cards.getRange(36, 48) );
deck.cards.removeRange(0, 48);
}
String toJson(){
}
String toString(){
}
}
class Player{
String name;
int points;
List cards = [];
Player(this.name, {this.points});
String toJson(){}
String toString(){}
}
Masalahku
Sekarang saya telah mendefinisikan semua kelas ini, saya tidak tahu bagaimana mengikat definisi ini ke database (seperti Mongo) dan mengontrol alur permainan.
- Kemana semua logika itu pergi?
- Bagaimana cara menjaga status dalam skenario server / klien?
catatan:
Saya menggunakan Dart untuk memprogram ini tetapi saya tidak ingin jawaban ditulis dalam Dart.
architecture
Mohsen
sumber
sumber
Jawaban:
Anda membuat kesalahan klasik di sini. Seseorang memberi tahu Anda untuk membuat aplikasi web untuk permainan kartu, dan Anda mencoba menentukan cara membuatnya sekaligus. Pendekatan ini membingungkan bahkan para programmer terbaik, karena penelitian telah menunjukkan bahwa Anda hanya dapat menyimpan 7 informasi yang tersedia di pikiran Anda pada satu waktu. Mencoba menyulap dengan lebih banyak membutuhkan konsentrasi yang intens dan Anda tidak bisa berharap untuk mempertahankannya.
Sebaliknya, cobalah untuk lebih fokus pada penulisan perpustakaan permainan kartu seperti seseorang akan memanggil perpustakaan Anda untuk memainkan permainan kartu Anda. Anda tampaknya memiliki awal yang sangat baik pada model Anda. Itu bagus, tetapi Anda harus membuat
Game
antarmuka tempat penelepon dapat menggunakan gerakan bergerak dan sebagainya.Jadi saya berharap Game akan memiliki beberapa metode baru seperti:
Singkatnya, semua yang perlu Anda ketahui untuk menjalankan game, Anda dapat melakukannya menggunakan objek Anda
Game
. Hanya setelah Anda memilikinya, Anda melanjutkan ke langkah 2.Tulis kelas terpisah yang tujuan utamanya adalah untuk menerima permintaan masuk, menerapkannya
Game
dan mengirim hasilnya kembali ke pengguna. Jika Anda ingin mengonversiGame
output ke JSON, Anda melakukannya di luarGame
karena itu bukan tujuanGame
!Untuk tetap menggunakan informasi ini, Anda bisa membuat kelas lain yang menyediakan antarmuka ke MongoDB. Kelas ini tidak akan tahu keberadaan
Game
dan tidak ada yangGame
tahu keberadaan kelas ini.Singkatnya, fokuslah pada komponen individual, dan Anda akan baik-baik saja. Anda mulai salah ketika Anda mencoba untuk mempertimbangkan terlalu banyak aspek ketika menulis program Anda. Seperti yang pernah dikatakan oleh seorang profesor yang bijak kepada saya, " Ketahuilah dan rangkul fakta bahwa program pertama yang Anda tulis untuk sebuah proyek akan ditulis ulang secara keseluruhan pada akhirnya. "
sumber
Mulailah dengan meletakkannya di
Game
kelas Anda .Ini adalah permainan berbasis aturan dengan jumlah negara terbatas. Saya akan memodelkannya sebagai mesin negara . The pola negara akan membantu Anda sangat.
Akhirnya Anda akan ingin mengekstrak FSM ke dalam kelas yang terpisah, tetapi jangan khawatir tentang itu untuk saat ini.
Ini tidak mungkin dijawab tanpa mengetahui lebih lanjut tentang pengaturan Anda. Menerialisasikan objek Game Anda dan menyatakan ke basis data setiap belokan mungkin berhasil.
sumber