107 lines
2.5 KiB
Text
107 lines
2.5 KiB
Text
include "NSLog.incl"
|
|
str15 guess, goal
|
|
short x, y
|
|
cgRect wndrect
|
|
|
|
begin enum 1
|
|
_window
|
|
_bullLabel
|
|
_cowLabel
|
|
_horzLine
|
|
_vertLine
|
|
_newGameBtn
|
|
_alert = 101
|
|
end enum
|
|
|
|
void local fn showStr( string as str15 )
|
|
short r
|
|
x = 20
|
|
for r = 1 to string[0]
|
|
print %(x,y)chr$( string[r] );
|
|
x += 39
|
|
next
|
|
end fn
|
|
|
|
void local fn NewGame
|
|
str15 ch
|
|
goal = "" : guess = "" :y = 20
|
|
window _window,,wndRect
|
|
text ,,fn colorRed
|
|
cls
|
|
fn showStr( "????" )
|
|
|
|
do
|
|
ch = chr$(rnd(9) or _"0")
|
|
if instr$(0, goal, ch) == 0 then goal += ch
|
|
until goal[0] == 4
|
|
|
|
nslog(@"%u",val&(goal)) //unrem for testing
|
|
y += 48
|
|
end fn
|
|
|
|
local fn SetWindowFrame
|
|
CGRect r = fn WindowContentRect( _window )
|
|
r.size.height += 32
|
|
r.origin.y -= 32
|
|
window _window,,r
|
|
if ( r.origin.y < 150 )
|
|
alert _alert,, @"Too many guesses!",, @"Give up", YES
|
|
fn newGame
|
|
end if
|
|
end fn
|
|
|
|
local fn play( ch as str15 )
|
|
short r, bulls = 0, cows = 0
|
|
if instr$(0, guess, ch) then exit fn
|
|
guess += ch
|
|
text,,fn colorDarkGray
|
|
fn showStr( guess )
|
|
if guess[0] < 4 then exit fn
|
|
|
|
for r = 1 to 4
|
|
if goal[r] == guess[r] then bulls++ : continue
|
|
if instr$(0, goal, chr$(guess[r]) ) then cows++
|
|
next
|
|
|
|
select
|
|
case bulls == 4
|
|
text ,,fn colorRed
|
|
print %(x + 31, y)("W I N!")
|
|
y = 20 : fn showStr( goal )
|
|
case else : print %(x + 35, y)bulls;" "; cows
|
|
y += 32 : guess = ""
|
|
end select
|
|
fn SetWindowFrame
|
|
end fn
|
|
|
|
|
|
void local fn BuildWindow
|
|
subclass window _window, @"Bulls and cows", (0,0,311,114), NSWindowStyleMaskTitled + NSWindowStyleMaskClosable
|
|
wndrect = = fn WindowContentRect( _window )
|
|
textlabel _bullLabel, @"🐂", (198,59,38,40)
|
|
textlabel _cowLabel, @"🐄", (255,59,38,40)
|
|
ControlSetFontWithName( _bullLabel, NULL, 30 )
|
|
ControlSetFontWithName( _cowLabel, NULL, 30 )
|
|
box _horzLine,, (12,50,287,5), NSBoxSeparator
|
|
box _vertLine,, (180,12,5,90), NSBoxSeparator
|
|
ViewSetAutoresizingMask( _vertLine, NSViewHeightSizable )
|
|
button _newGameBtn,,, @"New Game", (198,13,100,32)
|
|
ViewSetAutoresizingMask( _newGameBtn, NSViewMaxYMargin )
|
|
text @"menlo bold",24,,fn ColorWindowBackground
|
|
end fn
|
|
|
|
void local fn DoDialog( evt as long, tag as long )
|
|
select ( evt )
|
|
case _windowKeyDown //: stop
|
|
short ch = intval( fn EventCharacters )
|
|
if ch then fn play( chr$( ch or _"0" ) ):DialogEventSetBool(YES)
|
|
case _btnClick : fn NewGame
|
|
case _windowWillClose : end
|
|
end select
|
|
end fn
|
|
|
|
on dialog fn DoDialog
|
|
fn buildWindow
|
|
fn newGame
|
|
|
|
HandleEvents
|