Tic Tac Toe — File Browser

TicTacToev1.0 / TicTacToev1.0 / tictactoe.mrc

tictactoe.mrc — 20.63 KB — Download this file

on 1:load:{
  if ( $version != 5.11 ) {
    echo -s  
    echo -s 2 Sorry, Tic Tac Toe is designed to run on mIRC 5.11 only.
    echo -s  
    .timer 1 1 unload -rs TicTacToe.mrc
  }
  else {
    set %t3i.pos 60 80 
    set %t3i.mark1 ¤ 
    set %t3i.mark2 × 
    set %t3i.pmark1 Mark1 ¤ 
    set %t3i.pmark2 Mark2 × 
    set %t3i.winstat -ar 
    set %t3i.last 1
    echo -s  
    echo -s 2 Tic Tac Toe has been installed...
    echo -s 2 Use the menu bar popup or type /ttt to play.
    echo -s  
  }
}
menu menubar {
  Tic Tac Toe:tTt
}
alias tTt if ( %t3i.last == 1 ) { t3.start } | else { t3.twostart }
menu @ Tic Tac Toe {
  dclick set %t3i.pos $window(@ Tic Tac Toe).x $window(@ Tic Tac Toe).y | window -c @ Tic Tac Toe
  Start
  .1up:t3.start
  .2up:t3.twostart
  -
  Move
  .%t3p.A1:t3.move a1
  .%t3p.A2:t3.move a2
  .%t3p.A3:t3.move a3
  .-
  .%t3p.B1:t3.move b1
  .%t3p.B2:t3.move b2
  .%t3p.B3:t3.move b3
  .-
  .%t3p.C1:t3.move c1
  .%t3p.C2:t3.move c2
  .%t3p.C3:t3.move c3
  Side
  .%t3p.heads:set %t3.pick heads | t3.flip
  .%t3p.tails:set %t3.pick tails | t3.flip tails
  .-
  .%t3p.2up:t3.twostart
  -
  Prefs
  .%t3i.pmark1:set %t3.temp %t3i.mark1 | set %t3i.mark1 $left($$?="First player marker...",1) | set %t3i.pmark1 Mark1 $! | t3.reptok %t3.temp  %t3i.mark1
  .%t3i.pmark2:set %t3.temp %t3i.mark2 | set %t3i.mark2 $left($$?="Second player marker...",1) | set %t3i.pmark2 Mark2 $! | t3.reptok %t3.temp %t3i.mark2
  .-
  .Editbox:if ( e isin %t3i.winstat ) { set %t3i.winstat -ar } | else { set %t3i.winstat -are } | t3.cycle
  .Uninstall:if ( y isin $$?="Are you SURE you want to uninstall???" ) { t3.uninstall }
}
alias t3.reptok {
  if ( %t3v.A1 == $1 ) { set %t3v.A1 $2 }
  if ( %t3v.A2 == $1 ) { set %t3v.A2 $2 }
  if ( %t3v.A3 == $1 ) { set %t3v.A3 $2 }
  if ( %t3v.B1 == $1 ) { set %t3v.B1 $2 }
  if ( %t3v.B2 == $1 ) { set %t3v.B2 $2 }
  if ( %t3v.B3 == $1 ) { set %t3v.B3 $2 }
  if ( %t3v.C1 == $1 ) { set %t3v.C1 $2 }
  if ( %t3v.C2 == $1 ) { set %t3v.C2 $2 }
  if ( %t3v.C3 == $1 ) { set %t3v.C3 $2 }
  t3.update
}
alias t3.flip {
  t3.init
  unset %t3.mode
  t3.update 
  t3.pline @ Tic Tac Toe 2 You chose %t3.pick $+ …
  .timer 1 1 t3.flipn
}
alias t3.flipn {
  if ( $rand(1,2) == 1 ) { set %t3.temp Heads! }
  else { set %t3.temp Tails! }
  if ( %t3.pick isin %t3.temp ) { 
    set %t3.temp %t3.temp You win. 
    set %t3.adv them 
    set %t3.turn h
    t3.info w
  }
  else { 
    set %t3.temp %t3.temp Me first 
    set %t3.adv us
    set %t3.turn c 
    t3.info
    .timer 1 2 t3.decide 
  } 
  t3.pline @ Tic Tac Toe 3 %t3.temp
  t3.setpops
  unset %t3p.heads | unset %t3p.tails | unset %t3p.2up
}
alias t3.setpops {
  unset %t3p.*
  unset %t3..
  :b
  inc %t3.. 
  if ( %t3.. <= 3 ) {
    set %t3p.A [ $+ [ %t3.. ] ] A $+ %t3.. 
    set %t3p.B [ $+ [ %t3.. ] ] B $+ %t3.. 
    set %t3p.C [ $+ [ %t3.. ] ] C $+ %t3.. 
    goto b 
  }
}
alias t3.2piece if ( %t3.mode == 2up ) { | if ( %t3.turn == 1 ) { return   15-14-1- %t3i.mark1 1-14-15- } | elseif ( %t3.turn == 2 ) { return   15-14-1- %t3i.mark2 1-14-15- } } | else { return }
alias t3.pline rline $1-2 $left($line($1,$2), $calc( 34 - $len($strip($left($line($1,$2),16)))))   $+ $3-
alias t3.pos if ($window(@ Tic Tac Toe)) { set %t3i.pos $window(@ Tic Tac Toe).x $window(@ Tic Tac Toe).y } | else { .timer63 off | unset %t3p.* | unset %t3v.* | unset %t3.* }
alias t3.for unset %t | :a  | if ( %t < $1 ) { [ $2- ] | inc %t | goto a }
alias t3.collen if ( $1 > $len($2-) ) { %t = $1 - $len($2-) | return $2- $+  $str( ,%t) } | else { return $2- }
alias t3.clearblocks unset %t3.. | :a | inc %t3.. | if ( %t3.. <= 3 ) { set %t3v.A [ $+ [ %t3.. ] ]   | set %t3v.B [ $+ [ %t3.. ] ]   | set %t3v.C [ $+ [ %t3.. ] ]   | goto a }
alias t3.init {
  .timer63 0 1 t3.pos 
  unset %t3v.* 
  unset %t3.info 
  set %t3.moves 0 
  unset %t3p.* 
  set %t3p.heads Heads 
  set %t3p.tails or Tails 
  set %t3p.2up 2player 
  t3.clearblocks
}
alias t3.cycle {
  set %t3.ln1 $line(@ Tic Tac Toe,1)
  set %t3.ln2 $line(@ Tic Tac Toe,2)
  set %t3.ln3 $line(@ Tic Tac Toe,3)
  set %t3.ln4 $line(@ Tic Tac Toe,4)
  window -c @ Tic Tac Toe 
  window [ %t3i.winstat ] @ Tic Tac Toe [ %t3i.pos [ $t3.osize ] ] @ Tic Tac Toe Courier New Bold 18 
  titlebar @ Tic Tac Toe by zeno     ::     zeno@cygnus.uwa.edu.au 
  t3.for 5 aline @ Tic Tac Toe   
  rline @ Tic Tac Toe 1 %t3.ln1
  rline @ Tic Tac Toe 2 %t3.ln2
  rline @ Tic Tac Toe 3 %t3.ln3
  rline @ Tic Tac Toe 4 %t3.ln4
}
alias t3.osize if ( e isin %t3i.winstat ) { return 485 180 } | else { return 485 150 }
alias t3.start {
  window [ %t3i.winstat ] @ Tic Tac Toe [ %t3i.pos [ $t3.osize ] ] @ Tic Tac Toe Courier New Bold 18
  titlebar @ Tic Tac Toe by zeno     ::     zeno@cygnus.uwa.edu.au 
  t3.init
  set %t3.mode heads?
  set %t3i.last 1
  clear @ Tic Tac Toe
  t3.for 4 aline @ Tic Tac Toe   
  t3.update
  t3.pline @ Tic Tac Toe 2    Tic Tac Toe Ready
  t3.pline @ Tic Tac Toe 3     Heads or Tails?
}
alias t3.twostart {
  window [ %t3i.winstat ] @ Tic Tac Toe [ %t3i.pos [ $t3.osize ] ] @ Tic Tac Toe Courier New Bold 18
  titlebar @ Tic Tac Toe by zeno     ::     zeno@cygnus.uwa.edu.au 
  t3.clearblocks
  set %t3.mode 2up
  set %t3i.last 2
  set %t3.turn 1
  unset %t3.info
  clear @ Tic Tac Toe
  t3.setpops
  t3.for 4 aline @ Tic Tac Toe   
  t3.update
  t3.pline @ Tic Tac Toe 2    Tíc~Tác~Tóe Ready
  t3.pline @ Tic Tac Toe 3   Launch us player one.
}
alias t3.update {
  set %t3.. 1
  if ( $line(@ Tic Tac Toe,0) == 4 ) { iline @ Tic Tac Toe 1  12  A   B   C }
  rline @ Tic Tac Toe 1  12  A   B   C4         $t3.2piece
  :a
  inc %t3.. 
  if ( %t3.. <= 4 ) { 
    if ( %t3.. != 4 ) { rline @ Tic Tac Toe %t3.. 12 $+ $calc( %t3.. - 1 ) $+ 2  [ %t3v. [ $+ [ [ A ] [ $+ [ $calc( %t3.. - 1 ) ] ] ] ] ] $chr(124) [ %t3v. [ $+ [ [ B ] [ $+ [ $calc( %t3.. - 1 ) ] ] ] ] ] $chr(124) [ %t3v. [ $+ [ [ C ] [ $+ [ $calc( %t3.. - 1 ) ] ] ] ] ]  }
    else { rline @ Tic Tac Toe %t3.. 12 $+ $calc( %t3.. - 1 ) 2 [ %t3v. [ $+ [ [ A ] [ $+ [ $calc( %t3.. - 1 ) ] ] ] ] ] $chr(124) [ %t3v. [ $+ [ [ B ] [ $+ [ $calc( %t3.. - 1 ) ] ] ] ] ] $chr(124) [ %t3v. [ $+ [ [ C ] [ $+ [ $calc( %t3.. - 1 ) ] ] ] ] ]    %t3.info }
    goto a 
  }   
}
on 1:input:{ 
  if ( @ Tic Tac Toe == $active && $left($1,1) != / ) {
    if ( %t3.mode == heads? ) {
      if ( $left($1,1) == h ) { set %t3.pick heads | t3.flip }
      elseif ( $left($1,1) == t ) { set %t3.pick tails | t3.flip }
      else { t3.pline @ Tic Tac Toe 4  (Type H or T below) }
    }
    elseif ( %t3.mode == over ) { 
      if ( $left($1,1) == y ) { tTt }
      elseif ( $left($1,1) == n ) { window -c @ Tic Tac Toe }
    }
    elseif ( %t3.turn == h ) {
      t3.move $1-
    }
} | halt }
alias t3.move {
  if ( $len($1) == 2 && ( $left($1,1) == A || $left($1,1) == B || $left($1,1) == C ) && ( $right($1,1) >= 1 && $right($1,1) <= 3 )) {
    if ( %t3.mode != 2up ) {
      if ( [ %t3v. [ $+ [ $1 ] ] ] ==   ) { set %t3v. [ $+ [ $1 ] ] %t3i.mark1 | inc %t3.moves | set %t3.turn c | t3.info | [ unset %t3p. [ $+ [ $1 ] ] ] | t3.update | t3.check }
      elseif ( [ %t3v. [ $+ [ $1 ] ] ] == %t3i.mark1 ) { t3.pline @ Tic Tac Toe 2 You're already in $1! }
      else { t3.pline @ Tic Tac Toe 2 The opponent's in $1! }
    }
    else {
      if ( [ %t3v. [ $+ [ $1 ] ] ] ==   ) { set %t3v. [ $+ [ $1 ] ] $t3.thistok | t3.altturn | t3.info | [ unset %t3p. [ $+ [ $1 ] ] ] | t3.update | t3.check }
      elseif ( [ %t3v. [ $+ [ $1 ] ] ] == %t3i.mark1 ) { t3.pline @ Tic Tac Toe 2 You're already in $1! }
      else { t3.pline @ Tic Tac Toe 2 The opponent's in $1! }
    }
  }
  else { t3.pline @ Tic Tac Toe 2   - Syntax: $rand(A,C) $+ $rand(1,3) etc - }
}
alias t3.altturn if ( %t3.turn == 1 ) { set %t3.turn 2 } | elseif ( %t3.turn == 2 ) { set %t3.turn 1 }
alias t3.thistok if ( %t3.turn == 1 ) { return %t3i.mark1 } | elseif ( %t3.turn == 2 ) { return %t3i.mark2 }
alias t3.check {
  set %t3.temp @
  :checkdown
  set %t3.temp $chr($calc( $asc(%t3.temp) + 1 ))
  if ( [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 1 ] ] ] ] ] !=   && [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 1 ] ] ] ] ] == [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 2 ] ] ] ] ] && [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 2 ] ] ] ] ] == [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 3 ] ] ] ] ] ) {
    if ( [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 1 ] ] ] ] ] == %t3i.mark1 ) { 
      if ( %t3.mode == 2up ) { set %t3.winner 1 } 
      else { set %t3.winner h } 
    }
    elseif ( [ %t3v. [ $+ [ [ %t3.temp ] [ $+ [ 1 ] ] ] ] ] == %t3i.mark2 ) { 
      if ( %t3.mode == 2up ) { set %t3.winner 2 } 
      else { set %t3.winner c } 
    }
    set %t3.temp %t3.temp $+ 1, %t3.temp $+ 2 and %t3.temp $+ 3 | t3.endgame
  }
  if ( %t3.temp != C ) { goto checkdown }
  unset %t3.temp
  :checkacross
  inc %t3.temp
  if ( [ %t3v.A [ $+ [ [ %t3.temp ] ] ] ] !=   && [ %t3v.A [ $+ [ [ %t3.temp ] ] ] ] == [ %t3v.B [ $+ [ [ %t3.temp ] ] ] ] && [ %t3v.B [ $+ [ [ %t3.temp ] ] ] ] == [ %t3v.C [ $+ [ %t3.temp ] ] ] ) {
    if ( [ %t3v.A [ $+ [ [ %t3.temp ] ] ] ] == %t3i.mark1 ) { 
      if ( %t3.mode == 2up ) { set %t3.winner 1 } 
      else { set %t3.winner h } 
    }
    elseif ( [ %t3v.A [ $+ [ [ %t3.temp ] ] ] ] == %t3i.mark2 ) { 
      if ( %t3.mode == 2up ) { set %t3.winner 2 } 
      else { set %t3.winner c }
    }
    set %t3.temp A $+ %t3.temp $+ , B $+ %t3.temp and C $+ %t3.temp | t3.endgame 
  }
  if ( %t3.temp < 3 ) { goto checkacross }
  if ( %t3v.A1 !=   && %t3v.A1 == %t3v.B2 && %t3v.B2 == %t3v.C3 ) {
    if ( %t3v.A1 == %t3i.mark1 ) { | if ( %t3.mode == 2up ) { set %t3.winner 1 } | else { set %t3.winner h } }
    elseif ( %t3v.A1 == %t3i.mark2 ) { | if ( %t3.mode == 2up ) { set %t3.winner 2 } | else { set %t3.winner c } }
    set %t3.temp A1, B2 and C3 | t3.endgame
  }
  if ( %t3v.C1 !=   && %t3v.C1 == %t3v.B2 && %t3v.B2 == %t3v.A3 ) {
    if ( %t3v.C1 == %t3i.mark1 ) { 
      if ( %t3.mode == 2up ) { set %t3.winner 1 } 
      else { set %t3.winner h } 
    }
    elseif ( %t3v.C1 == %t3i.mark2 ) { 
      if ( %t3.mode == 2up ) { set %t3.winner 2 } 
      else { set %t3.winner c }
    }
    set %t3.temp C1, B2 and A3 | t3.endgame
  }
  if ( %t3v.A1 !=   && %t3v.A2 !=   && %t3v.A3 !=   && %t3v.B1 !=   && %t3v.B2 !=   && %t3v.B3 !=   && %t3v.C1 !=   && %t3v.C2 !=   && %t3v.C3 !=   ) { set %t3.winner n | set %t3.mode over | t3.endgame }
  elseif ( %t3.turn == h || %t3.turn isnum ) { t3.info w }
  else { t3.decide }
}

alias t3.endgame {
  set %t3.mode over
  t3.update
  if ( %t3.winner != n ) {
    unset %t3p.*
    set %t3p.heads Heads
    set %t3p.tails Tails
    set %t3p.2up 2player
    set %t3v. [ $+ [ $left(%t3.temp,2) ] ]  $+ [ %t3v. [ $+ [ $left(%t3.temp,2) ] ] ] $+ 
    set %t3v. [ $+ [ $mid(%t3.temp,5,2) ] ]  $+ [ %t3v. [ $+ [ $mid(%t3.temp,5,2) ] ] ] $+ 
    set %t3v. [ $+ [ $right(%t3.temp,2) ] ]  $+ [ %t3v. [ $+ [ $right(%t3.temp,2) ] ] ] $+ 
    unset %t3.info
    t3.update
    if ( %t3.winner == h ) { t3.pline @ Tic Tac Toe 2 You win!!! }
    elseif ( %t3.winner == c ) { t3.pline @ Tic Tac Toe 2 Computer wins!!! }
    elseif ( %t3.winner isnum ) { t3.pline @ Tic Tac Toe 2 Player %t3.winner wins!!! }
    t3.pline @ Tic Tac Toe 3 Line on %t3.temp
  }
  else { t3.pline @ Tic Tac Toe 2 No one wins. }
  .timer 1 2 t3.pline @ Tic Tac Toe 4    Another game? 
  t3.init
  t3.clearblocks
  halt
}
alias t3.surekill {
  set %t3.tmp3 @ 
  unset %t3.tmp4 
  :a
  set %t3.tmp3 $chr($calc( $asc(%t3.tmp3) + 1 ))
  set %t3.tmp2 [ %t3v. [ $+ [ [ %t3.tmp3 ] [ $+ [ 1 ] ] ] ] ] $+ [ %t3v. [ $+ [ [ %t3.tmp3 ] [ $+ [ 2 ] ] ] ] ] $+ [ %t3v. [ $+ [ [ %t3.tmp3 ] [ $+ [ 3 ] ] ] ] ]
  if (   !isin %t3.tmp2 ) { goto b }
  if ( $count(%t3.tmp2,%t3i.mark1) < 2 && $count(%t3.tmp2, %t3i.mark2 ) < 2 ) { goto b }
  if ( %t3i.mark1 isin %t3.tmp2 ) { set %t3.tmp4 %t3.tmp3 $+ $pos(%t3.tmp2, ) |  goto b }
  else { t3.strike %t3.tmp3 $+ $pos(%t3.tmp2, ) }
  :b
  if ( %t3.tmp3 != C ) { goto a } 
  unset %t3.tmp3 | :f | inc %t3.tmp3
  set %t3.tmp2 [ %t3v.A [ $+ [ %t3.tmp3 ] ] ] $+ [ %t3v.B [ $+ [ %t3.tmp3 ] ] ] $+ [ %t3v.C [ $+ [ %t3.tmp3 ] ] ]
  if (   !isin %t3.tmp2 ) { goto g }
  if ( $count(%t3.tmp2,%t3i.mark1) < 2 && $count(%t3.tmp2,%t3i.mark2) < 2  ) { | if ( %t3.tmp3 == 3 ) { goto h } | goto f }
  if ( %t3i.mark1 isin %t3.tmp2 ) { set %t3.tmp4 $chr($calc( $pos(%t3.tmp2, ) + 64 )) $+ %t3.tmp3 | if ( %t3.tmp3 == 3 ) { goto h } | goto f }
  else { t3.strike $chr($calc( $pos(%t3.tmp2, ) + 64 )) $+ %t3.tmp3 }
  :g
  if ( %t3.tmp3 != 3 ) { goto f }
  :h
  set %t3.tmp2 %t3v.A1 $+ %t3v.B2 $+ %t3v.C3 
  if ( $t3.cond ) { goto p }
  if ( %t3i.mark1 isin %t3.tmp2 ) { set %t3.tmp4 $chr($calc( $pos(%t3.tmp2, ) + 64 )) $+ $pos(%t3.tmp2, ) }
  else { t3.strike $chr($calc( $pos(%t3.tmp2, ) + 64 )) $+ $pos(%t3.tmp2, ) }
  :p
  set %t3.tmp2 %t3v.A3 $+ %t3v.B2 $+ %t3v.C1 
  if ( $t3.cond ) { goto z }
  if ( %t3i.mark1 isin %t3.tmp2 ) { set %t3.tmp4 $chr($calc( $pos(%t3.tmp2, ) + 64 )) $+ $calc( 4 - $pos(%t3.tmp2, ) ) }
  else { t3.strike $chr($calc( $pos(%t3.tmp2, ) + 64 )) $+ $calc( 4 - $pos(%t3.tmp2, ) ) }
  :z
  if ( %t3.tmp4 ) { t3.strike %t3.tmp4 }
}
alias t3.trickplay {
  unset %t3.temp | :a | inc %t3.temp
  set %t3.tmp1 $gettok( A1 A1 A3 A3 C1 C1 C3 C3 ,%t3.temp,32)
  set %t3.tmp2 $gettok( B3 C2 B1 C2 A2 B3 A2 B1 ,%t3.temp,32)
  set %t3.tmp3 $gettok( A2 B1 A2 B3 A1 B3 B3 C2 ,%t3.temp,32)
  set %t3.tmp4 $gettok( A3 C1 A1 C3 B1 C2 A3 C1 ,%t3.temp,32)
  set %t3.tmp5 $gettok( C3 C3 C1 C1 A3 A3 A1 A1 ,%t3.temp,32)
  set %t3.tmp6 $gettok( A3 C1 A1 C3 A1 C3 A3 C1 ,%t3.temp,32)
  if ( [ %t3v. [ $+ [ %t3.tmp1 ] ] ] == %t3i.mark1 && [ %t3v. [ $+ [ %t3.tmp2 ] ] ] == %t3i.mark1 && [ %t3v. [ $+ [ %t3.tmp3 ] ] ] ==   && [ %t3v. [ $+ [ %t3.tmp4 ] ] ] ==   && [ %t3v. [ $+ [ %t3.tmp5 ] ] ] ==   ) { t3.strike %t3.tmp6 }
  if ( %t3.temp < 8 ) { goto a }
}
alias t3.cond if (   !isin %t3.tmp2 || ( $count(%t3.tmp2, %t3i.mark1 ) < 2 && $count(%t3.tmp2,%t3i.mark2) < 2 )) { return $true } | else { return $false }
alias t3.randplay {
  unset %t3.tem1
  if ( %t3v.A1 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ A1 }
  if ( %t3v.B1 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ B1 }
  if ( %t3v.C1 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ C1 }
  if ( %t3v.A2 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ A2 }
  if ( %t3v.B2 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ B2 }
  if ( %t3v.C2 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ C2 }
  if ( %t3v.A3 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ A3 }
  if ( %t3v.B3 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ B3 }
  if ( %t3v.C3 ==   ) { set %t3.tem1 %t3.tem1 $+ . $+ C3 }
  t3.strike $gettok(%t3.tem1,$rand(1,$gettok(%t3.tem1,0,46)),46)
}
alias t3.info {
  if ($1) {
    if ( %t3.turn isnum ) {
      set %t3.tem5 $rand(101,103) | goto %t3.tem5
      :101 | set %t3.info Player %t3.turn $+ 's turn now… | goto a
      :102 | set %t3.info Go for it player %t3.turn $+ … | goto a
      :103 | set %t3.info Waiting for player %t3.turn $+ … | goto a
    }
    else {
      set %t3.tem5 $rand(1,3) | goto %t3.tem5
      :1 | set %t3.info Your turn to move… | goto a
      :2 | set %t3.info It's your turn now… | goto a
      :3 | set %t3.info Awaiting your move… | goto a
    }
    :a | t3.pline @ Tic Tac Toe 4 %t3.info
  }
  else { unset %t3.info | t3.pline @ Tic Tac Toe 4 }
}
alias t3.rndcor {
  unset %t3.temp 
  if ( %t3v.A1 ==   ) { set %t3.temp A1 } 
  if ( %t3v.A3 ==   ) { set %t3.temp %t3.temp A3 } 
  if ( %t3v.C1 ==   ) { set %t3.temp %t3.temp C1 } 
  if ( %t3v.C3 ==   ) { set %t3.temp %t3.temp C3 } 
  if ( %t3.temp ) { t3.strike $gettok(%t3.temp,$rand(1,$gettok(%t3.temp,0,32)),32) ) }
}
alias t3.rndsid {
  unset %t3.temp
  if ( %t3v.B1 ==   ) { set %t3.temp B1 } 
  if ( %t3v.A2 ==   ) { set %t3.temp %t3.temp A2 } 
  if ( %t3v.B3 ==   ) { set %t3.temp %t3.temp B3 } 
  if ( %t3v.C2 ==   ) { set %t3.temp %t3.temp C2 } 
  if ( %t3.temp ) { t3.strike $gettok(%t3.temp,$rand(1,$gettok(%t3.temp,0,32)),32) ) }
}
alias t3.strike if ( $1 != $null && [ %t3v. [ $+ [ $1 ] ] ] ==   ) { set %t3v. [ $+ [ $1 ] ] %t3i.mark2 | inc %t3.moves | set %t3.turn h | [ unset %t3p. [ $+ [ $1 ] ] ] | t3.update | t3.pline @ Tic Tac Toe 2 I moved to $1 | t3.check | halt }
alias t3.distrike set %t3.temp $rand(1,2) | if ( %t3.temp == 1 ) { t3.strike $1 } | else { t3.strike $2 }
alias t3.decide {
  t3.surekill
  if ( %t3.adv == them ) {
    if ( %t3.moves == 1 ) {
      if ( ( %t3v.A1 == %t3i.mark1 ) || ( %t3v.C1 ==  %t3i.mark1 ) || ( %t3v.A3 ==  %t3i.mark1 ) || ( %t3v.C3 ==  %t3i.mark1 ) ) { t3.strike B2 } 
      if ( %t3v.A2 == %t3i.mark1 || %t3v.B1 == %t3i.mark1 ) { t3.strike A1 } | if ( %t3v.C2 == %t3i.mark1 || %t3v.B3 == %t3i.mark1 ) { t3.strike C1 }
    }
    if ( %t3.moves == 3 ) {
      t3.mcommon
      t3.yroad
      t3.toway
      t3.finala
    }
  }
  else {
    if ( %t3.moves == 0 ) { t3.rndcor }
    elseif ( %t3.moves == 2 ) {
      t3.partner2
      t3.opmine2
      t3.opblock
    }
    elseif ( %t3.moves == 4 ) {
      t3.partner4
      t3.opmine4
    }
  }
  t3.trickplay
  t3.rndcor
  t3.randplay  
}

;=== Circumstance checkers
alias t3.mcommon if ( ( %t3v.b2 == %t3i.mark2 && %t3v.a1 == %t3i.mark1 && %t3v.c3 == %t3i.mark1 ) || ( %t3v.b2 == %t3i.mark2 && %t3v.a3 == %t3i.mark1 && %t3v.c1 == %t3i.mark1 ) ) { t3.rndsid }
alias t3.finala {
  unset %t3.temp | :a | inc %t3.temp
  set %t3.tmp1 $gettok( A1 C1 A3 C3 ,%t3.temp,32) 
  set %t3.tmp2 $gettok( A2 B1 A2 B3 ,%t3.temp,32) 
  set %t3.tmp3 $gettok( B1 C2 B3 C2 ,%t3.temp,32) 
  if ( [ %t3v. [ $+ [ %t3.tmp1 ] ] ] == %t3i.mark2 && [ %t3v. [ $+ [ %t3.tmp2 ] ] ] == %t3i.mark1 && [ %t3v. [ $+ [ %t3.tmp3 ] ] ] == %t3i.mark1 ) { t3.strike B2 }
  if ( %t3.temp < 8 ) { goto a }
}
alias t3.toway {
  unset %t3.temp | :a | inc %t3.temp
  set %t3.tmp1 $gettok( A1 A2 A1 B1 C1 C2 A3 B3 ,%t3.temp,32) 
  set %t3.tmp2 $gettok( A2 A3 B1 C1 C2 C3 B3 C3 ,%t3.temp,32) 
  set %t3.tmp3 $gettok( A3 A1 C1 A1 C3 C1 C3 A3 ,%t3.temp,32) 
  set %t3.tmp4 $gettok( C3 C1 C3 A3 A3 A1 C1 A1 ,%t3.temp,32) 
  if ( [ %t3v. [ $+ [ %t3.tmp1 ] ] ] == %t3i.mark1 && [ %t3v. [ $+ [ %t3.tmp2 ] ] ] == %t3i.mark1 && [ %t3v. [ $+ [ %t3.tmp3 ] ] ] == %t3i.mark2 ) { t3.strike %t3.tmp4 }
  if ( %t3.temp < 8 ) { goto a }
}
alias t3.yroad if ( ( %t3v.A1 == %t3i.mark1 && %t3v.A3 == %t3i.mark1 ) || ( %t3v.A1 == %t3i.mark1 && %t3v.C1 == %t3i.mark1 ) || ( %t3v.C1 == %t3i.mark1 && %t3v.C3 == %t3i.mark1 ) || ( %t3v.A3 == %t3i.mark1 && %t3v.C3 == %t3i.mark1 ) ) { t3.strike B2 }
alias t3.partner4 if ( ( %t3v.A1 == %t3i.mark2 && %t3v.B1 == %t3i.mark1 && %t3v.C1 == %t3i.mark2 ) || ( %t3v.A1 == %t3i.mark2 && %t3v.A2 == %t3i.mark1 && %t3v.A3 == %t3i.mark2 ) || ( %t3v.A3 == %t3i.mark2 && %t3v.B3 == %t3i.mark1 && %t3v.C3 == %t3i.mark2 ) || ( %t3v.C1 == %t3i.mark2 && %t3v.C2 == %t3i.mark1 && %t3v.C3 == %t3i.mark2 ) ) { t3.strike B2 }
alias t3.partner2 {
  unset %t3.temp | :a | inc %t3.temp
  set %t3.tmp1 $gettok( A1 C1 A3 C3 ,%t3.temp,32) 
  set %t3.tmp2 $gettok( B1 B1 A2 C3 ,%t3.temp,32) 
  set %t3.tmp3 $gettok( A3 C3 C3 C1 ,%t3.temp,32) 
  set %t3.tmp4 $gettok( A2 C2 B3 C2 ,%t3.temp,32) 
  set %t3.tmp5 $gettok( C1 A1 A1 A3 ,%t3.temp,32)
  if ( [ %t3v. [ $+ [ %t3.tmp1 ] ] ] == %t3i.mark2 ) { 
    if ( [ %t3v. [ $+ [ %t3.tmp2 ] ] ] == %t3i.mark1 ) { 
      t3.strike %t3.tmp3 
    } 
    if ( [ %t3v. [ $+ [ %t3.tmp4 ] ] ] == %t3i.mark1 ) { t3.strike %t3.tmp5 } 
  } 
  if ( %t3.temp < 4 ) { goto a }
}
alias t3.opblock if ( %t3v.A1 == %t3i.mark2 ) { t3.strike C3 } | if ( %t3v.C1 == %t3i.mark2 ) { t3.strike A3 } | if ( %t3v.A3 == %t3i.mark2 ) { t3.strike C1 } | if ( %t3v.C3 == %t3i.mark2 ) { t3.strike A1 }
alias t3.opmine2 if ( %t3v.A1 == %t3i.mark2 && %t3v.C3 ==  %t3i.mark1  ) || ( %t3v.C1 == %t3i.mark2 && %t3v.A3 ==  %t3i.mark1  ) || ( %t3v.A3 == %t3i.mark2 && %t3v.C1 ==  %t3i.mark1  ) || ( %t3v.C3 == %t3i.mark2 && %t3v.A1 ==  %t3i.mark1  ) { t3.rndcor }
alias t3.opmine4 {
  set %t3.tem2 %t3v.A1 $+ %t3v.C1 $+ %t3v.A3 $+ %t3v.C3
  if ( [ %t3i.mark2 [ $+ [ %t3i.mark2 ] ] ] isin %t3.tem2 || [ %t3i.mark2 [ $+ [ * [ $+ [ %t3i.mark2 ] ] ] ] ] iswm %t3.tem2 || [ * [ $+ [ %t3i.mark2 [ $+ [ * [ $+ [ %t3i.mark2 ] ] ] ] ] ] ] iswm %t3.tem2 || [ %t3i.mark2 [ $+ [ * [ $+ [ %t3i.mark2 [ $+ [ * ] ] ] ] ] ] ] iswm %t3.tem2 ) { 
    if (   isin %t3.tem2 ) {
      :a
      set %t3.temp $rand(A,C) 
      if ( %t3.temp == B ) { goto a } 
      :b
      set %t3.temp $left(%t3.temp,1) $+ $rand(1,3) 
      if ( $right(%t3.temp,1) == 2 ) { goto b } 
      if ( [ %t3v. [ $+ [ %t3.temp ] ] ] !=   ) { goto a } 
      t3.strike %t3.temp
    }
  }
}
alias t3.uninstall {
  unset %t3*
  unset %t
  .timer63 off
  window -c @ Tic Tac Toe
  echo -s  
  echo -s 2 Uninstalling Tic Tac Toe... 
  echo -s 2 Please email zeno@cygnus.uwa.edu.au to tell me what you thought :)
  echo -s  
  .timer 1 1 unload -rs TicTacToe.mrc
}