Paul Cezanne, Pemain KartuSekali waktu, di Windows 95 ada permainan Microsoft Hearts. Bermain kartu online, dengan lawan di seluruh dunia. Jika ingatanku benar, maka pada Windows for Workgroups 3.11 (ya, saya menemukan semua artefak ini!) Ada versi untuk bermain di jaringan lokal menggunakan yang disebut NetDDE.
Saya tidak harus memilih permainan kartu untuk waktu yang lama. Seperti yang mereka katakan, apa yang kaya ... Jembatan tinggi dan preferensi jatuh karena ketidaktahuan mereka. Hanya ada satu hal yang
tersisa -
menghilang sebagai orang bodoh.
Situasi menjadi rumit oleh kenyataan bahwa sejauh ini saya tidak pernah terlibat dalam pengembangan "backend". Googling menuntun saya ke tempat yang tepat -
SignalR .
Di sini saya ingin mengucapkan beberapa kata antusias kepada SignalR. Perpustakaan yang terdokumentasi dengan baik yang sesuai dengan kebutuhan saya. Bores akan mengatakan bahwa itu hanya untuk Windows, baiklah, biarkan mereka mengertakkan gigi dengan iri. Meskipun tampaknya ada klien pertanian kolektif untuk iOS, saya tidak mempelajari masalah ini secara detail.
Pertanyaan selanjutnya adalah hosting. Lalu aku tidak berpikir lama, Azure ada di bawah lenganku.
Jadi apa yang saya inginkan?
- Cara pemain terhubung harus serupa dengan Microsoft Hearts. Pemain terhubung satu per satu, segera setelah jumlah yang tepat diperoleh - permainan dimulai. Bagi saya sendiri, saya memutuskan untuk membatasi diri pada pertandingan satu lawan satu - dan tidak ada yang menarik!
- Akan ada beberapa pemain di awal - bagaimana mereka mengetahui tentang satu sama lain? Kemudian muncul ide untuk mengirim semua orang yang ingin memainkan notifikasi push pada saat seseorang meluncurkan aplikasi dan terhubung ke server game. Agar tidak mencekik pengguna dengan dorongan, ia membuat batasan "tidak lebih dari sekali setiap N menit".
- Saya ingin statistik terperinci, hadiah, prestasi, dll.
- Saya ingin kartu dengan desain berbeda
- Saya ingin bermain dengan kenalan saya, dan tidak dengan siapa pun "yang dikirim Tuhan."
Apa yang saya gunakan dengan Azure?
- AppService sebenarnya adalah sebuah aplikasi yang terhubung dengan semua klien.
- SQL server + database SQL - untuk menyimpan statistik game.
Itu saja.
Baru-baru ini, saya juga menggunakan layanan distribusi push notification mereka. Tapi sepertinya mahal (10 dolar sebulan), selain itu, ternyata karena kesalahan penagihan Microsoft, saya telah membayar untuk dua layanan ini selama lebih dari setahun! Menyokong dukungan mengarah pada fakta bahwa mereka mengakui kesalahan dan menawarkan kompensasi sebanyak satu bulan. Setelah beberapa waktu, saya benar-benar meninggalkan layanan ini, menambahkan tabel lain ke database saya untuk menyimpan penandatanganan untuk push dan mengirimkannya sendiri dari aplikasi utama.
Saat ini, biaya hosting bulanan sekitar 400 r. Ini hanya biaya server SQL. Saya memiliki lalu lintas keluar kecil dan cocok dengan 5 GB gratis per bulan.
Pengembangan
Pengembangan berlangsung di Visual Studio 2015, untuk klien kerangka MVVM lampu MVVM digunakan.
Server kecil "dapur" (esthetes dan lemah jantung lebih baik untuk tidak menonton)
koneksi pengguna, mendorongpublic override Task OnConnected() { if (((DateTime.Now - LastPush).TotalSeconds) > 360) { LastPush = DateTime.Now; Task.Run(() => SendNotifications()); } return base.OnConnected(); }
pembuatan ruang permainan mengintip kartu teratas di geladak Tentang pelanggan
Untuk mengidentifikasi para pemain, fungsi LiveId pertama kali digunakan, lalu API API. Pada peluncuran pertama aplikasi, pemain diundang untuk memberikan akses ke akunnya (dari sana saya hanya mengambil nama dan id anonim, yang terlihat seperti ini: "ed4dd29dda5f982a"). Namun, pemain dapat bermain secara anonim, tetapi statistik permainannya tidak disimpan.
Untuk setiap pemain non-anonim disimpan:
1. tanggal pertandingan pertama / tanggal pertandingan terakhir
2. nama pemain / nama panggilan
3. jumlah game yang dimainkan / berapa banyak yang dimenangkan
4. alamat IP terakhir
5. hadiah diterima
Jika dua pemain non-anonim bermain dalam permainan, maka sebelum dimulai saya mendapatkan statistik dari permainan para pemain khusus ini (berapa banyak permainan yang mereka mainkan satu sama lain dan siapa yang menang berapa banyak). Untuk melakukan ini, id anonim yang diterima digunakan dalam kueri SQL.
Pada tangkapan layar di kiri atas Anda dapat melihat contoh (dapat diklik):

Tangkapan layar statistik umum (dapat diklik):

Selain itu, "kompetisi" diadakan di seluruh negara (pemain anonim juga berpartisipasi di sini, informasi diambil dari alamat IP):

Pemain dapat bertukar pesan pendek.
FoolHubProxy.On<string>("ChatMessage", (chatmessage) => synchrocontext.Post(delegate { PlayChatSound(); ShowMessageToast(chatmessage); }, null));
Contoh dari penangan situasi "Saya mengambil kartu, dan lawan menambahkan saya 'setelah" yang lain: "
FoolHubProxy.On<byte, bool>("TakeOneMoreCard", (addedcard, lastcard) => synchrocontext.Post(delegate { CardModel card = new CardModel(addedcard, DeckIndex); CardsOnTable_Low.Add(card); OpponentsCards.Remove(OpponentsCards.Last()); if (lastcard) { AppMode = AppModeEnum.defeated; } }, null));
Tentang hadiah, cookie, dll.
Setiap bulan, lima pemain pertama yang memenangkan kemenangan terbanyak menerima lencana
"Untuk merebut Berlin" . Peserta dalam 50 besar diberikan lencana untuk persentase kemenangan terbaik (juga lima). Selain itu, ada lencana untuk menang dengan "ekspres" (situasi di mana pada langkah terakhir Anda memiliki 2, 3 atau 4, katakanlah, enam atau jack). Lalu mereka meletakkan semuanya di atas meja dalam satu gerakan dan Anda - bagus sekali. Ada kue untuk kemenangan, ketika lawan memberi Anda "daftar". Dia juga mendapatkan yang menghibur, dengan tengkorak dan tulang.
Tentang fungsionalitas tambahan
Aplikasi ini gratis, tetapi memiliki berbagai "roti" tambahan yang dihiasi sebagai Pembelian InApp:
- mengelompokkan kartu Anda dengan setelan dan tip selama permainan (ketika Anda perlu menekan atau melemparkan, kartu yang sesuai didorong ke atas)
- kemampuan untuk tidak menunjukkan lawan berapa banyak kartu yang Anda miliki di tangan Anda. Dalam situasi normal, dia melihatnya
- kesempatan untuk selalu memulai permainan terlebih dahulu. Jika tidak, langkah pertama dimainkan secara acak.
- kemampuan untuk melihat kartu-kartu yang dikalahkan dalam permainan
- kesempatan untuk mengintip ke geladak sekali per game dan mencari tahu kartu berikutnya
- kemampuan untuk menipu. Anda dapat mengalahkan 3 kali per game atau melemparkan kartu yang salah, umumnya kartu apa saja. Tetapi lawan memiliki kesempatan, setelah memperhatikan hal ini, untuk mengembalikan kartu yang salah kepada Anda.
Kesimpulan
Sebagai hasil dari pengembangan aplikasi ini, saya:
- bertemu SignalR
- SQL yang disegarkan dalam memori (kueri, prosedur tersimpan, fungsi)
- Mempelajari cara meng-host aplikasi di Azure
- Tercengang karena memainkan "si bodoh".
Pertanyaan
Dan bagaimana dengan Habré dengan
hamburan uang dari helikopter dengan membagikan kode promo kepada orang-orang yang tertarik secara pribadi? Jika mereka tidak melakukan ini, maka hubungi.
Perbarui
YouTube: Rekam beberapa game