Bagaimana cara mendesain permainan kartu?


10

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

masukkan deskripsi gambar di sini

Pertaruhan
  • 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.


Jika ada yang melihat kode Anda dan menggunakannya sebagai titik awal, perhatikan bahwa Anda harus memilih A atau 1 di peringkat, tetapi jangan sertakan keduanya.
Ben

Jawaban:


10

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 Gameantarmuka tempat penelepon dapat menggunakan gerakan bergerak dan sebagainya.

Jadi saya berharap Game akan memiliki beberapa metode baru seperti:

getPlayers()        // Get all player info
getCurrentPlayer()  // Get information about the active player in his turn (hand, money to bet with, etc.)
fold()              // Current player folds and current player changes
bet(float amount)   // Current player bets and current player changes

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 Gamedan mengirim hasilnya kembali ke pengguna. Jika Anda ingin mengonversi Gameoutput ke JSON, Anda melakukannya di luar Gamekarena itu bukan tujuan Game!

Untuk tetap menggunakan informasi ini, Anda bisa membuat kelas lain yang menyediakan antarmuka ke MongoDB. Kelas ini tidak akan tahu keberadaan Gamedan tidak ada yang Gametahu 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. "


Selain itu, angka itu berkisar antara 3 hingga 9 tergantung orangnya - saya dapat melakukan 4 atau 5 tergantung pada seberapa waspada saya. Tes yang biasa adalah melihat sekelompok titik dan mencari tahu berapa banyak yang dapat Anda rasakan secara individu tanpa mengelompokkannya secara mental - pada usia 6, saya mulai secara otomatis mengelompokkannya menjadi 3 + 3, misalnya, dan tidak dapat dengan mudah memisahkannya lagi .
Izkata

@Izkata Itu menarik. Saya tidak menyadari bahwa ada tes untuk ini. Apakah Anda memiliki tautan?
Neil

1
en.wikipedia.org/wiki/… adalah sumbernya, saya percaya.
AakashM

1

Kemana semua logika itu pergi?

Mulailah dengan meletakkannya di Gamekelas 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.

Bagaimana cara menjaga status dalam skenario server / klien?

Ini tidak mungkin dijawab tanpa mengetahui lebih lanjut tentang pengaturan Anda. Menerialisasikan objek Game Anda dan menyatakan ke basis data setiap belokan mungkin berhasil.


Inilah bagian yang menyertai pada negara / FSM, dalam hal ini dari sebuah buku yang berfokus pada permainan: gameprogrammingpatterns.com/state.html
shmup
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.