Добрый день!
Помогите, пожалуйста, сделать функцию. Есть игра в карты. точнее в карточного дурака (на двоих). Допусти, играем в дурака до тех пор, пока не уйдет колода, когда остались только карты на руках (у двух игроков) нужно чтобы функция рассчитывала правильную комбинацию.
Есть массив колоды карт
Начнем с простого есть два игрока у них по 2 карты, допустим если ходит игрок 2,то получится 2 варианта:
1)Т.к. у первого игрока нет козырей, ходим "sK"(король пики) что приведет к тому, что игроку 1 придется взять карту, после ходим "d6" (шестерка бубей).
2)Можно сходить "d6" (шестерка бубей), тогда игроку 1 придется отбиваться "dK" (король бубей), т.к. у игрока есть король , то подкидываем "sK"(короля пики)
Нужно создать функцию которая будет рассчитывать правильную комбинацию для выигрыша.
Вот код. Возвращает массив парных комбинаций карт двух игроков и параметры вида 0,-1,1,-2,2,-3,3(для понимания этих параметров смотреть в функцию CardSravn)
Помогите, пожалуйста, сделать функцию. Есть игра в карты. точнее в карточного дурака (на двоих). Допусти, играем в дурака до тех пор, пока не уйдет колода, когда остались только карты на руках (у двух игроков) нужно чтобы функция рассчитывала правильную комбинацию.
Есть массив колоды карт
Код:
;Создаем массив колоды
Global $aKoloda[4][9] = [["d6", "d7", "d8", "d9", "d1", "dJ", "dQ", "dK", "dA"], _ ;Буби
["c6", "c7", "c8", "c9", "c1", "cJ", "cQ", "cK", "cA"], _ ;Крести
["s6", "s7", "s8", "s9", "s1", "sJ", "sQ", "sK", "sA"], _ ;Пики
["h6", "h7", "h8", "h9", "h1", "hJ", "hQ", "hK", "hA"]] ;Черви
Код:
Dim $Kozr[1] = ["s6"] ;Козырь
Dim $Karti 1[2] = ["dK", "hA"] ;Карта 1 игрока
Dim $Karti 2[2] = [ "d6", "sK"] ;Карты 2 игрока
Начнем с простого есть два игрока у них по 2 карты, допустим если ходит игрок 2,то получится 2 варианта:
1)Т.к. у первого игрока нет козырей, ходим "sK"(король пики) что приведет к тому, что игроку 1 придется взять карту, после ходим "d6" (шестерка бубей).
2)Можно сходить "d6" (шестерка бубей), тогда игроку 1 придется отбиваться "dK" (король бубей), т.к. у игрока есть король , то подкидываем "sK"(короля пики)
Нужно создать функцию которая будет рассчитывать правильную комбинацию для выигрыша.
Вот код. Возвращает массив парных комбинаций карт двух игроков и параметры вида 0,-1,1,-2,2,-3,3(для понимания этих параметров смотреть в функцию CardSravn)
Код:
#include <Array.au3>
;Создаем массив колоды
Global $aKoloda[4][9] = [["d6", "d7", "d8", "d9", "d1", "dJ", "dQ", "dK", "dA"], _ ;Буби
["c6", "c7", "c8", "c9", "c1", "cJ", "cQ", "cK", "cA"], _ ;Крести
["s6", "s7", "s8", "s9", "s1", "sJ", "sQ", "sK", "sA"], _ ;Пики
["h6", "h7", "h8", "h9", "h1", "hJ", "hQ", "hK", "hA"]] ;Червы
Dim $Kozr[1] = ["s6"] ;Козырь
Dim $Pole[2] = ["dK", "hA"] ;карты 1 игрока
Dim $Karti[2] = [ "d6", "sK"] ;карты 2 игрока
Dim $aArray[UBound($Pole) * UBound($Karti)][3]
_Otbiv1($aArray, $Kozr, $Pole, $Karti)
_ArrayDisplay($aArray)
Func _Otbiv1(ByRef $aArray, $Kozr, $Pole, $Karti)
Local $sPole, $sKarti, $indPole, $af = 0
For $i = 0 To UBound($Pole)-1
$sPole = $Pole[$i]
;$indPole = GetIndByName($Pole[$i])
For $j = 0 To UBound($Karti)-1
$sKarti = $Karti[$j]
;$indKarti = GetIndByName($Karti[$j])
$CS = CardSravn($sPole, $sKarti, $Kozr)
$aArray[$af][0] = $sPole ;& $indPole[0] & $indPole[1]
$aArray[$af][1] = $sKarti ;& $indKarti[0] & $indKarti[1]
$aArray[$af][2] = $CS
$af += 1
Next
Next
Return $aArray
EndFunc ;==>_Otbiv1
Func CardSravn($sPole, $sKarti, $iTrump)
;Dim $Karti
Local $aInd1[2], $aInd2[2]
$aInd1 = GetIndByName($sPole);Попадают карты с поля в виде строк (1карта)
$aInd2 = GetIndByName($sKarti);Попадают карты на руках в виде строк (1карта)
$iTrump = GetIndByKoz(_ArrayToString($iTrump, "|")); приходит массив с козырем ____ Попадает козырная карта в виде строки
;MsgBox(1,"$aInd1",$aInd1)
;_ArrayDisplay($aInd1)
If $aInd1[0] = $iTrump Then ; если первая карта козырь
If $aInd2[0] = $iTrump Then ; если и вторая карта козырь
If $aInd1[1] > $aInd2[1] Then ; то сравниваем по второму индексу
Return -3; 1 карта козырь > 2 карта козырь
Else
Return 3; 1 карта козырь < 2 карта козырь
EndIf
Else
Return -2; 1 карта козырь > 2 карта простая
EndIf
Else
If $aInd1[0] = $aInd2[0] Then ; если масть первой карты совпадает со второй
If $aInd1[1] > $aInd2[1] Then ; то сравниваем вторые индексы
Return -1; 1 карта простая > 2 карта простая
Else
Return 1; 1 карта простая < 2 карта простая
EndIf
Else ; в противном случае
If $aInd2[0] = $iTrump Then ; проверяем не козырь ли вторая карта
Return 2; 1 карта простая < 2 карта козырь
Else ; если нет, то карты несравнимы
Return 0; not comparable
EndIf
EndIf
EndIf
EndFunc ;==>CardSravn
Func GetIndByName($card)
Local $aInd[2]
Local $aKoloda[4][9] = [["d6", "d7", "d8", "d9", "d1", "dJ", "dQ", "dK", "dA"], _
["c6", "c7", "c8", "c9", "c1", "cJ", "cQ", "cK", "cA"], _
["s6", "s7", "s8", "s9", "s1", "sJ", "sQ", "sK", "sA"], _
["h6", "h7", "h8", "h9", "h1", "hJ", "hQ", "hK", "hA"]]
For $i = 0 To 3
For $j = 0 To 8
If $aKoloda[$i][$j] = $card Then
$aInd[0] = $i
$aInd[1] = $j
Return $aInd
EndIf
Next
Next
EndFunc ;==>GetIndByName
Func GetIndByKoz($card)
Dim $aInd[2]
Local $aKoloda[4][9] = [["d6", "d7", "d8", "d9", "d1", "dJ", "dQ", "dK", "dA"], _
["c6", "c7", "c8", "c9", "c1", "cJ", "cQ", "cK", "cA"], _
["s6", "s7", "s8", "s9", "s1", "sJ", "sQ", "sK", "sA"], _
["h6", "h7", "h8", "h9", "h1", "hJ", "hQ", "hK", "hA"]]
For $i = 0 To 3
For $j = 0 To 8
If $aKoloda[$i][$j] = $card Then
$aInd[0] = $i
$aInd[1] = $j
Return $aInd[0]
EndIf
Next
Next
EndFunc ;==>GetIndByKoz