Program do Gry w oczko

0

witam mam program na zaliczenie:
Napisz program do gry w oczko (talia kart od asa do 9, kolory nieistotne, punkty: A – 11, 10 – 10, 9 – 9, K – 4, D – 3, W – 2).

prosze o pomoc i niechodzi mi o to zeby ktos odwalil za mnie cala robote tylko nakierowal ;] wiem , ze trzeba bedzie uzyc randomize do losowania kart i....tyle wiem ;]

0

Robisz tablicę 24-elementową, która przechowuje figurę, kolor i wartość karty - dodatkowo dwie tablice (dla przejrzystości) 5-elementowe dla kart gracza i rozdającego; wykładasz sobie dwie karty (np. wypisując ich figury); pytasz, czy grać dalej, czy pas; jeśli pas, to implementujesz "dealera", który będzie wyciągał kolejne karty dopóki będzie mieć w sumie wartość co najmniej 16 - i porównujesz swoje wartości z jego; jeśli grałeś dalej i osiągnąłeś łączną wartość >21, to koniec gry. Nie wiem co w tym trudnego było...

Masz jakiś podstawowy algorytm, programować Cię nie nauczę.

Pozdro.

0

maly offtopic.. po co w oczko kolor karty?

0

Po pierwsze czymu tablica 24 elementowa, nie lepiej strukturę dynamiczną?
Zwłaszcza że mozna nagle wygenrować 8 razu z rzędu waleta....
Po drugie nawet jeśli generowanie się usprawni to czemu 5 kart? A jak będą 5 walety+dama - to ja będę miał11 i będę chciał dobrać 6 kartę...

Po trzecie sugerowałbym wzorowanie struktur i zasady dzialania na prawdziwej grze:
Lista obiektów, a na nią wrzucamy karty (24, czy 52 łatwo to zmienić).
Każdy gracz (w kasynach gra się w kilku) i bankier mają własną listę kart - rozdając przenosisz obiekty pomiędzy listami. Zapobiega to przypadkowemu wylosowaniu tej samej karty, a matematycy nie dostaną wrzodów żołądka - bo co innego wylosować waleta z 24 kart, a co innego wylosować waleta z talii która liczy obecnie 18 kart i zawiera 2 walety... Znika też problem ilości kart u graczy.
Co do koloru kart - zachowałbym jako koloryt gry, choć rzeczywiście z punktu widzenia matematyki nie ma znaczenia.

Pytanie czy chcesz zrobić program który coś tam losuje i sumuje (byle świeciło i grało ładną muzyczkę), czy symulator gry w oczko.

0

juz cos tam gra ale jak zrobic zeby mi niedawalo w jednym rozdaniu dwoch takich samych kart?

0
lofix napisał(a)

maly offtopic.. po co w oczko kolor karty?

To, że kolor w oczku nie ma znaczenia, to nie znaczy, że grasz w oczko niekolorowymi kartami... Nadal jest ich 24, a nie 6. Doradziłem, by całą talię przechowywać w tablicy, a nie jakoś losować chaotycznie karty... Poza tym to już chyba przesada, by oszczędzać na nie implementowaniu koloru karty?

Sir Daban napisał(a)

Po pierwsze czymu tablica 24 elementowa, nie lepiej strukturę dynamiczną?

Może i lepiej, ale na potrzeby zadania masz z góry narzuconą ilość 24 kart.

Sir Daban napisał(a)

Po drugie nawet jeśli generowanie się usprawni to czemu 5 kart? A jak będą 5 walety+dama - to ja będę miał11 i będę chciał dobrać 6 kartę...

Myślałem, że w oczko można brać maks. 5 kart. Widocznie się myliłem.

Sir Daban napisał(a)

Zapobiega to przypadkowemu wylosowaniu tej samej karty, a matematycy nie dostaną wrzodów żołądka - bo co innego wylosować waleta z 24 kart, a co innego wylosować waleta z talii która liczy obecnie 18 kart i zawiera 2 walety... Znika też problem ilości kart u graczy.

Zgodzę się, zapomniałem to uwzględnić :P

0

Jeśli stworzysz obiekty kart i bedziesz przenosił je pomiędzy listami talii i raczy, to kolejne losowanie odbędzie się spośród kart w talii, a więc karta nie mozę sie powtórzyć.

Co do zasad - hmm, być może tylko 5 kart (ale to nie poker :) ), nie grałem nigdy w kasynie więc pewności nie mam, a znane mi zasady mówią dobierasz dopóki nie powiesz stop.

Co do ilości kart - lista jest pojemna, więc po co ją ograniczać? Na razie robimy moduł do gry 24 kartami i ile ich wygenerujemy tyle przyjmie, jeśli będziemy robili moduł do gry kanastę możemy potrzebować przeszło 200 miejsc. Dlatego aby przerabiania było jak najmniej, a kod elstyczny zamiast warunku 24 karty, warto zrobić strukturę dynamiczną. Wówczas wystarczy tylko zmienić tylko generację kart, a pozostałe mechanizmy działają. Zauważ, ze losowanie odbywa się z parametrem ilości obiektów na liście, więc dołożenie dodatkowych kart nic nie zmieni, i nie trzeba trzymać nigdzie aktualnej ilości kart w talii. Dzięki dynamicznej strukturze, po losowaniu przenosisz kartę do gracza, w talii ona ubywa, u gracza się pojawia. Natstępne losowanie jak w prawdziwym życiu odbywa sie z pomniejszonej talii, z zachowaniem wszelkich matematycznych zasad (o ile losowanie jest rzeczywiście losowe :)) i nie masz problemu z możliwością powtórzenia karty.
Po prostu dynamiczna struktura z samego istnienia zapewnie wiele rzeczy które musiałbyś zaimplementować w przypadku tablicy. Do tego jest idealnei skalowalna (jak na potrzeby gier karcianych) bo ilość kart w talii określasz podoczas ładowania, bez potrzeby jakichkolwiek zmian w innych modulach. Przygotowujesz sobie moduły 16, 24, 52, 108 i możesz je podmieniac do woli.

0

na razie mam cos takiego program rozdaje karty na razie tylko grajacemu i proboje cos zeby sumowalo dlatego dodalem tablice ktora przechowuje wartosci liczbowe kart; ale niewiem jak zrobic zeby mi co klikniecie dodawalo do sumy kolejne karty;zrobilem to na razie na 5 editow;button 2 zeruje czyli cos w stylu nowa gra; jak to dorobic? ;] ktos tam wczesniej mowil zeby pokazywalo karty jak to zrobic? prosze o odpowiedz i dziekuje za dotychczasowa pomoc

~D3Q

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button2: TButton;
    le1: TLabeledEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  b,c,d,e,f,g,h:integer;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
tab:array [0..24] of string;
suma:array [0..24] of integer;
a:integer;
begin

b:=b+1;

randomize;
tab[0]:='9 trefl';
tab[1]:='9 karo';
tab[2]:='9 pik';
tab[3]:='9 kier';
tab[4]:='10 trefl';
tab[5]:='10 karo';      
tab[6]:='10 pik';
tab[7]:='10 kier';
tab[8]:='Walet trefl';
tab[9]:='Walet karo';
tab[10]:='Walet pik';
tab[11]:='Walet kier';
tab[12]:='Dama trefl';
tab[13]:='Dama karo';
tab[14]:='Dama pik';
tab[15]:='Dama kier';
tab[16]:='Król trefl';
tab[17]:='Król karo';
tab[18]:='Król pik';
tab[19]:='Król kier';
tab[20]:='As trefl';
tab[21]:='As karo';
tab[22]:='As pik';
tab[23]:='As kier';
suma[0]:= 9;
suma[1]:= 9;
suma[2]:= 9;
suma[3]:= 9;
suma[4]:= 10;
suma[5]:= 10;
suma[6]:= 10;
suma[7]:= 10;
suma[8]:= 2;
suma[9]:= 2;
suma[10]:= 2;
suma[11]:= 2;
suma[12]:= 3;
suma[13]:= 3;
suma[14]:= 3;
suma[15]:= 3;
suma[16]:= 4;
suma[17]:= 4;
suma[18]:= 4;
suma[19]:= 4;
suma[20]:= 11;
suma[21]:= 11;
suma[22]:= 11;
suma[23]:= 11;

a:=random(24);
if b=1 then begin
edit1.Text:=tab[a];
c:=suma[a];
h:=c;

            end
        else
if b=2 then begin
edit2.Text:=tab[a];
 d:=c+suma[a];
h:=c+d;

            end
        else
if b=3 then  begin
edit3.Text:=tab[a];
e:=d+c+suma[a];
h:=c+d+e;

             end
        else
if b=4 then begin
edit4.Text:=tab[a];
f:=d+c+e+suma[a];
h:=c+d+e+f;

            end
        else
if b=5 then  begin
edit5.Text:=tab[a] ;
g:=c+d+e+f+suma[a];
h:=c+d+e+f+g;

              end;

le1.Text:=inttostr(h);


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
b:=0;
h:=0;
c:=0;
d:=0;
e:=0;
f:=0;
g:=0;
end;

end.

le1 to label edit

0

podbijam bo chyba w zapomnienie to odeszlo ;]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.