∇ go;State;View;Cmd;P
[1] ⍝
[2] ⍝⍝ the main program
[3] ⍝
[4] ⍝ we need fgetc() from the FILE-IO native function to get user-keystrokes
[5] ⍝
[6] →('F'=↑'lib_file_io.so' ⎕FX 'FILE_IO')/1+↑⎕LC ◊ '⋆⋆⋆ ⎕FX FILE_IO failed' ◊ →0
[7] State←27 3⍴'-' ◊ ⊣{ ((face ⍵) ⌷ State) ←'YOBRGW'[⍵] } ¨⍳6
[8] ∆Initial_State←State ⍝ the unscrambled state
[9] ∆3D←1 ⍝ initial view: 3D
[10] ∆TCNT←0 ⍝ turn counter
[11] LOOP: ∆3D show_cube State
[12] LP1: Cmd←⎕UCS FILE_IO[9] 0 ⍝ FIO∆fgetc
[13] →(Cmd∈'UuDdLlRrFfBb')/MOVE
[14] →(Cmd='Hh?Qq P',⎕UCS 10)/HELP HELP HELP 0 0 LP1 PRO STAT
[15] →(Cmd='03MmpSs')/CLR V3D Q1 Q6 PROE SETUP SETUP
[16] 'Invalid command:' Cmd ◊ →LP1
[17] HELP: ⊣{⎕←⍵}¨∆HELP ◊ →LP1
[18] STAT: print_level State ◊ →LP1
[19] PRO: 'Proposal:',P←propose_moves State ◊ →LP1
[20] MOVE: 'Turn: ', Cmd ◊ State←State turn Cmd ◊ →LOOP
[21] CLR: 'Clear' ◊ State←∆Initial_State ◊ ∆TCNT←0 ◊ →LOOP
[22] V3D: ∆3D←∼∆3D ◊ →LOOP
[23] Q6: '6 random turns' P←'UuDdLlRrFfBb'[?6⍴12]
[24] State←State do_moves P ◊ ∆TCNT←0 ◊ →LOOP
[25] Q1: '1 random turn' P←'UuDdLlRrFfBb'[?,12]
[26] State←State do_moves P ◊ ∆TCNT←0 ◊ →LOOP
[27] PROE: 'Proposal:', P←propose_moves State ◊ State←State do_moves ∈P ◊ →LOOP
[28] SETUP: State←State setup_cube Cmd='S' ◊ →LOOP
∇
|