1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| program black_jack
implicit none
integer,external :: somme
integer,external :: search
real :: alea
integer :: nbr_jeux,i,k,res,nbr_cartes,l,temp
integer,dimension(1:13,1:2) :: paquet ! 1=mbr restant 2=valeur
integer,dimension(1:312) :: sabot
integer,dimension(1:13) :: croupier,joueur1,joueur2,joueur3
! demande du nombre de jeu
nbr_jeux=6
nbr_cartes=nbr_jeux*52
10 continue
!définition valeur des cartes
paquet(:,2)=10
do i=2,9
paquet(i,2)=i
end do
paquet(1,2)=11
!mise a zero des jeux de chaque personnes
croupier=0;joueur1=0;joueur2=0;joueur3=0
!!! melange du paquet
!preparation du paquet (jeu non melange)
paquet(1:13,1)=4*nbr_jeux
k=13
do i=1,nbr_cartes
call random_seed
call random_number(alea)
res=k*alea+1
sabot(i)=paquet(res,2)
paquet(res,1)=paquet(res,1)-1
!diminution de la longueur de recherche
if (paquet(res,1)==0) then
paquet(res,1)=paquet(k,1)
paquet(res,2)=paquet(k,2)
k=k-1
end if
end do
! distribution premieres cartes
joueur1(1)=sabot(1)
joueur1(2)=sabot(2)
joueur2(1)=sabot(3)
joueur2(2)=sabot(4)
croupier(1)=sabot(5)
k=6
! tour du joueur 1
l=3
1 continue
do while(somme(joueur1)<17)
joueur1(l)=sabot(k)
l=l+1
k=k+1
end do
if ((somme(joueur1)>21).or.(search(joueur1)/=0)) then !ligne 67
temp=search(joueur1)
joueur1(temp)=1
goto 1
end if
! tour du joueur 2
l=3
2 continue
do while(somme(joueur2)<17)
joueur2(l)=sabot(k)
l=l+1
k=k+1
end do
if ((somme(joueur2)>21).and.(search(joueur2)/=0)) then
temp=search(joueur2)
joueur2(temp)=1
goto 2
end if
! tour du croupier
l=2
3 continue
do while(somme(croupier)<17)
croupier(l)=sabot(k)
l=l+1
k=k+1
end do
if ((somme(croupier)>21).and.(search(croupier)/=0)) then
temp=search(croupier)
croupier(temp)=1
goto 3
end if
print*,somme(croupier)
print*,somme(joueur1)
print*,somme(joueur2)
print*,""
print*,"Nouvelle partie ? 0=non 1=oui"
read*,k
if (k==1) then
goto 10
else
goto 11
end if
11 continue
end program
integer function somme(tab)
implicit none
integer,dimension(1:13) :: tab
integer :: j
somme=0
do j=1,13
somme=somme+tab(j)
end do
end function somme
integer function search(wer)
implicit none
integer,dimension(1:13) :: wer
integer :: z
z=1
search=0
do while ((search==0).or.(z<14))
if (wer(z)==11) then !ligne 135
search=z
end if
z=z+1
end do
end function search |
Partager