1 (изменено: Kenji, 2014-04-16 18:59:24)

Тема: AHK: Рандом без повторений

Вообщем хочу сделать покер для SA-MP. Для этого мне нужно выбивать рандомные карты, на разных этапах игры (( при этом, карты не должны повторяться )).
Вообщем нужно, чтобы при нажатии NumPad1 выдавало 2 рандомные карты. При нажатии NumPad2 выдавало 3 рандомные карты. При нажатии NuMpad3 выдавало 1 рандомную карту. Но при этом чтобы карты не повторялись.
А при нажатии NumPad0 скрипт обнулялся, и можно было начинать сначало.

2

Re: AHK: Рандом без повторений

А какие карты играют?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Kenji, 2014-04-16 19:08:38)

Re: AHK: Рандом без повторений

teadrinker пишет:

А какие карты играют?

Немного не понял вопрос. Обычные игральные, 52 карты, написать список?

4

Re: AHK: Рандом без повторений

Нет, не надо, я и имел в виду "сколько карт". Могу написать код, выдающий рандомно номера без повторений, названия карт сами присвоите.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Рандом без повторений

Тема уже была http://forum.script-coding.com/viewtopi … 590#p79590, этот или предыдущий пост.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Рандом без повторений

teadrinker пишет:

Нет, не надо, я и имел в виду "сколько карт". Могу написать код, выдающий рандомно номера без повторений, названия карт сами присвоите.

Вот, как раз это мне и нужно, можно ли например сделать, чтобы рандомное число вставлялось в текст?
Например: SendInput, {F6}На стол выложили карты: и тут рандомные карты {Enter} ;

7

Re: AHK: Рандом без повторений

serzh82saratov пишет:

Тема уже была http://forum.script-coding.com/viewtopi … 590#p79590, этот или предыдущий пост.

Там выдает весь список сразу, а мне нужно чтобы на определенные кнопки выдавало определенное количество.
И при нажатии на другой кнопки, не появлялось тоже что и в прошлый раз.

8

Re: AHK: Рандом без повторений

Без проверки на окончание колоды:

Begin:
   Cards := []
   Loop 52
      Cards[A_Index] := A_Index
   Return

Numpad0::
   Gosub, Begin
   Return
   
Numpad1::
Numpad2::
Numpad3::
   CurrentCards := ""
   Count := InStr(A_ThisHotkey, 1) ? 2 : InStr(A_ThisHotkey, 2) ? 3 : 1
   while (Cards.MaxIndex() && !(A_Index > Count))
   {
      Random, rand, 1, Cards.MaxIndex()
      CurrentCards .= (A_Index = 1 ? "" : ", ") . Cards.Remove(rand)
   }
   SendInput, {F6}На стол выложили карты: %CurrentCards%{Enter}
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: serzh82saratov, 2014-04-17 02:21:53)

Re: AHK: Рандом без повторений

Там выдает весь список сразу,

Ну Я намекал на подобное:


deck := "testone|testtwo|testthree|testfour|testfive"
      . "|testsix|testseven|testeight|testnine|testten" 

Begin:
    Sort, deck, Random D|
    Global arr := StrSplit(deck, "|"), i := 0, mi := arr.MaxIndex()
    Return
    
0:: GoTo Begin  
1::
2::
3:: ToolTip % next(A_ThisHotkey) 

next(count)  { 
    If ((over := (i + count) - mi) > 0)
        Return i = mi ? "Колода пуста" 
            : "Для этой раздачи в колоде не хватает " over " карт(ы)"
    Loop % count
        cards .= arr[++i] "`n" 
    Return cards (i = mi ? "`nКарт больше нет" : "`nОсталось " Abs(over) " карт(ы)")
}   

Само собой в deck прописать нужные названия карт.

+ Забыл про Numpad.

deck := "testone|testtwo|testthree|testfour|testfive"
      . "|testsix|testseven|testeight|testnine|testten" 

Begin:
    Sort, deck, Random D|
    Global arr := StrSplit(deck, "|"), i := 0, mi := arr.MaxIndex()
    Return
    
Numpad0:: GoTo Begin   
Numpad1::
Numpad2::
Numpad3:: ToolTip % next(InStr(A_ThisHotkey, 1) ? 2 : InStr(A_ThisHotkey, 2) ? 3 : 1) 

next(count)  { 
    If ((over := (i + count) - mi) > 0)
        Return i = mi ? "Карты закончились" 
            : "Для этой раздачи в колоде не хватает " over " карт(ы)"
    Loop % count
        cards .= arr[++i] "`n" 
    Return cards (i = mi ? "`nКарты закончились" : "")
}    

Можно ещё проще, если на последней раздаче по превышению лимита можно сдать только остаток карт.

+ открыть спойлер

deck := "10-бубен|10-пик|10-треф|10-черв|2-бубен|2-пик|2-треф|2-черв|3-бубен|3-пик|3-треф|3-черв|4-бубен|4-пик|"
        . "4-треф|4-черв|5-бубен|5-пик|5-треф|5-черв|6-бубен|6-пик|6-треф|6-черв|7-бубен|7-пик|7-треф|7-черв|"
        . "8-бубен|8-пик|8-треф|8-черв|9-бубен|9-пик|9-треф|9-черв|В-бубен|В-пик|В-треф|В-черв|Д-бубен|"
        . "Д-пик|Д-треф|Д-черв|К-бубен|К-пик|К-треф|К-черв|Т-бубен|Т-пик|Т-треф|Т-черв" 
Begin:
    Sort, deck, Random D|  
    Global arr := StrSplit(deck, "|"), i := 0, mi := arr.MaxIndex()
    Return
    
0:: GoTo Begin  
1:: 
2::
3:: ToolTip % next(A_ThisHotkey) 

next(count)  {  
    Loop % i + count > mi ? mi - i : count
        cards .= arr[++i] "`n" 
    Return cards (i = mi ? "Карт больше нет" : "Осталось " mi - i " карт(ы)") 
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 (изменено: Kenji, 2014-04-17 16:12:05)

Re: AHK: Рандом без повторений

Не думал что у меня так мозг закипит, в способе teadrinker'a я не разобрался где написать список.
В способе serzh82saratov не пишет в чат. Может форум для более продвинутых, но без пояснения я не могу все понять. И вот думаю, не могли бы вы сделать вот такой вот скрипт. Вполне возможно заплатить за него.

Не знаю как это нормально объяснить, ладно, напишу что на какую кнопку действует.
Все цифры на numpad, кроме 0, будут выдавать такой текст {F6}/pm id [random card | random card]
id должен устанавливаться при открытии скрипта, в неком menu (GUI), в котором на каждую цифру на numpad, устанавливаешь id.
random card это рандомная карта, которая не должна повторяться.
Пример:
В menu на numpad1, значение id я выбрал 27. То есть при нажатии кнопки, выйдет что-то наподобие {F6}/pm 27 [A Трефы | K Бубны] {Enter}
На numpad2, значение id я выбрал 4. Получится что-то наподобие этого /pm 4 [T Червы | 7 Пики] {Enter}
Не должно получиться, чтобы карты повторялись, пока я не нажал numpad0.
При нажатии на numpad0 должна произойти команда SendInput, {F6}/me начинает собирать все карты со стола в колоду, после перетасовывает колоду игральных карт. {Enter} После этого, история карт должна обнулиться, и например A Треф снова может быть использована в следующих играх.
Следующий шаг, numpadEnter, тут будет две команды.
{F6}/me держа колоду карт над столом, сбрасывает первую карту, после сдает три карты на стол. {Enter} Потом sleep на 2500 мс, и следует {F6}/do Дилер выложил на стол: [random card | random card | random card]{Enter} Получается что-то вроде этого /do Дилер выложил на стол: [A Бубны | K Трефы | 4 Трефы]. Опять же, карты не должны повторяться Пока не будет перетасована колода.
Так-с, далее, numpadAdd, тут почти такое же, только будет 1 карта.
{F6}/me держа в руке колоду карт над столом, сбрасывает первую карту, после сдает одну карту на стол. {Enter} Потом sleep на 2500 мс, и следует {F6}/do Дилер выложил на стол: [random card] {Enter} Получается /do Дилер сдал на стол: [8 Пики]
И последний шаг, numpadSub, тут на 100% схоже с прошлым. Не буду расписывать, вы наверное и так поняли.
Как раз после него, я нажимаю numpad0 и перетасовываю карты, то есть должна обнулиться история, и карты при следующей раздачи могут быть такими же.

11

Re: AHK: Рандом без повторений

Может форум для более продвинутых, но без пояснения я не могу все понять. И вот думаю, не могли бы вы сделать вот такой вот скрипт. Вполне возможно заплатить за него.

Хотите научится, задавайте вопросы. Хотите готовое, озвучьте ценник, сделать задуманное можно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Рандом без повторений

serzh82saratov пишет:

Может форум для более продвинутых, но без пояснения я не могу все понять. И вот думаю, не могли бы вы сделать вот такой вот скрипт. Вполне возможно заплатить за него.

Хотите научится, задавайте вопросы. Хотите готовое, озвучьте ценник, сделать задуманное можно.

Я думал вы ценник сами предъявите.

13

Re: AHK: Рандом без повторений

На почту написал.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14 (изменено: serzh82saratov, 2014-04-20 03:15:42)

Re: AHK: Рандом без повторений

+ Наваял ради развлечения.

 
loop % mi := 52 
    deck .= (["Т",2,3,4,5,6,7,8,9,10,"В","Д","К"][mod(A_Index-1, 13)+1])
    . ([Chr(0x2665),Chr(0x2666),Chr(0x2660),Chr(0x2663)][Ceil(A_Index/13)]) "|" 
size := 122 
Gui, -DPIScale
Gui, Font, s40 
Gui, Add, Text, h%size% w%size% +0x201 Border vcard1 g1
Gui, Add, Text, hp wp x+5 +0x201 Border vcard2 g2
Gui, Add, Text, hp wp x+5 +0x201 Border vcard3 g3
Gui, Font, s16
Gui, Add, Text, % "xs y+5 h" size / 3 " w" size * 3 + 10 " Border +0x201 vText gBegin" 
Gui, Show  
Begin:
    Sort, deck, Random D|   
    Global arr := StrSplit(deck, "|"), i := 0, mi  
    GuiControl,, Text, Полная колода
    Loop 3
        GuiControl,, card%A_Index%  
1:: 
2::
3:: next(A_ThisLabel) 
4:: GoTo Begin

next(count)  {   
    Loop % (i + count > mi ? mi - i : count)  cards := []
        GuiControl, % (cards[A_Index] := arr[++i]) ~= Chr(0x2665) "|" Chr(0x2666) 
            ? "+cRed" : "+cBlack", card%A_Index%
    Loop 3  
        GuiControl,, card%A_Index%, % cards[A_Index] 
    GuiControl, , Text, % i = mi ? "Пустая колода" : "Осталось " mi - i " карт(ы)" 
} 

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15 (изменено: serzh82saratov, 2014-04-17 19:21:54)

Re: AHK: Рандом без повторений

Кстати вопрос по анк, есть ведь 6-ти значные Unicode (Для самих карт есть специальный диапазон от U+01F0A0 до U+01F0FF), как их отобразить в гуи?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Рандом без повторений

Нужно найти и использовать шрифт, в котором есть эти символы.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Рандом без повторений

Кроме того chr поддерживает utf-32 только в v2

MsgBox % StrLen(Chr(0x12345))

18

Re: AHK: Рандом без повторений

В смысле, AHK v1, похоже, вообще не поддерживает utf-32:

VarSetCapacity(sim, 4, 0)
NumPut(0x1f0a0, sim, "Int")
MsgBox, % StrLen(StrGet(&sim, 1, "CP12000"))   ; 12000 — utf-32
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Рандом без повторений

В смысле, что скачать, чтобы хоть в "Таблица символов" увидеть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Рандом без повторений

Шрифт, наверно, скачать и установить.

21

Re: AHK: Рандом без повторений

Так в том и вопрос, какой шрифт искать, где скачать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Рандом без повторений

А так не пробовали: http://yandex.ru/yandsearch?text=playin … &lr=53?

23

Re: AHK: Рандом без повторений

О, Спасибо. А Я на русском найти не мог .
Кстати, а как использовать в ГУИ шрифт файла, который не установлен в системе? Помнится где то видел решение.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK: Рандом без повторений

Playing Cards

FontFile := "D:\Downloads\CARDS.TTF"  ; указать путь к файлу со шрифтом
FontName := "Playing Cards"           ; указать имя шрифта из файла

if !DllCall("AddFontResourceEx", Str, FontFile, UInt, FR_PRIVATE := 0x10, Ptr, 0)
{
   MsgBox, % "Не удалось установить шрифт. Ошибка " . A_LastError
   return
}

SendMessage, WM_FONTCHANGE := 0x1D, 0, 0,, % "ahk_id" HWND_BROADCAST := 0xFFFF

Gui, -Caption +ToolWindow +LastFound +AlwaysOnTop
Gui, Color, 0x0000FD
Gui, Font, s80 q3, % FontName
Gui, Add, Text, cRed, K
Gui, Add, Text, x+1 cRed, Y
Gui, Add, Text, x+1 cBlack, m
Gui, Add, Text, x+1 cBlack, n
WinSet, TransColor, 0x0000FD
Gui, Show
Return

Esc::ExitApp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: Рандом без повторений

teadrinker пишет:

Playing Cards

Какие-то дамы лысые в этом шрифте. Скорее на мужиков смахивают.

26

Re: AHK: Рандом без повторений

Хм, я их в плане привлекательности как-то не догадался оценить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

27

Re: AHK: Рандом без повторений

Тут дело даже не в привлекательности, а в том, что их только по букве Q опознать можно. А так лысый мужик какой-то.

28 (изменено: serzh82saratov, 2014-04-18 19:16:43)

Re: AHK: Рандом без повторений

FontFile := "D:\Downloads\CARDS.TTF"  ; указать путь к файлу со шрифтом
FontName := "Playing Cards"           ; указать имя шрифта из файла

if !DllCall("AddFontResourceEx", Str, FontFile, UInt, FR_PRIVATE := 0x10, Ptr, 0)
{
   MsgBox, % "Не удалось установить шрифт. Ошибка " . A_LastError
   return
}

SendMessage, WM_FONTCHANGE := 0x1D, 0, 0,, % "ahk_id" HWND_BROADCAST := 0xFFFF

Блин почему то не меняет шрифт, но и ошибки не выдаёт.

А вообще свой шрифт удобно, можно по порядку как надо раскидать.
В аттаче шрифт можете проверить, у меня не отображается 6 бубей код 0x26, хотя в таблице символов её видно.


Loop % mi := 52
    deck .= 0x20+A_Index "|"
 
size := 122, i := 0, deck := RTrim(deck,"|") 

Gui, -DPIScale
Gui, Font, s40, Playing Cards 
Gui, Add, Text, h%size% w%size% +0x201 Border vcard1 g1 
Gui, Add, Text, hp wp x+5 +0x201 Border vcard2 g2
Gui, Add, Text, hp wp x+5 +0x201 Border vcard3 g3
Gui, Font, s16, Arial
Gui, Add, Text, % "xs y+5 h" size / 3 " w" size * 3 + 10 " Border +0x201 vText gBegin" 
Gui, Show   

Begin:
    Sort, deck, Random D|  
    Global arr := StrSplit(deck, "|"), i := 0, cards := [], mi
    GuiControl,, Text, Полная колода
    Loop 3
        GuiControl,, card%A_Index% 
    Return
    
1:: 
2::
3:: next(A_ThisLabel), cards := []
4:: GoTo Begin

next(count)  {    
    Loop % i + count > mi ? mi - i : count
        cards[A_Index] := arr[++i] 
    Loop 3
    { 
        GuiControl, % cards[A_Index] > 0x003a ? "+cBlack" : "+cRed", card%A_Index% 
        GuiControl,, card%A_Index%, % Chr(cards[A_Index])
        GuiControl, +Redraw, card%A_Index% 
    }
    GuiControl,, Text, % i = mi ? "Пустая колода" : "Осталось " mi - i " карт(ы)" 
} 
Post's attachments

Cards.ttf 123.46 kb, 6 downloads since 2014-04-18 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

29

Re: AHK: Рандом без повторений

С кодами напутал. Там коды не нужны, там карты вместо букв прорисованы, как в моём скрипте.

FontFile := "D:\Downloads\CARDS.TTF"  ; указать путь к файлу со шрифтом
FontName := "Playing Cards"           ; указать имя шрифта из файла

if !DllCall("AddFontResourceEx", Str, FontFile, UInt, FR_PRIVATE := 0x10, Ptr, 0)
{
   MsgBox, % "Не удалось установить шрифт. Ошибка " . A_LastError
   return
}

SendMessage, WM_FONTCHANGE := 0x1D, 0, 0,, % "ahk_id" HWND_BROADCAST := 0xFFFF

Gui, -Caption +ToolWindow +LastFound +AlwaysOnTop
Gui, Color, 0x0000FD
Gui, Font, s80 q3, % FontName
Gui, Add, Text, cRed, F  ; шестёрка бубей
WinSet, TransColor, 0x0000FD
Gui, Show
Return

Esc::ExitApp

Шестёрка бубей — F. Её код 0x46.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder