Pascal na C# - kolory kart do gry w brydża

0

Witam,

W linku http://www.mariusz12.tkdami.net/brydz.pas znajduje się aplikacja konsola w języku Pascal, która symuluje rozdanie kart do gry w brydża.

Chciałbym przerobić ten program na język C# lecz największy problem sprawia mi utworzenie symbolów kolorów kart: pik, karo, kier, trefl.

Czy mógłby ktoś pomóc w przerobieniu kodu?

Pozdrawiam.

0

Nie znam zasad brydza, ale mam nadzieje, ze ponizszy kod, pokazujacy obsluge symboli kart (oraz podstawowe operacje: przegladanie, tasowanie talii i rozdawanie uzytkownikom), Ci duzo pomoze.

using System;
using System.Collections.Generic;
using System.Collections;

namespace Tasowanie
{
	public class Program
	{
		/// <summary>
		/// Klasa opisujaca pojedyncza karte
		/// </summary>
		internal class Karta
		{
			/// <summary>
			/// Dostepne kolory (kody symboli w zapisie unicode)
			/// </summary>
			public static char[] Kolory = new char[4]
			{
				/* trefl */
				'\u2663',
				/* karo */
				'\u2665',
				/* kier */
				'\u2666',
				/* pik */
				'\u2660'
			};

			/// <summary>
			/// Dostepne figury
			/// </summary>
			public static char[] Figury = new char[13]
			{
				'A', 'K', 'D', 'W', 'X', '9', '8', '7', '6', '5', '4', '3', '2'
			};

			/// <summary>
			/// Kolor danej karty
			/// </summary>
			public char Kolor { get; private set; }

			/// <summary>
			/// Figura danej karty
			/// </summary>
			public char Figura { get; private set; }

			/// <summary>
			/// Konstruktor tworzacy nowa karte z figura danego koloru
			/// </summary>
			/// <param name="kolor">Wybrany kolor</param>
			/// <param name="figura">Wybrana figura</param>
			public Karta(char kolor, char figura)
			{
				Kolor = kolor;
				Figura = figura;
			}

			/// <summary>
			/// Zwraca symbol karty
			/// </summary>
			/// <returns>Symbol karty; kolor + figura</returns>
			public override string ToString()
			{
				return string.Format("{0}{1}", Kolor, Figura);
			}
		}

		/// <summary>
		/// Klasa opisujaca gracza, obslugujaca ukladanie kart
		/// </summary>
		internal class Gracz : IComparer<Karta>
		{
			/// <summary>
			/// Imie gracza
			/// </summary>
			public string Imie { get; private set; }

			/// <summary>
			/// Karty na reku gracza
			/// </summary>
			List<Karta> Karty;

			/// <summary>
			/// Konstruktor tworzacy nowego gracza z okreslonym imieniem
			/// </summary>
			/// <param name="imie">Imie nowego gracza</param>
			public Gracz(string imie)
			{
				Imie = imie;
				Karty = new List<Karta>();
			}

			/// <summary>
			/// Dodanie graczowi karty
			/// </summary>
			/// <param name="karta">Karta dana graczowi</param>
			public void Dodaj(Karta karta)
			{
				Karty.Add(karta);
			}

			/// <summary>
			/// Ulozenie i wyswietlenie kart
			/// </summary>
			/// <returns>Imie oraz poukladane karty na reku gracza</returns>
			public override string ToString()
			{
				Karty.Sort(this);
				string karty = "";
				foreach (Karta karta in Karty)
				{
					karty += karta + " ";
				}
				return string.Format("{0,-12}: {1}", Imie, karty);
			}

			#region IComparer<Karta> Members

			/// <summary>
			/// Algorytm ukladania kart; karty wedlug koloru, a jak rowne to wedlug figury rosnaco
			/// </summary>
			/// <param name="x">Pierwsza karta</param>
			/// <param name="y">Kolejna karta</param>
			/// <returns>Wartosc sortowania kart</returns>
			public int Compare(Karta x, Karta y)
			{
				int porownanieKolorow = -x.Kolor.CompareTo(y.Kolor);
				if (porownanieKolorow != 0)
				{
					return porownanieKolorow;
				}
				int porownanieFigur = x.Figura.CompareTo(y.Figura);
				return porownanieFigur;
			}

			#endregion
		}
		
		/// <summary>
		/// Przyklad generowania pelnej talii i jej przetasowania
		/// </summary>
		/// <param name="args"></param>
		static void Main(string[] args)
		{
			// Generowanie talii
			Random random = new Random();
			List<Karta> talia = new List<Karta>();
			foreach (char figura in Karta.Figury)
			{
				foreach (char kolor in Karta.Kolory)
				{
					talia.Add(new Karta(kolor, figura));
				}
			}
			// Tasowanie talii
			List<Karta> taliaTasowana = new List<Karta>();
			while (talia.Count > 0)
			{
				int i = random.Next(talia.Count);
				taliaTasowana.Add(talia[i]);
				talia.RemoveAt(i);
			}
			// Rozdawanie talii
			int iloscGraczy = 4;
			string[] imiona = new string[] { "Adam", "Barbara", "Cyryl", "Daniela", "Edward", "Franciszka", "Grzegorz" };
			Gracz[] gracze = new Gracz[iloscGraczy];
			for (int i = 0; i < iloscGraczy; i++)
			{
				gracze[i] = new Gracz(imiona[random.Next(imiona.Length)]);
			}
			int n = 0;
			while (n + iloscGraczy <= taliaTasowana.Count)
			{
				for (int i = 0; i < iloscGraczy; i++)
				{
					gracze[i].Dodaj(taliaTasowana[n + i]);
				}
				n += iloscGraczy;
			}
			// Wyswietlanie kart poszczegolnych graczy
			foreach (Gracz gracz in gracze)
			{
				Console.WriteLine(gracz);
			}
			Console.ReadLine();
		}
	}
}

Przykladowe uruchomienie aplikacji zwrocilo:

Daniela     : ♦2 ♦4 ♦6 ♦7 ♥3 ♣4 ♣7 ♣A ♣D ♠2 ♠5 ♠7 ♠9
Barbara     : ♦8 ♦9 ♦A ♦W ♥7 ♥D ♥W ♣6 ♣W ♠8 ♠K ♠W ♠X
Adam        : ♦K ♥4 ♥5 ♥9 ♥X ♣3 ♣5 ♣8 ♣9 ♣X ♠3 ♠4 ♠D
Cyryl       : ♦3 ♦5 ♦D ♦X ♥2 ♥6 ♥8 ♥A ♥K ♣2 ♣K ♠6 ♠A
0

Dziękować!

0

Nie dziękować, tylko zobacz, cyfry w "przykładowym" uruchomieniu układają się w ciąg cyfr z numeru konta bankowego.

0

No tak, powinny układać się północ-południe, wschód-zachód :)

0

yyy... nie wiem o czym mowicie, ale zaloze, ze - w zakresie wymaganym - moj kod pomogl ;-) Uwazaj z sortowaniem, machnalem sie i figury sa sortowane alfabetycznie (2-9, A, D, K, W), a nie wg. indeksu w tablicy figur.

0

Chodzi o takie rozdanie:

user image</image>

1 użytkowników online, w tym zalogowanych: 0, gości: 1