Harfler ile Tombala Oyunu – C# Console Application

Merhaba, bu makalede Csharp – C# Console Application üzerinde Tombala oyununun Harfler ile olan versiyonunu paylaşacağım.

Oyun Hakkında:

  • İki oyuncu bulunuyor.  Her oyuncunun 2 satır ve 4 sütundan oluşan kartı var.
  • İngilizce Alfabesine göre oyuncuların kartlarına benzersiz olarak rasgele bu harflerden toplam 16 tane har rasgele dağıtılır.
  • Kartlar oluşturulduktan sonra, elimizde A-Z harfler ve ‘#’ jokeri bulunan torbadan harf çekmeye başlarız.
  • Gelen harf hangi kartta var ise o alanlar silinir. Joker geldiğinde her iki oyuncununda kartlarında bulunan alfabeye göre en büyük harf silinir.
  • Hangi oyuncu kartının her hangi bir satırını tamamen bitirdiğinde Çinko yapmış olur. İki satırı da bittiğinde oyun tamamlanır ve Tombala olmuş olur.

Algoritması

Kullanılacak verilerin değişkenleri ilk olarak tanımlanır. Harfler ve Çanta olarak iki değişken oluşturulur. Harfler ve Çanta’dan harfler dağıtılırken her harfin benzersiz olması için dağıtılırken iki adet kontrol için kontrol dizisi oluşturuldu ve değerleri resetlendi. Ardından oyuncuların kartları oluşturuldu. Harflerin kontrol edilerek yerleştirildi. Oyuncu, herhangi bir satırı bitirdiğinde çinko yapmış olacak ve iki satırı bitirdiğinde ise tombala yapmış olacaktır.

Görseller

C# Kodları


using System;
namespace Hw4
{
class Program
{
static bool[] Control = new bool[4];
static bool[] Written = new bool[5];
static void Main(string[] args)
{
/*
* Published on Muslu.Net at 26.11.16
* by M.Tayyip MUSLU
* To be Countined C# Console Application Examples
*/
Console.CursorVisible = false;
Console.SetWindowSize(48,11);
char[] Letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V','W','X', 'Y', 'Z' }; // Letters to use random cards
bool[] LettersC = new bool[Letters.Length]; // letters location control
char[,] Cards = new char[4, 4];
char[] Bag = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#' }; // random get a letter
bool[] BagControl = new bool[Bag.Length]; // bag's letters location control
// Information Messages
string Cinko = "First Çinko - Player{0} wins the smallest prize";
string Tombala = "Tombala - Player{0} wins the grand prize";
string NotWinner = "The game is over without any winner (tie)";
Random RD = new Random();
int RandomNumber = 0;
// RESET CONTROL ARRAYS
for (byte i = 0; i < Letters.Length; i++) LettersC[i] = false;
for (byte i = 0; i < Bag.Length; i++) BagControl[i] = false;
int temp1 = 0, temp2 = 0;
for(byte k = 0; k < 4; k++) // CREATE CARS, RANDOM LETTERS ARE LOCATED
{
for (byte l = 0; l < 4; l++)
{
if (k % 2 == 0) { temp1 = 0; temp2 = 13; } else { temp1 = 14; temp2 = Letters.Length; }
RandomNumber = RD.Next(temp1, temp2);
if (LettersC[RandomNumber] == false)
{
Cards[k, l] = Letters[RandomNumber];
LettersC[RandomNumber] = true;
}
else l--;
}
}
// DRAW SCREEN
Console.WriteLine(@" CARD 1 CARD 2
╔════════════════════╗╔════════════════════╗
║ ║║ ║
║────────────────────║║────────────────────║
║ ║║ ║
╚════════════════════╝╚════════════════════╝");
int GetLetter = 0; byte Counter = 0, CounterLetter = 0;
do
{
byte top = 2;
Console.SetCursorPosition(0, 7); Console.WriteLine(" ");
// SHOW LETTERS
for (byte k = 0; k < 4; k++)
{
if (k < 2) Console.SetCursorPosition(5, top); else Console.SetCursorPosition(28, top);
for (byte l = 0; l < 4; l++)
{
Console.Write(Cards[k, l] + " ");
}
top += 2;
if (k == 1) top = 2;
}
Console.SetCursorPosition(0, 6);
GetLetter = RD.Next(0, Bag.Length); // GET A NEW LETTERS IN BAG
if (BagControl[GetLetter] == false)
{
Counter++;
BagControl[GetLetter] = true;
if (Bag[GetLetter] != '#') // NORMAL LETTER
{
for (byte k = 0; k < 4; k++)
{
for (byte l = 0; l < 4; l++)
{
if (Cards[k, l] == Bag[GetLetter])
{
Cards[k, l] = ' ';
}
}
}
}
else // JOKER
{
int count = 0, d = Letters.Length-1;
while(true) // START THE LAST INDEX OF LETTERS TO FIRST INDEX SEACRH ON CARDS
{
for(byte k = 0; k < 4; k++)
{
for(byte l = 0; l < 4; l++)
{
if (Cards[k, l] == Letters[d])
{ Cards[k, l] = ' '; if (k == 0 || k == 1) k = 2; else k = 0; d = Letters.Length-1; count++; continue; }
}
}
if (count == 2) break; // JUST 2 LETTERS MUST BE DELETED
d--;
}
}
Console.Write("{0}. Selected Letter is {1}", Counter, Bag[GetLetter]);
// CONTROL PRIZES, FIRST OR PRIZE
for (byte k = 0; k < 4; k++)
{
for (byte l = 0; l < 4; l++)
{

if (Cards[k, l] == ' ')
{
CounterLetter++;
}
if (CounterLetter == 4)
Control[k] = true;
}
CounterLetter = 0;
}
Console.WriteLine();
// CONTROLS AND FINISH
if ((Control[2] && Control[3]) && (Control[0] && Control[1])) if (!Written[4]) { Console.WriteLine(NotWinner); Written[3] = true; break; }
if ((Control[0] || Control[1])) if (!Written[0]) { Console.WriteLine(Cinko, "1"); Written[0] = true; }
if ((Control[0] && Control[1])) if (!Written[1]) { Console.WriteLine(Tombala, "1"); Written[1] = true; break; }
if ((Control[2] || Control[3])) if (!Written[2]) { Console.WriteLine(Cinko, "2"); Written[2] = true; }
if ((Control[2] && Control[3])) if (!Written[3]) { Console.WriteLine(Tombala, "2"); Written[3] = true; break; }
for (byte c = 0; c < 4; c++) Control[c] = false;
Console.ReadKey();
}
}
while (true);
Console.WriteLine("The game is over after {0} steps \nGood BYE !", Counter);
Console.ReadKey();
}
}
}

Bu tarz örnekler yapmaya devam edeceğim. Özellikte console ekranında oynanabilen oyunlar ile uğraşacağım takipte kalın 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir