Mastermind: Difference between revisions
Content added Content deleted
Alpha bravo (talk | contribs) (Added AutoHotkey) |
|||
Line 402: | Line 402: | ||
Mastermind |
Mastermind |
||
)OFF</lang> |
)OFF</lang> |
||
=={{header|AutoHotkey}}== |
|||
<lang AutoHotkey>w := h := 32, maxRows := 10, numPegs := 8 |
|||
ww := floor(w/2-2), hh := floor(h/2-2) |
|||
grid := [], dx := w*4.5 |
|||
gosub, Decode |
|||
Gui, Font, S18, Consolas |
|||
loop, 4 |
|||
{ |
|||
i := A_Index-1 |
|||
Gui, add, button, % "x" (Mod(i, 4)?"+0":"30") " y" |
|||
. (Mod(i, 4)?"10" : "10") " w" w " h" h " vGoal" A_Index , ? |
|||
} |
|||
Gui, Add, Text, % "section x30 h1 0x1000 w" w*6 |
|||
loop, % maxRows |
|||
{ |
|||
Gui, Font, S18, consolas |
|||
row := maxRows - A_Index + 1 |
|||
loop 4 |
|||
{ |
|||
col := A_Index, i:= col-1 |
|||
Gui, add, button, % "x" (Mod(i, 4)?"+0":"s") " y" (Mod(i, 4)?"p":"+2") |
|||
. " w" w " h" h " vButton" row "_" col " gButton" |
|||
} |
|||
Gui, Font, S13, wingdings 2 |
|||
loop 2 |
|||
{ |
|||
col := A_Index, i:= col-1 |
|||
Gui, add, text, % "x" (Mod(i,2)?"+1":"s+" dx) " y" (Mod(i,2)?"p":"p+1") |
|||
. " w" ww " h" hh " vKeyPeg" row "_" col, % Chr(167) |
|||
} |
|||
loop 2 |
|||
{ |
|||
col := A_Index+2, i:= col-1 |
|||
Gui, add, text, % "x" (Mod(i,2)?"+1":"s+" dx) " y" (Mod(i,2)?"p":"+1") |
|||
. " w" ww " h" hh " vKeyPeg" row "_" col, % Chr(167) |
|||
} |
|||
Gui, Add, Text, % "section xs h1 0x1000 w" w*6 " y+4" |
|||
} |
|||
Gui, Font, S12, consolas |
|||
Gui, add, Button, % "xs y+10 gSubmit w" W*2 , Submit |
|||
Gui, add, Button, % "x+0 gResetMM w" W*2, Reset |
|||
Gui, add, Checkbox, % "x+4 vNoDup", No`nDuplicates |
|||
Gui, Font, S18 |
|||
for i, v in pegs |
|||
Gui, add, Radio, % "x" (!Mod(i-1, 4)?"10":"+10") " h" h " w" w+20 " vRadio" A_Index, % v |
|||
Gui, show |
|||
Row := 1 |
|||
return |
|||
;----------------------------------------------------------------------- |
|||
GuiClose: |
|||
ExitApp |
|||
return |
|||
;----------------------------------------------------------------------- |
|||
Decode: |
|||
Gui, Submit, NoHide |
|||
pegs:=[], goal := [], usedPeg :=[] |
|||
pool := ["๐บ","๐","๐งจ","โฝ","๐","โ ","๐ฝ","โ","๐","๐" |
|||
,"๐ฅ","๐","๐","๐ฑ","๐","๐จ","๐ค","๐","๐ถ","๐ด" |
|||
,"๐ฆข","๐","๐","๐ฃ","๐ช","๐","๐ฐ","๐ธ","๐ด","๐"] |
|||
loop, % numPegs |
|||
{ |
|||
Random, rnd, 1, % pool.count() |
|||
pegs[A_Index] := pool.RemoveAt(rnd) |
|||
} |
|||
i := 1 |
|||
while (goal.count()<4) |
|||
{ |
|||
Random, rnd, 1, % pegs.count() |
|||
if (NoDup && usedPeg[pegs[rnd]]) |
|||
continue |
|||
goal[i++] := pegs[rnd] |
|||
usedPeg[pegs[rnd]] := true |
|||
} |
|||
return |
|||
;----------------------------------------------------------------------- |
|||
Button: |
|||
if GameEnd |
|||
return |
|||
Gui, Submit, NoHide |
|||
RegExMatch(A_GuiControl, "Button(\d+)_(\d+)", m) |
|||
if (m1 <> row) |
|||
{ |
|||
thisPeg := Grid[m1, m2] |
|||
for i, v in pegs |
|||
if (v=thisPeg) |
|||
GuiControl,, Radio%i%, 1 |
|||
GuiControl,, % "Button" row "_" m2, % thisPeg |
|||
Grid[row,m2] := thisPeg |
|||
} |
|||
else |
|||
{ |
|||
loop, % pegs.count() |
|||
if Radio%A_Index% |
|||
GuiControl,, % A_GuiControl , % grid[m1, m2] := pegs[A_Index] |
|||
} |
|||
return |
|||
;----------------------------------------------------------------------- |
|||
Submit: |
|||
if (grid[row].count()<4) || GameEnd |
|||
return |
|||
Gui, submit, NoHide |
|||
Ans := [], FIP := [], inGoal := [] |
|||
CIP := CNP := 0, KeyPeg := 1 |
|||
for i, G in Goal |
|||
inGoal[G] := (inGoal[G] ? inGoal[G] : 0) +1 ; save inGoal |
|||
loop, 4 |
|||
Ans[A_Index] := Grid[row, A_Index] ; save Ans |
|||
for i, A in Ans |
|||
if (goal[A_Index] = A) |
|||
CIP++, FIP.push(i), inGoal[A]:=inGoal[A] -1 ; Correct In Place, inGoal-- |
|||
for i, v in FIP |
|||
Ans.RemoveAt(v-i+1) ; remove Correct In Place from Answers |
|||
for i, A in Ans |
|||
if (inGoal[A] > 0) |
|||
CNP++, inGoal[A] := inGoal[A] -1 ; Correct Not in Place |
|||
loop % CIP |
|||
GuiControl,, % "KeyPeg" row "_" KeyPeg++, % Chr(82) ; "โ" |
|||
loop % CNP |
|||
GuiControl,, % "KeyPeg" row "_" KeyPeg++, % Chr(83) ; "X" |
|||
if (CIP=4 || row=maxRows) |
|||
{ |
|||
loop 4 |
|||
GuiControl,, Goal%A_Index%, % Goal[A_Index] |
|||
MsgBox % CIP = 4 ? "You Win" : "You lose" |
|||
GameEnd := true |
|||
} |
|||
Row++ |
|||
return |
|||
;----------------------------------------------------------------------- |
|||
LAlt:: ; peak at solution (for troubleshooting purposes only!) |
|||
loop 4 |
|||
GuiControl,, Goal%A_Index%, % Goal[A_Index] |
|||
While GetKeyState("Lalt", "P") |
|||
continue |
|||
loop 4 |
|||
GuiControl,, Goal%A_Index%, % "?" |
|||
return |
|||
;----------------------------------------------------------------------- |
|||
ResetMM: |
|||
Grid :=[], GameEnd:= false |
|||
loop, 4 |
|||
{ |
|||
Random, rnd, 1, % pegs.count() |
|||
goal[A_Index] := pegs[rnd] |
|||
GuiControl,, Goal%A_Index%, ? |
|||
} |
|||
loop, % maxRows |
|||
{ |
|||
row := maxRows - A_Index + 1 |
|||
loop 4 |
|||
{ |
|||
col := A_Index |
|||
GuiControl,, % "KeyPeg" row "_" col, % Chr(167) ; "O" |
|||
GuiControl,, % "Button" row "_" col |
|||
} |
|||
} |
|||
gosub Decode |
|||
loop, 8 |
|||
GuiControl,, Radio%A_Index%, % pegs[A_Index] |
|||
return |
|||
;-----------------------------------------------------------------------</lang> |
|||
=={{header|C++}}== |
=={{header|C++}}== |