Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

deoomen

[Pascal] Gra Blackjack i złe zliczanie punktów

Polecane posty

Witam.

Otóż mam napisaną grę Blackjack (przypomina oczko) w pascalu. Niestety mam pewien problem. Źle zlicza mi punkty krupierowi. Wygląda to tak: zaczynamy grę, program wydaje nam po dwie karty, po czym dobieramy lub pasujemy, program liczy nam punkty i wyswietla obok (to działa poprawnie), kolej na krupiera, teraz on dobiera karty niestety w tym miejscu ilość punktów nie zgadza się z kartami jakie są na stole.

Zamieszczam kod. Wiem, że to mało profesjonalne zamieszczać cały kod ale nawet nie mam pojęcia gdzie może być błąd. Podejrzewam jedynie, że w którejś z procedur: tabwynikow, rozgrywka lub dodaj_pkt

uses crt;

type
karta = record
karta : string[10];
karta_wiz : string[2];
wartosc : integer;
kolor : string[5];
kolor_znak : char;
kolor_talia : integer;
end;

punkt = record
as1 : integer;
as11 : integer;
suma_pkt : integer;
end;

var wygrane_gracza, wygrane_krupiera : integer;
gracz, krupier, puste : punkt;
znak : char;
koniec : boolean;
cyfra, znak_spec, nrkarty, AH, H : integer;
talia: array [1..52] of karta;
wylosowane:array[1..52]of integer;
element, c:integer;

procedure curoff; assembler;
asm
mov ah,01h
mov ch,10h
mov cl,00h
int 10h
end;


procedure przetasuj;
var steruj:byte;
a : integer;
begin
inc(element);
repeat
begin
delay(100);
randomize;
c:=random(52)+1;
steruj:=0;
for a:=1 to 52 do
begin
if c=wylosowane[a] then
begin
steruj:=1;
break;
end;
end;
if (steruj=0) and (a=52) then break;
end;
until 1=2;
wylosowane[element]:=c;
end;



procedure rysuj_karte (strona, linia1, kolumna1, linia2, kolumna2 : integer);
var d_x, d_y, d_a: integer;
begin
przetasuj;
window (linia1,kolumna1,linia2,kolumna2);
textattr:=16*15+(talia[c].kolor_talia);
clrscr;
d_x :=1;
d_y :=2;
gotoxy (d_x, d_y);
if strona = 0 then
begin
writeln (talia[c].karta_wiz);
d_x:=d_x+1;
for d_a:=1 to 2 do
begin
d_x:=d_x+1;
d_y:=d_y+1;
gotoxy (d_x, d_y);
writeln (talia[c].kolor_znak);
end;
gotoxy (d_x-1, d_y);
writeln (talia[c].karta_wiz);
end
else
begin
textcolor(0);
textbackground(white);
writeln (' ?');
d_x:=d_x+1;
for d_a:=1 to 2 do
begin
d_x:=d_x+1;
d_y:=d_y+1;
gotoxy (d_x, d_y);
writeln ('?');
end;
end;
normvideo;
window(1,1,80,25);
end;



procedure tworzenie_kart;
var
d_karta : string[10];
d_karta_wiz : string[2];
d_wartosc : integer;
d_kolor : string[8];
d_kolor_znak : char;
d_kolor_talia : integer;
a,b : integer;

begin
c:=0;
for a := 1 to 13 do begin
case a of
1 : begin d_karta := 'As'; d_karta_wiz := ' A'; d_wartosc := 1; end;
2 : begin d_karta := 'Dwojka'; d_karta_wiz := ' 2'; d_wartosc := 2; end;
3 : begin d_karta := 'Trojka'; d_karta_wiz := ' 3'; d_wartosc := 3; end;
4 : begin d_karta := 'Czworka'; d_karta_wiz := ' 4'; d_wartosc := 4; end;
5 : begin d_karta := 'Piatka'; d_karta_wiz := ' 5'; d_wartosc := 5; end;
6 : begin d_karta := 'Szostka'; d_karta_wiz := ' 6'; d_wartosc := 6; end;
7 : begin d_karta := 'Siodemka'; d_karta_wiz := ' 7'; d_wartosc := 7; end;
8 : begin d_karta := 'Osemka'; d_karta_wiz := ' 8'; d_wartosc := 8; end;
9 : begin d_karta := 'Dziewiatka'; d_karta_wiz := ' 9'; d_wartosc := 9; end;
10 : begin d_karta := 'Dziesiatka'; d_karta_wiz := '10'; d_wartosc := 10; end;
11 : begin d_karta := 'Walet'; d_karta_wiz := ' J'; d_wartosc := 10; end;
12 : begin d_karta := 'Dama'; d_karta_wiz := ' Q'; d_wartosc := 10; end;
13 : begin d_karta := 'Krol'; d_karta_wiz := ' K'; d_wartosc := 10; end;
end;
for b := 1 to 4 do begin
case b of
1 : begin d_kolor := 'Pik'; d_kolor_znak := chr(6); d_kolor_talia:=0 ; end;
2 : begin d_kolor := 'Karo'; d_kolor_znak := chr(4); d_kolor_talia:=12 ; end;
3 : begin d_kolor := 'Trefl'; d_kolor_znak := chr(5); d_kolor_talia:=0; ;end;
4 : begin d_kolor := 'Kier'; d_kolor_znak := chr(3); d_kolor_talia:=12; ;end;
end;
inc©;
talia[c].karta:= d_karta;
talia[c].karta_wiz:= d_karta_wiz;
talia[c].wartosc := d_wartosc;
talia[c].kolor := d_kolor;
talia[c].kolor_znak := d_kolor_znak;
talia[c].kolor_talia := d_kolor_talia;
end;
end;
end;

procedure czysc_wylosowane;
var k:integer;
begin
for k:=1 to 52 do
begin
wylosowane[k]:=0;
end;
end;



procedure wysrodkuj(s : string; y : integer);
var x : integer;
begin
x := 40 - (length(s) div 2);
gotoxy(x,y);
for x := 1 to length(s) do
begin
write (s[x]);
delay(15);
end;
end;


procedure loading;
var czas, czas2 : integer;
begin
for czas := 1 to 3 do
begin
clrscr;
wysrodkuj('Wczytywanie ', 12);
for czas2:=1 to 3 do
begin
delay(250);
write('.');
delay(250);
end;
end;
end;


procedure menu_glowne;
begin
textattr := 16*0+15;
clrscr;
wysrodkuj('Witamy w kasynie ! beta v0.7', 2);

wysrodkuj('1 - Zasiadz do stolu Blackjack',7);
wysrodkuj('2 - Wlasciciele ',9);
wysrodkuj('3 - Wyjdz ',11);

gotoxy(1,18);
writeln(' Statystyki:');
writeln(' TY: ', wygrane_gracza);
writeln(' Krupier: ', wygrane_krupiera);
end;


procedure klawisz(var znak : char);
begin
znak := ' ';
if keypressed then znak := readkey;
repeat
until keypressed;
znak := readkey;
end;



procedure tabwynikow(gracz, krupier : punkt);
begin
gotoxy(45,3);
textcolor(2);
write('Wynik -- As za 1 pkt : ');
textcolor(10);
write(gracz.as1, ' ');
gotoxy(45,4);
textcolor(2);
write('Wynik -- As za 11 pkt : ');
textcolor(10);
write(gracz.as11,' ');
gotoxy(45,13);
textcolor(2);
write('Wynik -- As za 1 pkt : ');
textcolor(10);
write(krupier.as1, ' ');
gotoxy(45,14);
textcolor(2);
write('Wynik -- As za 11 pkt : ');
textcolor(10);
write(krupier.as11,' ');
end;



procedure dodaj_pkt(var osoba : punkt);
begin
if talia[c].wartosc <> 1 then
begin
osoba.as1 := osoba.as1 + talia[c].wartosc;
osoba.as11 := osoba.as11 + talia[c].wartosc;
end
else
begin
osoba.as1 := osoba.as1 + talia[c].wartosc;
osoba.as11 := osoba.as11 + 11;
end;
end;


procedure stol;
begin
clrscr;
textbackground(1);
textcolor(2);
write('ÉÍÍÍÍÍÍÍÍÍÍÍÍ ');
textcolor(10);
write('Twoje karty');
textcolor(2);
writeln('ÍÍÍÍÍÍÍÍÍÍÍÍÍ?');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Ľ');
writeln;
write('ÉÍÍÍÍÍÍÍÍÍÍÍ ');
textcolor(10);
write('Karty Krupiera ');
textcolor(2);
writeln('ÍÍÍÍÍÍÍÍÍÍ?');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('şŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ
ş');
writeln('ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Ľ');

textbackground(0);
writeln;
writeln(' D - Dobierz karte');
writeln(' S - Spasuj');

gracz.as1 := 0;
gracz.as11 := 0;
krupier.as1 := 0;
krupier.as11 := 0;

tabwynikow(gracz, krupier);

textbackground(4);
gotoxy(1,24);
delline;
wysrodkuj('Blackjack - gramy do 21', 25);
textbackground(0);
end;


procedure rozgrywka;
var plwin, kompwin, graj_dalej, twoj_ruch : boolean;
a, b, c, d, e, f, g, h, zabezpieczenie : integer;
znak : char;

begin

stol;
graj_dalej := true;
plwin := false;
kompwin := false;

a:=9;
b:=3;
c:=13;
d:=7;

e:=9;
f:=13;
g:=13;
h:=17;

rysuj_karte(0,3,3,7,7);
dodaj_pkt(gracz);
tabwynikow(gracz, puste);

rysuj_karte(0,3,13,7,17);
dodaj_pkt(krupier);
tabwynikow(gracz, puste);

rysuj_karte(0,9,3,13,7);
dodaj_pkt(gracz);
tabwynikow(gracz, puste);

rysuj_karte(1,9,13,13,17);
dodaj_pkt(krupier);
tabwynikow(gracz, puste);


if (gracz.as11 = 21) or (krupier.as11 = 21) then
begin
if gracz.as11 = 21 then
plwin := true;
if krupier.as11 = 21 then
kompwin := true;

gracz.suma_pkt := gracz.as1;
krupier.suma_pkt := krupier.as1;
graj_dalej := false;
end;
zabezpieczenie :=2;
while graj_dalej do
begin
twoj_ruch := false;
while not(twoj_ruch) do
begin
klawisz(znak);
znak := upcase(znak);
case znak of
'D' : begin
inc(zabezpieczenie);
if zabezpieczenie=7 then
begin
graj_dalej := false;
break;
end
else
begin
a:=a+6;
c:=c+6;
rysuj_karte(0,a,b,c,d);
dodaj_pkt(gracz);
tabwynikow(gracz, puste);
twoj_ruch := true;
end;
end;

'S' : begin
twoj_ruch := true;
graj_dalej := false;
end;
end;
end;

if gracz.as1 > 21 then
begin
gracz.suma_pkt := 0
end
else
begin
if gracz.as11 > 21 then
gracz.as11 := 0;
if gracz.as1 > gracz.as11 then
gracz.suma_pkt := gracz.as1
else
gracz.suma_pkt := gracz.as11;
end;
end;

if plwin or kompwin then
graj_dalej := false
else
graj_dalej := true;

rysuj_karte(0,9,13,13,17);
tabwynikow(gracz, krupier);

while graj_dalej do
begin
while ((krupier.as11 > 21) or (krupier.as11 < 17)) and (krupier.as1 < 17) do
begin
e:=e+6;
g:=g+6;
rysuj_karte(0,e,f,g,h);
dodaj_pkt(krupier);
tabwynikow(gracz, krupier);
end;

graj_dalej := false;
end;

if krupier.as1 > 21 then
begin
krupier.suma_pkt := 0;
end
else
begin
if krupier.as11 > 21 then
krupier.as11 := 0;
if krupier.as1 > krupier.as11 then
krupier.suma_pkt := krupier.as1
else
krupier.suma_pkt := krupier.as11;
end;

if gracz.suma_pkt > krupier.suma_pkt then
plwin := true
else
kompwin := true;

if krupier.suma_pkt = 0 then
kompwin := false;

if gracz.suma_pkt = 0 then
plwin := false;


if (plwin = true) and (kompwin = true) then
begin
window(30,10,50,15);
textbackground(red);
clrscr;
writeln;
writeln;
writeln(' Remis!!');
normvideo;
window(1,1,80,25);
end;

if (plwin = true) and (kompwin = false) then
begin
window(30,10,50,15);
textbackground(red);
clrscr;
writeln;
writeln;
writeln(' Wygrales!');
wygrane_gracza := wygrane_gracza + 1;
normvideo;
window(1,1,80,25);
end;

if (plwin = false) and (kompwin = true) then
begin
window(30,10,50,15);
textbackground(red);
clrscr;
writeln;
writeln;
writeln(' Przegrales ;(');
wygrane_krupiera := wygrane_krupiera + 1;
normvideo;
window(1,1,80,25);
end;

if (plwin = false) and (kompwin = false) then
begin
window(30,10,50,15);
textbackground(red);
clrscr;
writeln;
writeln;
writeln(' Remis!!');
normvideo;
window(1,1,80,25);
end;

klawisz(znak);
end;






begin

{ loading;}


randomize;
textbackground(0);
czysc_wylosowane;
curoff;
gracz.as1 := 0;
gracz.as11 := 0;
krupier.as1 := 0;
krupier.as11 := 0;
puste.as1 := 0;
puste.as11 := 0;
wygrane_gracza:=0;
wygrane_krupiera:=0;
element:=0;
znak := '9';
koniec := false;
tworzenie_kart;


while not(koniec) do
begin
menu_glowne;
znak := '9';
val(znak, cyfra, znak_spec);
while (cyfra < 1) or (cyfra > 3) do
begin
klawisz(znak);
val(znak, cyfra, znak_spec);
end;

case cyfra of
1 : begin
clrscr;
wysrodkuj('Powodzenia!',12);
delay(700);
rozgrywka;
end;

3 : koniec := true;
end;
end;

clrscr;
wysrodkuj('Zegnamy i zapraszamy ponownie',12);
delay(700);
end.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...