Program "Dla brydżysty"

0

Witam!
Mam do wykonania program, który wylosuje z talii (52 karty) trzynaście kart do brydża oraz dodatkowo podliczy punkty. Za asa są 4punkty, za króla 3, damę 2 i waleta 1.
Udało mi się wykonać losowanie kart (choć i tak nie wiem czy dobrze):
http://odsiebie.com/pokaz/2127750---3def.html
Lecz mam problem jak do tego wszystkiego dołączyć tą punktację.
Tak więc, będę wdzięczny za wszystkie wskazówki ;-)

PS. Wesołych Świąt!

0

Może zadeklarować Kartę jako typ rekordowy w taki sposób jak poniżej:

type
  TKarta = record
    Nazwa : string;
    Wartosc : Byte;
  end;
// a później
var
  Karty : array[0..52] of TKarta;
begin
  Karty[0].Nazwa := 'as trefl';
  Karty[0].Wartosc := 4;
  // ... ciach ...
end;

Twój kod przejrzałem tylko pobieżnie, ale z tego co widziałem wczytujesz wszystkie karty do Editów, a
potem w bardzo dziwny sposób je losujesz. Powinieneś raczej wczytać karty do Stringlisty i losują z niej
usuwać wylosowany element, a przed usunięciem wyświetlać go w polu edycyjnym. Poza tym skoro ta
tablica z kartami liczy 53 elementy (bo indeksowana od zera), to losując tak Random(52) losujesz od
zera do 51, także nie wiem czy tak miało być czy to jakiś błąd, ale teraz widze że w case masz do 51

A przy okazji ja też życzę odwiedzającym.forum 4programmers Wesołych Świąt i smacznego jajka :)

0

To akurat był błąd z mojej strony :]
Jak już pisałem, nie jestem pewny tego sposobu losowania, a podsunął mi go kolega :D
Jestem dopiero na pierwszym roku TI, więc początki są bardzo trudne. Byłbym wdzięczny gdybyś pokrótce opisał mi ten sposób losowania. Z góry dzięki.

0

Zobacz sobie na mój kod na: http://odsiebie.com/(link usuniety na prosbe autora) - wrzuciłem na serwis
odsiebie, bo chyba go preferujesz skoro swój kod też wrzucałeś. Kod jest wraz z exekiem, całość w
Delphi 7 napisana, powinna Ci się otworzyć. Zobacz jak zrobiłem losowanie i punkty dla kart figur, bo
z tym renonsem to byś mi musiał wytłumaczyć o co chodzi. Póki co punktowane są tylko figury, czyli
Walet, Dama, Król oraz As. Bo na http://pl.wikipedia.org/wiki/Terminologia_brydżowa - wyczytałem,
że Renons to "Brak karty w danym kolorze.", ale musiał być mi to wytłumaczyć na przykładzie, bo ja
to z karcianek umiem stawiać Pasjansa, a grać to tylko w Pokera :) Podejrzewam, że trzeba będzie
do typu rekordowego TKarta dodać chyba jeszcze jakąś własność liczbową, która określi jej kolor itd.
Napisz mi czy tak jak teraz jest losowanie i punktowanie kart, to może być. W razie pytań - pytaj :)
A losowanie w przypadku tego prpgramu można było sobie ułatwić poprzez zadeklarowanie zbioru, bo
elemtnów do wylosowania jest mniej niż 256, ale tak jak Ty to miałeś zrobione nie powinno się robić.

0

Ja też na grach karcianych się nie znam, ale z tym renonsem to zapewne chodzi o to, że dodatkowy punkt jest dodawany wtedy, gdy w wylosowanych kartach nie ma np. karty w kolorze pik, czy kier.
Naprawdę OGROMNE dzięki za pomoc.. Zaraz sprawdzę ten program.

0

Prosze bardzo - pokazałeś, że coś samemu próbowałeś sklecić, a że mam czas to ja pokazałem Ci,
w jaki sposób to powinno wyglądać. Co do tenonsu to upewnij się jak ma być to dorobie kolor karty i
z tego co rozumiem jak nie mamy żadnej karty "liczbowej" ani figury na przykład w kolorze kier to do
naszego wyniku ma zostać dodany jeden punkt? A i napisz o co chodzi wykładowcy z proponowanym
otwarciem licytacji, czy to ma dotyczyć tylko pierwszego gracza czy sugerować dla wszystkich 4ech
graczy? No i jak napiszesz, że póki co program działa ok to podeślę Ci poprawioną wersję, bo procka
OnCreate powinna ładniej wyglądać tak jak poniżej. Funkcja Format
jest opisana tam. Jakby wykładowca pytał jak działa to zobacz sobie jej opis w powyższym linku, a i
tablica WynikTab jeżeli ma być używana w innych procedurach do podliczenia wyników to należało by
ją zadeklarować raczej w sekcji public. Pisałem program na szybko i o tym nie pomyślałem od razu.

procedure TMainForm.FormCreate(Sender: TObject);
var
  I : Byte;
begin
  Randomize;
  Application.Title := Caption;
  for I := 1 to 4 do
    begin
    TLabel(FindComponent(Format(Label_Nazwa, [I]))).Visible := False;
    end;
end;
0

Uuu.. tym programem pokazałeś mi ile się jeszcze muszę nauczyć :) Myślałem że da się wykonać ten program nieco łatwiejszym sposobem. Ale jeszcze dzisiaj wieczorem postaram się go przestudiować :P Tylko wydaje mi się że ten program ma losować karty tylko dla jednego gracza. Czyli z 52 kart wybiera 13 dla gracza. A z tym renonsem to tak jak pisałem. Jeśli gracz wylosuje karty w kolorach pik, kier i trefl, ale nie będzie miał żadnej karty karo to ma dodatkowy punkt.
Pozdrawiam!

0

Już wiem, że w poprzednim kodzie jest błąd, bo losuje z powtórzeniami. Dlatego teraz zrobiłem według
Twoich zaleceń i jest wersja dla jednego gracza. Do losowania używany jest komponent StringList, w
którego to wierszach dodawana jest nazwa oraz punktacja z tablicy. Program też chyba w poprawny
sposób sprawdza czy jest renons i dolicza odpowiednią ilość punktów. Pokazuje również strategię po
wylosowaniu według kryteriów jakie były podane w pliku tekstowym. Tylko nie wiem co ma podawać,
w przypadku wystapienia strategi kolor. Brakujący kolor chyba nie, ale to już sobie dopracujesz sam.
W każdym razie może bym zaliczył chociaż na czwórkę mając takie zadanie, ale tak jak Ty nie za
bardzo mam pojęcie o brydźu dlatego zrobiłem program tak jak potrafiłem ze swoją nikłą wiedzą, a temu
kumplowi co Tobie pokazał losowanie w taki sposób jak miałeś poprzednio (tamten plik źródłówy .pas
miał ponad 500 KB i wskazywanie na edity, a nic konkretneog nie robil, zero optymalizacji kodu), to jak
nie macie tolerancyjnego dla nowicjuszy wykładowcy to tamten kod on po prostu wyśmieje. A link do
poprawionej wersji: http://odsiebie.com/(link usuniety na prosbe autora) - napisz czy działa jak należy?
EDIT: linki do źródeł zostały usunięte na prośbę autora postu, a w sumie i tak tylko on je potrzebował :)

0

Wszystko działa świetnie. Jeszcze raz dziękuję.Podałbyś mi Twój numer Gadu-Gadu?

0

Moj numer GG poszedł na Twój e-mail podany w profilu. Jednak na GG bywam na bardzo krótko i z
trzy razy na dobę żeby sprawdzić czy są nowe wiadomości. Łatwiej zastać mnie tutaj pisząc posta z
pytaniem na jakie będę umiał udzielić odpowiedzi dotyczącej Delphi, także w innym dziale Newbie :)

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