home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / A_reversi_1781728142004.psc / Reversi.frm < prev    next >
Text File  |  2003-08-22  |  56KB  |  1,988 lines

  1. VERSION 5.00
  2. Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0"; "COMCTL32.OCX"
  3. Begin VB.Form Form1 
  4.    BackColor       =   &H000080FF&
  5.    BorderStyle     =   1  'Fixed Single
  6.    Caption         =   "Reversi"
  7.    ClientHeight    =   5055
  8.    ClientLeft      =   150
  9.    ClientTop       =   720
  10.    ClientWidth     =   7185
  11.    ForeColor       =   &H00B75820&
  12.    Icon            =   "Reversi.frx":0000
  13.    LinkTopic       =   "Form1"
  14.    MaxButton       =   0   'False
  15.    ScaleHeight     =   337
  16.    ScaleMode       =   3  'Pixel
  17.    ScaleWidth      =   479
  18.    StartUpPosition =   2  'CenterScreen
  19.    Begin VB.Timer Timer3 
  20.       Interval        =   1
  21.       Left            =   1680
  22.       Top             =   4680
  23.    End
  24.    Begin VB.Frame Frame2 
  25.       BackColor       =   &H0080C0FF&
  26.       Caption         =   "Setup"
  27.       Height          =   4815
  28.       Left            =   5040
  29.       TabIndex        =   11
  30.       Top             =   120
  31.       Visible         =   0   'False
  32.       Width           =   1935
  33.       Begin VB.CommandButton Command2 
  34.          Caption         =   "Clear"
  35.          Height          =   495
  36.          Left            =   120
  37.          TabIndex        =   16
  38.          Top             =   3600
  39.          Width           =   1695
  40.       End
  41.       Begin VB.CommandButton Command1 
  42.          Caption         =   "End Setup"
  43.          Height          =   495
  44.          Left            =   120
  45.          TabIndex        =   15
  46.          Top             =   4200
  47.          Width           =   1695
  48.       End
  49.       Begin VB.OptionButton Option2 
  50.          BackColor       =   &H0080C0FF&
  51.          Caption         =   "White Player"
  52.          Height          =   255
  53.          Left            =   240
  54.          TabIndex        =   14
  55.          Top             =   1200
  56.          Width           =   1455
  57.       End
  58.       Begin VB.OptionButton Option1 
  59.          BackColor       =   &H0080C0FF&
  60.          Caption         =   "Black Player"
  61.          Height          =   255
  62.          Left            =   240
  63.          TabIndex        =   13
  64.          Top             =   840
  65.          Value           =   -1  'True
  66.          Width           =   1455
  67.       End
  68.       Begin VB.Label Label11 
  69.          BackStyle       =   0  'Transparent
  70.          Caption         =   "Side to play:"
  71.          Height          =   255
  72.          Left            =   240
  73.          TabIndex        =   12
  74.          Top             =   360
  75.          Width           =   1575
  76.       End
  77.    End
  78.    Begin VB.Timer Timer2 
  79.       Interval        =   1
  80.       Left            =   6240
  81.       Top             =   3720
  82.    End
  83.    Begin VB.Frame Frame1 
  84.       BackColor       =   &H0080C0FF&
  85.       Caption         =   "Status"
  86.       Height          =   4815
  87.       Left            =   5040
  88.       TabIndex        =   0
  89.       Top             =   120
  90.       Width           =   1935
  91.       Begin VB.CommandButton Command3 
  92.          Caption         =   "Stop Auto Play"
  93.          Height          =   375
  94.          Left            =   240
  95.          TabIndex        =   17
  96.          Top             =   3600
  97.          Visible         =   0   'False
  98.          Width           =   1455
  99.       End
  100.       Begin VB.Timer Timer1 
  101.          Interval        =   1
  102.          Left            =   840
  103.          Top             =   3600
  104.       End
  105.       Begin VB.Label Label10 
  106.          Alignment       =   2  'Center
  107.          BackColor       =   &H00FFFFFF&
  108.          BorderStyle     =   1  'Fixed Single
  109.          Caption         =   "Good Computer"
  110.          Height          =   255
  111.          Left            =   120
  112.          TabIndex        =   10
  113.          Top             =   1320
  114.          Width           =   1695
  115.       End
  116.       Begin VB.Label Label9 
  117.          Alignment       =   2  'Center
  118.          BackColor       =   &H00FFFFFF&
  119.          BorderStyle     =   1  'Fixed Single
  120.          Caption         =   "Human"
  121.          Height          =   255
  122.          Left            =   120
  123.          TabIndex        =   9
  124.          Top             =   600
  125.          Width           =   1695
  126.       End
  127.       Begin VB.Label Label8 
  128.          Alignment       =   2  'Center
  129.          BackStyle       =   0  'Transparent
  130.          Caption         =   "White Player:"
  131.          Height          =   375
  132.          Left            =   120
  133.          TabIndex        =   8
  134.          Top             =   1080
  135.          Width           =   1695
  136.       End
  137.       Begin VB.Label Label7 
  138.          Alignment       =   2  'Center
  139.          BackStyle       =   0  'Transparent
  140.          Caption         =   "Black Player:"
  141.          Height          =   255
  142.          Left            =   120
  143.          TabIndex        =   7
  144.          Top             =   360
  145.          Width           =   1695
  146.       End
  147.       Begin VB.Label Label6 
  148.          Alignment       =   2  'Center
  149.          BackColor       =   &H00FFFFFF&
  150.          BorderStyle     =   1  'Fixed Single
  151.          Caption         =   "2"
  152.          Height          =   255
  153.          Left            =   1080
  154.          TabIndex        =   6
  155.          Top             =   2280
  156.          Width           =   735
  157.       End
  158.       Begin VB.Label Label5 
  159.          Alignment       =   2  'Center
  160.          BackColor       =   &H00FFFFFF&
  161.          BorderStyle     =   1  'Fixed Single
  162.          Caption         =   "2"
  163.          Height          =   255
  164.          Left            =   1080
  165.          TabIndex        =   5
  166.          Top             =   2880
  167.          Width           =   735
  168.       End
  169.       Begin VB.Label Label4 
  170.          BackStyle       =   0  'Transparent
  171.          Caption         =   "Black discs:"
  172.          Height          =   255
  173.          Left            =   120
  174.          TabIndex        =   4
  175.          Top             =   2280
  176.          Width           =   975
  177.       End
  178.       Begin VB.Label Label3 
  179.          BackStyle       =   0  'Transparent
  180.          Caption         =   "White discs:"
  181.          Height          =   255
  182.          Left            =   120
  183.          TabIndex        =   3
  184.          Top             =   2880
  185.          Width           =   975
  186.       End
  187.       Begin VB.Label Label2 
  188.          BackStyle       =   0  'Transparent
  189.          Caption         =   "Black"
  190.          Height          =   255
  191.          Left            =   1080
  192.          TabIndex        =   2
  193.          Top             =   4320
  194.          Width           =   735
  195.       End
  196.       Begin VB.Label Label1 
  197.          BackStyle       =   0  'Transparent
  198.          Caption         =   "Next turn:"
  199.          Height          =   255
  200.          Left            =   120
  201.          TabIndex        =   1
  202.          Top             =   4320
  203.          Width           =   855
  204.       End
  205.    End
  206.    Begin VB.Line Line2 
  207.       Index           =   8
  208.       X1              =   328
  209.       X2              =   328
  210.       Y1              =   8
  211.       Y2              =   328
  212.    End
  213.    Begin VB.Line Line2 
  214.       Index           =   7
  215.       X1              =   288
  216.       X2              =   288
  217.       Y1              =   8
  218.       Y2              =   328
  219.    End
  220.    Begin VB.Line Line2 
  221.       Index           =   6
  222.       X1              =   248
  223.       X2              =   248
  224.       Y1              =   8
  225.       Y2              =   328
  226.    End
  227.    Begin VB.Line Line2 
  228.       Index           =   5
  229.       X1              =   208
  230.       X2              =   208
  231.       Y1              =   8
  232.       Y2              =   328
  233.    End
  234.    Begin VB.Line Line2 
  235.       Index           =   4
  236.       X1              =   168
  237.       X2              =   168
  238.       Y1              =   8
  239.       Y2              =   328
  240.    End
  241.    Begin VB.Line Line2 
  242.       Index           =   3
  243.       X1              =   128
  244.       X2              =   128
  245.       Y1              =   8
  246.       Y2              =   328
  247.    End
  248.    Begin VB.Line Line2 
  249.       Index           =   2
  250.       X1              =   88
  251.       X2              =   88
  252.       Y1              =   8
  253.       Y2              =   328
  254.    End
  255.    Begin VB.Line Line2 
  256.       Index           =   1
  257.       X1              =   48
  258.       X2              =   48
  259.       Y1              =   8
  260.       Y2              =   328
  261.    End
  262.    Begin VB.Line Line2 
  263.       Index           =   0
  264.       X1              =   8
  265.       X2              =   8
  266.       Y1              =   8
  267.       Y2              =   328
  268.    End
  269.    Begin VB.Line Line1 
  270.       BorderColor     =   &H00000000&
  271.       Index           =   8
  272.       X1              =   8
  273.       X2              =   328
  274.       Y1              =   328
  275.       Y2              =   328
  276.    End
  277.    Begin VB.Line Line1 
  278.       BorderColor     =   &H00000000&
  279.       Index           =   7
  280.       X1              =   8
  281.       X2              =   328
  282.       Y1              =   288
  283.       Y2              =   288
  284.    End
  285.    Begin VB.Line Line1 
  286.       BorderColor     =   &H00000000&
  287.       Index           =   6
  288.       X1              =   8
  289.       X2              =   328
  290.       Y1              =   248
  291.       Y2              =   248
  292.    End
  293.    Begin VB.Line Line1 
  294.       BorderColor     =   &H00000000&
  295.       Index           =   5
  296.       X1              =   8
  297.       X2              =   328
  298.       Y1              =   208
  299.       Y2              =   208
  300.    End
  301.    Begin VB.Line Line1 
  302.       BorderColor     =   &H00000000&
  303.       Index           =   4
  304.       X1              =   8
  305.       X2              =   328
  306.       Y1              =   168
  307.       Y2              =   168
  308.    End
  309.    Begin VB.Line Line1 
  310.       BorderColor     =   &H00000000&
  311.       Index           =   3
  312.       X1              =   8
  313.       X2              =   328
  314.       Y1              =   128
  315.       Y2              =   128
  316.    End
  317.    Begin VB.Line Line1 
  318.       BorderColor     =   &H00000000&
  319.       Index           =   2
  320.       X1              =   8
  321.       X2              =   328
  322.       Y1              =   88
  323.       Y2              =   88
  324.    End
  325.    Begin VB.Line Line1 
  326.       BorderColor     =   &H00000000&
  327.       Index           =   1
  328.       X1              =   8
  329.       X2              =   328
  330.       Y1              =   48
  331.       Y2              =   48
  332.    End
  333.    Begin VB.Line Line1 
  334.       BorderColor     =   &H00000000&
  335.       Index           =   0
  336.       X1              =   8
  337.       X2              =   328
  338.       Y1              =   8
  339.       Y2              =   8
  340.    End
  341.    Begin VB.Image Image1 
  342.       Height          =   600
  343.       Index           =   63
  344.       Left            =   4320
  345.       Stretch         =   -1  'True
  346.       Top             =   4320
  347.       Width           =   600
  348.    End
  349.    Begin VB.Image Image1 
  350.       Height          =   600
  351.       Index           =   62
  352.       Left            =   3720
  353.       Stretch         =   -1  'True
  354.       Top             =   4320
  355.       Width           =   600
  356.    End
  357.    Begin VB.Image Image1 
  358.       Height          =   600
  359.       Index           =   61
  360.       Left            =   3120
  361.       Stretch         =   -1  'True
  362.       Top             =   4320
  363.       Width           =   600
  364.    End
  365.    Begin VB.Image Image1 
  366.       Height          =   600
  367.       Index           =   60
  368.       Left            =   2520
  369.       Stretch         =   -1  'True
  370.       Top             =   4320
  371.       Width           =   600
  372.    End
  373.    Begin VB.Image Image1 
  374.       Height          =   600
  375.       Index           =   59
  376.       Left            =   1920
  377.       Stretch         =   -1  'True
  378.       Top             =   4320
  379.       Width           =   600
  380.    End
  381.    Begin VB.Image Image1 
  382.       Height          =   600
  383.       Index           =   58
  384.       Left            =   1320
  385.       Stretch         =   -1  'True
  386.       Top             =   4320
  387.       Width           =   600
  388.    End
  389.    Begin VB.Image Image1 
  390.       Height          =   600
  391.       Index           =   57
  392.       Left            =   720
  393.       Stretch         =   -1  'True
  394.       Top             =   4320
  395.       Width           =   600
  396.    End
  397.    Begin VB.Image Image1 
  398.       Height          =   600
  399.       Index           =   56
  400.       Left            =   120
  401.       Stretch         =   -1  'True
  402.       Top             =   4320
  403.       Width           =   600
  404.    End
  405.    Begin VB.Image Image1 
  406.       Height          =   600
  407.       Index           =   55
  408.       Left            =   4320
  409.       Stretch         =   -1  'True
  410.       Top             =   3720
  411.       Width           =   600
  412.    End
  413.    Begin VB.Image Image1 
  414.       Height          =   600
  415.       Index           =   54
  416.       Left            =   3720
  417.       Stretch         =   -1  'True
  418.       Top             =   3720
  419.       Width           =   600
  420.    End
  421.    Begin VB.Image Image1 
  422.       Height          =   600
  423.       Index           =   53
  424.       Left            =   3120
  425.       Stretch         =   -1  'True
  426.       Top             =   3720
  427.       Width           =   600
  428.    End
  429.    Begin VB.Image Image1 
  430.       Height          =   600
  431.       Index           =   52
  432.       Left            =   2520
  433.       Stretch         =   -1  'True
  434.       Top             =   3720
  435.       Width           =   600
  436.    End
  437.    Begin VB.Image Image1 
  438.       Height          =   600
  439.       Index           =   51
  440.       Left            =   1920
  441.       Stretch         =   -1  'True
  442.       Top             =   3720
  443.       Width           =   600
  444.    End
  445.    Begin VB.Image Image1 
  446.       Height          =   600
  447.       Index           =   50
  448.       Left            =   1320
  449.       Stretch         =   -1  'True
  450.       Top             =   3720
  451.       Width           =   600
  452.    End
  453.    Begin VB.Image Image1 
  454.       Height          =   600
  455.       Index           =   49
  456.       Left            =   720
  457.       Stretch         =   -1  'True
  458.       Top             =   3720
  459.       Width           =   600
  460.    End
  461.    Begin VB.Image Image1 
  462.       Height          =   600
  463.       Index           =   48
  464.       Left            =   120
  465.       Stretch         =   -1  'True
  466.       Top             =   3720
  467.       Width           =   600
  468.    End
  469.    Begin VB.Image Image1 
  470.       Height          =   600
  471.       Index           =   47
  472.       Left            =   4320
  473.       Stretch         =   -1  'True
  474.       Top             =   3120
  475.       Width           =   600
  476.    End
  477.    Begin VB.Image Image1 
  478.       Height          =   600
  479.       Index           =   46
  480.       Left            =   3720
  481.       Stretch         =   -1  'True
  482.       Top             =   3120
  483.       Width           =   600
  484.    End
  485.    Begin VB.Image Image1 
  486.       Height          =   600
  487.       Index           =   45
  488.       Left            =   3120
  489.       Stretch         =   -1  'True
  490.       Top             =   3120
  491.       Width           =   600
  492.    End
  493.    Begin VB.Image Image1 
  494.       Height          =   600
  495.       Index           =   44
  496.       Left            =   2520
  497.       Stretch         =   -1  'True
  498.       Top             =   3120
  499.       Width           =   600
  500.    End
  501.    Begin VB.Image Image1 
  502.       Height          =   600
  503.       Index           =   43
  504.       Left            =   1920
  505.       Stretch         =   -1  'True
  506.       Top             =   3120
  507.       Width           =   600
  508.    End
  509.    Begin VB.Image Image1 
  510.       Height          =   600
  511.       Index           =   42
  512.       Left            =   1320
  513.       Stretch         =   -1  'True
  514.       Top             =   3120
  515.       Width           =   600
  516.    End
  517.    Begin VB.Image Image1 
  518.       Height          =   600
  519.       Index           =   41
  520.       Left            =   720
  521.       Stretch         =   -1  'True
  522.       Top             =   3120
  523.       Width           =   600
  524.    End
  525.    Begin VB.Image Image1 
  526.       Height          =   600
  527.       Index           =   40
  528.       Left            =   120
  529.       Stretch         =   -1  'True
  530.       Top             =   3120
  531.       Width           =   600
  532.    End
  533.    Begin VB.Image Image1 
  534.       Height          =   600
  535.       Index           =   39
  536.       Left            =   4320
  537.       Stretch         =   -1  'True
  538.       Top             =   2520
  539.       Width           =   600
  540.    End
  541.    Begin VB.Image Image1 
  542.       Height          =   600
  543.       Index           =   38
  544.       Left            =   3720
  545.       Stretch         =   -1  'True
  546.       Top             =   2520
  547.       Width           =   600
  548.    End
  549.    Begin VB.Image Image1 
  550.       Height          =   600
  551.       Index           =   37
  552.       Left            =   3120
  553.       Stretch         =   -1  'True
  554.       Top             =   2520
  555.       Width           =   600
  556.    End
  557.    Begin VB.Image Image1 
  558.       Height          =   600
  559.       Index           =   36
  560.       Left            =   2520
  561.       Stretch         =   -1  'True
  562.       Top             =   2520
  563.       Width           =   600
  564.    End
  565.    Begin VB.Image Image1 
  566.       Height          =   600
  567.       Index           =   35
  568.       Left            =   1920
  569.       Stretch         =   -1  'True
  570.       Top             =   2520
  571.       Width           =   600
  572.    End
  573.    Begin VB.Image Image1 
  574.       Height          =   600
  575.       Index           =   34
  576.       Left            =   1320
  577.       Stretch         =   -1  'True
  578.       Top             =   2520
  579.       Width           =   600
  580.    End
  581.    Begin VB.Image Image1 
  582.       Height          =   600
  583.       Index           =   33
  584.       Left            =   720
  585.       Stretch         =   -1  'True
  586.       Top             =   2520
  587.       Width           =   600
  588.    End
  589.    Begin VB.Image Image1 
  590.       Height          =   600
  591.       Index           =   32
  592.       Left            =   120
  593.       Stretch         =   -1  'True
  594.       Top             =   2520
  595.       Width           =   600
  596.    End
  597.    Begin VB.Image Image1 
  598.       Height          =   600
  599.       Index           =   31
  600.       Left            =   4320
  601.       Stretch         =   -1  'True
  602.       Top             =   1920
  603.       Width           =   600
  604.    End
  605.    Begin VB.Image Image1 
  606.       Height          =   600
  607.       Index           =   30
  608.       Left            =   3720
  609.       Stretch         =   -1  'True
  610.       Top             =   1920
  611.       Width           =   600
  612.    End
  613.    Begin VB.Image Image1 
  614.       Height          =   600
  615.       Index           =   29
  616.       Left            =   3120
  617.       Stretch         =   -1  'True
  618.       Top             =   1920
  619.       Width           =   600
  620.    End
  621.    Begin VB.Image Image1 
  622.       Height          =   600
  623.       Index           =   28
  624.       Left            =   2520
  625.       Stretch         =   -1  'True
  626.       Top             =   1920
  627.       Width           =   600
  628.    End
  629.    Begin VB.Image Image1 
  630.       Height          =   600
  631.       Index           =   27
  632.       Left            =   1920
  633.       Stretch         =   -1  'True
  634.       Top             =   1920
  635.       Width           =   600
  636.    End
  637.    Begin VB.Image Image1 
  638.       Height          =   600
  639.       Index           =   26
  640.       Left            =   1320
  641.       Stretch         =   -1  'True
  642.       Top             =   1920
  643.       Width           =   600
  644.    End
  645.    Begin VB.Image Image1 
  646.       Height          =   600
  647.       Index           =   25
  648.       Left            =   720
  649.       Stretch         =   -1  'True
  650.       Top             =   1920
  651.       Width           =   600
  652.    End
  653.    Begin VB.Image Image1 
  654.       Height          =   600
  655.       Index           =   24
  656.       Left            =   120
  657.       Stretch         =   -1  'True
  658.       Top             =   1920
  659.       Width           =   600
  660.    End
  661.    Begin VB.Image Image1 
  662.       Height          =   600
  663.       Index           =   23
  664.       Left            =   4320
  665.       Stretch         =   -1  'True
  666.       Top             =   1320
  667.       Width           =   600
  668.    End
  669.    Begin VB.Image Image1 
  670.       Height          =   600
  671.       Index           =   22
  672.       Left            =   3720
  673.       Stretch         =   -1  'True
  674.       Top             =   1320
  675.       Width           =   600
  676.    End
  677.    Begin VB.Image Image1 
  678.       Height          =   600
  679.       Index           =   21
  680.       Left            =   3120
  681.       Stretch         =   -1  'True
  682.       Top             =   1320
  683.       Width           =   600
  684.    End
  685.    Begin VB.Image Image1 
  686.       Height          =   600
  687.       Index           =   20
  688.       Left            =   2520
  689.       Stretch         =   -1  'True
  690.       Top             =   1320
  691.       Width           =   600
  692.    End
  693.    Begin VB.Image Image1 
  694.       Height          =   600
  695.       Index           =   19
  696.       Left            =   1920
  697.       Stretch         =   -1  'True
  698.       Top             =   1320
  699.       Width           =   600
  700.    End
  701.    Begin VB.Image Image1 
  702.       Height          =   600
  703.       Index           =   18
  704.       Left            =   1320
  705.       Stretch         =   -1  'True
  706.       Top             =   1320
  707.       Width           =   600
  708.    End
  709.    Begin VB.Image Image1 
  710.       Height          =   600
  711.       Index           =   17
  712.       Left            =   720
  713.       Stretch         =   -1  'True
  714.       Top             =   1320
  715.       Width           =   600
  716.    End
  717.    Begin VB.Image Image1 
  718.       Height          =   600
  719.       Index           =   16
  720.       Left            =   120
  721.       Stretch         =   -1  'True
  722.       Top             =   1320
  723.       Width           =   600
  724.    End
  725.    Begin VB.Image Image1 
  726.       Height          =   600
  727.       Index           =   15
  728.       Left            =   4320
  729.       Stretch         =   -1  'True
  730.       Top             =   720
  731.       Width           =   600
  732.    End
  733.    Begin VB.Image Image1 
  734.       Height          =   600
  735.       Index           =   14
  736.       Left            =   3720
  737.       Stretch         =   -1  'True
  738.       Top             =   720
  739.       Width           =   600
  740.    End
  741.    Begin VB.Image Image1 
  742.       Height          =   600
  743.       Index           =   13
  744.       Left            =   3120
  745.       Stretch         =   -1  'True
  746.       Top             =   720
  747.       Width           =   600
  748.    End
  749.    Begin VB.Image Image1 
  750.       Height          =   600
  751.       Index           =   12
  752.       Left            =   2520
  753.       Stretch         =   -1  'True
  754.       Top             =   720
  755.       Width           =   600
  756.    End
  757.    Begin VB.Image Image1 
  758.       Height          =   600
  759.       Index           =   11
  760.       Left            =   1920
  761.       Stretch         =   -1  'True
  762.       Top             =   720
  763.       Width           =   600
  764.    End
  765.    Begin VB.Image Image1 
  766.       Height          =   600
  767.       Index           =   10
  768.       Left            =   1320
  769.       Stretch         =   -1  'True
  770.       Top             =   720
  771.       Width           =   600
  772.    End
  773.    Begin VB.Image Image1 
  774.       Height          =   600
  775.       Index           =   9
  776.       Left            =   720
  777.       Stretch         =   -1  'True
  778.       Top             =   720
  779.       Width           =   600
  780.    End
  781.    Begin VB.Image Image1 
  782.       Height          =   600
  783.       Index           =   8
  784.       Left            =   120
  785.       Stretch         =   -1  'True
  786.       Top             =   720
  787.       Width           =   600
  788.    End
  789.    Begin VB.Image Image1 
  790.       Height          =   600
  791.       Index           =   7
  792.       Left            =   4320
  793.       Stretch         =   -1  'True
  794.       Top             =   120
  795.       Width           =   600
  796.    End
  797.    Begin VB.Image Image1 
  798.       Height          =   600
  799.       Index           =   6
  800.       Left            =   3720
  801.       Stretch         =   -1  'True
  802.       Top             =   120
  803.       Width           =   600
  804.    End
  805.    Begin VB.Image Image1 
  806.       Height          =   600
  807.       Index           =   5
  808.       Left            =   3120
  809.       Stretch         =   -1  'True
  810.       Top             =   120
  811.       Width           =   600
  812.    End
  813.    Begin VB.Image Image1 
  814.       Height          =   600
  815.       Index           =   4
  816.       Left            =   2520
  817.       Stretch         =   -1  'True
  818.       Top             =   120
  819.       Width           =   600
  820.    End
  821.    Begin VB.Image Image1 
  822.       Height          =   600
  823.       Index           =   3
  824.       Left            =   1920
  825.       Stretch         =   -1  'True
  826.       Top             =   120
  827.       Width           =   600
  828.    End
  829.    Begin VB.Image Image1 
  830.       Height          =   600
  831.       Index           =   2
  832.       Left            =   1320
  833.       Stretch         =   -1  'True
  834.       Top             =   120
  835.       Width           =   600
  836.    End
  837.    Begin VB.Image Image1 
  838.       Height          =   600
  839.       Index           =   1
  840.       Left            =   720
  841.       Stretch         =   -1  'True
  842.       Top             =   120
  843.       Width           =   600
  844.    End
  845.    Begin VB.Image Image1 
  846.       Height          =   600
  847.       Index           =   0
  848.       Left            =   120
  849.       Stretch         =   -1  'True
  850.       Top             =   120
  851.       Width           =   600
  852.    End
  853.    Begin ComctlLib.ImageList imgMain 
  854.       Left            =   4320
  855.       Top             =   120
  856.       _ExtentX        =   1005
  857.       _ExtentY        =   1005
  858.       BackColor       =   -2147483643
  859.       ImageWidth      =   40
  860.       ImageHeight     =   40
  861.       MaskColor       =   12632256
  862.       _Version        =   327682
  863.       BeginProperty Images {0713E8C2-850A-101B-AFC0-4210102A8DA7} 
  864.          NumListImages   =   4
  865.          BeginProperty ListImage1 {0713E8C3-850A-101B-AFC0-4210102A8DA7} 
  866.             Picture         =   "Reversi.frx":3B6A
  867.             Key             =   ""
  868.          EndProperty
  869.          BeginProperty ListImage2 {0713E8C3-850A-101B-AFC0-4210102A8DA7} 
  870.             Picture         =   "Reversi.frx":4E7C
  871.             Key             =   ""
  872.          EndProperty
  873.          BeginProperty ListImage3 {0713E8C3-850A-101B-AFC0-4210102A8DA7} 
  874.             Picture         =   "Reversi.frx":618E
  875.             Key             =   ""
  876.          EndProperty
  877.          BeginProperty ListImage4 {0713E8C3-850A-101B-AFC0-4210102A8DA7} 
  878.             Picture         =   "Reversi.frx":74A0
  879.             Key             =   ""
  880.          EndProperty
  881.       EndProperty
  882.    End
  883.    Begin VB.Menu mnugame 
  884.       Caption         =   "Game"
  885.       Begin VB.Menu mnunew 
  886.          Caption         =   "New"
  887.          Shortcut        =   {F2}
  888.       End
  889.       Begin VB.Menu mnuseggest 
  890.          Caption         =   "Suggest Move"
  891.          Shortcut        =   ^M
  892.       End
  893.       Begin VB.Menu mnusetup 
  894.          Caption         =   "Setup Mode"
  895.       End
  896.       Begin VB.Menu mnuexit 
  897.          Caption         =   "Exit"
  898.       End
  899.    End
  900.    Begin VB.Menu mnuoptions 
  901.       Caption         =   "Options"
  902.       Begin VB.Menu mnublack 
  903.          Caption         =   "Black Player"
  904.          Begin VB.Menu blackoptions 
  905.             Caption         =   "Human"
  906.             Checked         =   -1  'True
  907.             Index           =   0
  908.          End
  909.          Begin VB.Menu blackoptions 
  910.             Caption         =   "Beginner Computer"
  911.             Index           =   1
  912.          End
  913.          Begin VB.Menu blackoptions 
  914.             Caption         =   "Novice Computer"
  915.             Index           =   2
  916.          End
  917.          Begin VB.Menu blackoptions 
  918.             Caption         =   "Good Computer"
  919.             Index           =   3
  920.          End
  921.          Begin VB.Menu blackoptions 
  922.             Caption         =   "Expert Computer"
  923.             Index           =   4
  924.          End
  925.       End
  926.       Begin VB.Menu mnuwhite 
  927.          Caption         =   "White Player"
  928.          Index           =   0
  929.          Begin VB.Menu whiteoptions 
  930.             Caption         =   "Human"
  931.             Index           =   0
  932.          End
  933.          Begin VB.Menu whiteoptions 
  934.             Caption         =   "Beginner Computer"
  935.             Index           =   1
  936.          End
  937.          Begin VB.Menu whiteoptions 
  938.             Caption         =   "Novice Computer"
  939.             Index           =   2
  940.          End
  941.          Begin VB.Menu whiteoptions 
  942.             Caption         =   "Good Computer"
  943.             Checked         =   -1  'True
  944.             Index           =   3
  945.          End
  946.          Begin VB.Menu whiteoptions 
  947.             Caption         =   "Expert Computer"
  948.             Index           =   4
  949.          End
  950.       End
  951.       Begin VB.Menu seperate1 
  952.          Caption         =   "-"
  953.       End
  954.       Begin VB.Menu mnushowpossible 
  955.          Caption         =   "Show possible moves"
  956.          Checked         =   -1  'True
  957.       End
  958.    End
  959. End
  960. Attribute VB_Name = "Form1"
  961. Attribute VB_GlobalNameSpace = False
  962. Attribute VB_Creatable = False
  963. Attribute VB_PredeclaredId = True
  964. Attribute VB_Exposed = False
  965. Option Explicit 'ensure all variables are declared
  966.  
  967. 'stop for a while
  968. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  969.  
  970. Dim Grid(1 To 8, 1 To 8) As Integer 'keeps the board information(0 = nothing , 1 = black , 2 = white)
  971. Dim turn As String 'which player is going to play now
  972. Dim WhiteCount As Integer, BlackCount As Integer 'number of discs for each player
  973. Dim LegalMoves(40, 2) As Integer, LegalMovesNum
  974. Dim NewDiscs(1 To 30, 1 To 2) As Integer, FlippedNum As Integer
  975. Dim SelMove(1 To 2) As Integer 'the move that the computer thinks its the best (i for x coordinate,2 for y coordinate)
  976.  
  977. Dim Nodes As Long 'number of nodes
  978. Dim SearchEnd As Boolean 'true if we are at the end of game and will calculate the exact final score
  979. Dim startdepth As Integer 'the depth we are gring to search to
  980. Dim MidDepth As Integer, EndDepth As Integer 'the depth for the mid game and for the end game(depends of the computer level)
  981. Dim Player1Type As Integer, Player2Type As Integer 'whether the player is a human or a computerat a certain level
  982. Dim freezed As Boolean
  983.  
  984. Private Sub DrawBoard()
  985. 'draws the board
  986. Dim imgnum As Integer, theplayer As Integer, i As Integer, j As Integer
  987. Select Case turn
  988. Case "black"
  989. theplayer = 1
  990. Case "white"
  991. theplayer = 2
  992. End Select
  993. For i = 1 To 8 'loop over in x direction
  994.     For j = 1 To 8 'loop over cells in y direction
  995.     Select Case Grid(i, j)
  996.     Case 0
  997.     imgnum = 3 'image number 3 in the imagelist
  998.     Case 1
  999.     imgnum = 2 'image number 2 in the imagelist
  1000.     Case 2
  1001.     imgnum = 1 'image number 1 in the imagelist
  1002.     End Select
  1003.     'show possible moves
  1004.     If IsValid(theplayer, i, j) = True And mnushowpossible.Checked = True And mnusetup.Checked = False Then imgnum = 4
  1005.     'draw the image
  1006.     Image1((j - 1) * 8 + i - 1).Picture = imgMain.ListImages.Item(imgnum).Picture
  1007.     Next
  1008. Next
  1009. End Sub
  1010. Private Sub MakeMove(player As Integer, x As Integer, y As Integer)
  1011. Dim i As Integer, j As Integer, xx As Integer, Flipped As Integer
  1012. 'changes the grid information after making a move and updates the number of discs for each player
  1013.  
  1014.  
  1015. Grid(x, y) = player
  1016.  
  1017. 'check for flippedd discs above the new placed disc
  1018. Flipped = 0
  1019. For i = y - 1 To 1 Step -1
  1020.     If Grid(x, i) = 0 Then Exit For
  1021.     If Grid(x, i) = player Then
  1022.         For j = y - 1 To i + 1 Step -1
  1023.             Grid(x, j) = player
  1024.             Flipped = Flipped + 1
  1025.         Next
  1026.         Exit For
  1027.     End If
  1028. Next
  1029.  
  1030. 'check for flippedd discs below the new placed disc
  1031. For i = y + 1 To 8 Step 1
  1032.     If Grid(x, i) = 0 Then Exit For
  1033.     If Grid(x, i) = player Then
  1034.         For j = y + 1 To i - 1 Step 1
  1035.             Grid(x, j) = player
  1036.             Flipped = Flipped + 1
  1037.         Next
  1038.         Exit For
  1039.     End If
  1040. Next
  1041.  
  1042. 'check for flippedd discs at the right of the new placed disc
  1043. For i = x + 1 To 8 Step 1
  1044.     If Grid(i, y) = 0 Then Exit For
  1045.     If Grid(i, y) = player Then
  1046.         For j = x + 1 To i - 1 Step 1
  1047.             Grid(j, y) = player
  1048.             Flipped = Flipped + 1
  1049.         Next
  1050.         Exit For
  1051.     End If
  1052. Next
  1053.  
  1054.  
  1055. 'check for flippedd discs at the left of the new placed disc\
  1056. For i = x - 1 To 1 Step -1
  1057.     If Grid(i, y) = 0 Then Exit For
  1058.     If Grid(i, y) = player Then
  1059.         For j = x - 1 To i + 1 Step -1
  1060.             Grid(j, y) = player
  1061.             Flipped = Flipped + 1
  1062.         Next
  1063.         Exit For
  1064.     End If
  1065. Next
  1066.  
  1067. 'check up left
  1068. For i = y - 1 To 1 Step -1
  1069.     xx = x - (y - i)
  1070.     If xx < 1 Then Exit For
  1071.     If Grid(xx, i) = 0 Then Exit For
  1072.     If Grid(xx, i) = player Then
  1073.         For j = y - 1 To i + 1 Step -1
  1074.             xx = x - (y - j)
  1075.             Grid(xx, j) = player
  1076.             Flipped = Flipped + 1
  1077.         Next
  1078.         Exit For
  1079.     End If
  1080. Next
  1081.  
  1082. 'check up right
  1083. For i = y - 1 To 1 Step -1
  1084.     xx = x + (y - i)
  1085.     If xx > 8 Then Exit For
  1086.     If Grid(xx, i) = 0 Then Exit For
  1087.     If Grid(xx, i) = player Then
  1088.         For j = y - 1 To i + 1 Step -1
  1089.             xx = x + (y - j)
  1090.             Grid(xx, j) = player
  1091.             Flipped = Flipped + 1
  1092.         Next
  1093.         Exit For
  1094.     End If
  1095. Next
  1096.  
  1097. 'check down left
  1098. For i = y + 1 To 8 Step 1
  1099.     xx = x - (i - y)
  1100.     If xx < 1 Then Exit For
  1101.     If Grid(xx, i) = 0 Then Exit For
  1102.     If Grid(xx, i) = player Then
  1103.         For j = y + 1 To i - 1 Step 1
  1104.             xx = x - (j - y)
  1105.             Grid(xx, j) = player
  1106.             Flipped = Flipped + 1
  1107.         Next
  1108.         Exit For
  1109.     End If
  1110. Next
  1111.  
  1112. 'check down right
  1113. For i = y + 1 To 8 Step 1
  1114.     xx = x + (i - y)
  1115.     If xx > 8 Then Exit For
  1116.     If Grid(xx, i) = 0 Then Exit For
  1117.     If Grid(xx, i) = player Then
  1118.         For j = y + 1 To i - 1 Step 1
  1119.             xx = x + (j - y)
  1120.             Grid(xx, j) = player
  1121.             Flipped = Flipped + 1
  1122.         Next
  1123.         Exit For
  1124.     End If
  1125. Next
  1126.  
  1127. 'update the number of discs for each player
  1128. Select Case player
  1129. Case 2
  1130. WhiteCount = WhiteCount + Flipped + 1
  1131. BlackCount = BlackCount - Flipped
  1132. Case 1
  1133. WhiteCount = WhiteCount - Flipped
  1134. BlackCount = BlackCount + Flipped + 1
  1135. End Select
  1136. End Sub
  1137.  
  1138. Private Sub GetFlipped(player As Integer, x As Integer, y As Integer)
  1139. Dim i As Integer, j As Integer, xx As Integer
  1140. 'this sub if used in move ordering, if fills the (NewDiscs) array
  1141. 'with the discs that will be flipped after
  1142. 'making a move and if works almost the same as the (MakeMove) sub
  1143.  
  1144. FlippedNum = 1
  1145.  
  1146. NewDiscs(1, 1) = x
  1147. NewDiscs(1, 2) = y
  1148.  
  1149. For i = y - 1 To 1 Step -1
  1150.     If Grid(x, i) = 0 Then Exit For
  1151.     If Grid(x, i) = player Then
  1152.         For j = y - 1 To i + 1 Step -1
  1153.         FlippedNum = FlippedNum + 1
  1154.         NewDiscs(FlippedNum, 1) = x
  1155.         NewDiscs(FlippedNum, 2) = j
  1156.         Next
  1157.         Exit For
  1158.     End If
  1159. Next
  1160.  
  1161. For i = y + 1 To 8 Step 1
  1162.     If Grid(x, i) = 0 Then Exit For
  1163.     If Grid(x, i) = player Then
  1164.         For j = y + 1 To i - 1 Step 1
  1165.         FlippedNum = FlippedNum + 1
  1166.         NewDiscs(FlippedNum, 1) = x
  1167.         NewDiscs(FlippedNum, 2) = j
  1168.         Next
  1169.         Exit For
  1170.     End If
  1171. Next
  1172.  
  1173. For i = x + 1 To 8 Step 1
  1174.     If Grid(i, y) = 0 Then Exit For
  1175.     If Grid(i, y) = player Then
  1176.         For j = x + 1 To i - 1 Step 1
  1177.         FlippedNum = FlippedNum + 1
  1178.         NewDiscs(FlippedNum, 1) = j
  1179.         NewDiscs(FlippedNum, 2) = y
  1180.         Next
  1181.         Exit For
  1182.     End If
  1183. Next
  1184.  
  1185. For i = x - 1 To 1 Step -1
  1186.     If Grid(i, y) = 0 Then Exit For
  1187.     If Grid(i, y) = player Then
  1188.         For j = x - 1 To i + 1 Step -1
  1189.         FlippedNum = FlippedNum + 1
  1190.         NewDiscs(FlippedNum, 1) = j
  1191.         NewDiscs(FlippedNum, 2) = y
  1192.         Next
  1193.         Exit For
  1194.     End If
  1195. Next
  1196.  
  1197. For i = y - 1 To 1 Step -1
  1198.     xx = x - (y - i)
  1199.     If xx < 1 Then Exit For
  1200.     If Grid(xx, i) = 0 Then Exit For
  1201.     If Grid(xx, i) = player Then
  1202.         For j = y - 1 To i + 1 Step -1
  1203.             xx = x - (y - j)
  1204.             FlippedNum = FlippedNum + 1
  1205.             NewDiscs(FlippedNum, 1) = xx
  1206.             NewDiscs(FlippedNum, 2) = j
  1207.         Next
  1208.         Exit For
  1209.     End If
  1210. Next
  1211.  
  1212. For i = y - 1 To 1 Step -1
  1213.     xx = x + (y - i)
  1214.     If xx > 8 Then Exit For
  1215.     If Grid(xx, i) = 0 Then Exit For
  1216.     If Grid(xx, i) = player Then
  1217.         For j = y - 1 To i + 1 Step -1
  1218.             xx = x + (y - j)
  1219.             FlippedNum = FlippedNum + 1
  1220.             NewDiscs(FlippedNum, 1) = xx
  1221.             NewDiscs(FlippedNum, 2) = j
  1222.         Next
  1223.         Exit For
  1224.     End If
  1225. Next
  1226.  
  1227. For i = y + 1 To 8 Step 1
  1228.     xx = x - (i - y)
  1229.     If xx < 1 Then Exit For
  1230.     If Grid(xx, i) = 0 Then Exit For
  1231.     If Grid(xx, i) = player Then
  1232.         For j = y + 1 To i - 1 Step 1
  1233.             xx = x - (j - y)
  1234.             FlippedNum = FlippedNum + 1
  1235.             NewDiscs(FlippedNum, 1) = xx
  1236.             NewDiscs(FlippedNum, 2) = j
  1237.         Next
  1238.         Exit For
  1239.     End If
  1240. Next
  1241.  
  1242. For i = y + 1 To 8 Step 1
  1243.     xx = x + (i - y)
  1244.     If xx > 8 Then Exit For
  1245.     If Grid(xx, i) = 0 Then Exit For
  1246.     If Grid(xx, i) = player Then
  1247.         For j = y + 1 To i - 1 Step 1
  1248.             xx = x + (j - y)
  1249.             FlippedNum = FlippedNum + 1
  1250.             NewDiscs(FlippedNum, 1) = xx
  1251.             NewDiscs(FlippedNum, 2) = j
  1252.         Next
  1253.         Exit For
  1254.     End If
  1255. Next
  1256.  
  1257.  
  1258. End Sub
  1259.  
  1260. Private Function IsValid(player As Integer, x As Integer, y As Integer) As Boolean
  1261. Dim i As Integer, xx As Integer
  1262. 'this function checkes whether a move if valid in the current position and for a certain player
  1263. 'it is similar to the(MakeMove)sub but if doedn't care about how many discs are flipped, it breaks
  1264. 'and returnes true at the first time if finds a disc that wil be flipped
  1265.  
  1266. IsValid = False
  1267. If Grid(x, y) <> 0 Then Exit Function
  1268. For i = y - 1 To 1 Step -1
  1269.     If Grid(x, i) = 0 Then Exit For
  1270.     If Grid(x, i) = player And (y - i) >= 2 Then IsValid = True: Exit Function
  1271.     If Grid(x, i) = player Then Exit For
  1272. Next
  1273.  
  1274. For i = y + 1 To 8 Step 1
  1275.     If Grid(x, i) = 0 Then Exit For
  1276.     If Grid(x, i) = player And (i - y) >= 2 Then IsValid = True: Exit Function
  1277.     If Grid(x, i) = player Then Exit For
  1278. Next
  1279.  
  1280. For i = x + 1 To 8 Step 1
  1281.     If Grid(i, y) = 0 Then Exit For
  1282.     If Grid(i, y) = player And (i - x) >= 2 Then IsValid = True: Exit Function
  1283.     If Grid(i, y) = player Then Exit For
  1284. Next
  1285.  
  1286. For i = x - 1 To 1 Step -1
  1287.     If Grid(i, y) = 0 Then Exit For
  1288.     If Grid(i, y) = player And (x - i) >= 2 Then IsValid = True: Exit Function
  1289.     If Grid(i, y) = player Then Exit For
  1290. Next
  1291.  
  1292. For i = y - 1 To 1 Step -1
  1293.     xx = x - (y - i)
  1294.     If xx < 1 Then Exit For
  1295.     If Grid(xx, i) = 0 Then Exit For
  1296.     If Grid(xx, i) = player And (y - i) >= 2 Then IsValid = True: Exit Function
  1297.     If Grid(xx, i) = player Then Exit For
  1298. Next
  1299.  
  1300. For i = y - 1 To 1 Step -1
  1301.     xx = x + (y - i)
  1302.     If xx > 8 Then Exit For
  1303.     If Grid(xx, i) = 0 Then Exit For
  1304.     If Grid(xx, i) = player And (y - i) >= 2 Then IsValid = True: Exit Function
  1305.     If Grid(xx, i) = player Then Exit For
  1306. Next
  1307.  
  1308. For i = y + 1 To 8 Step 1
  1309.     xx = x - (i - y)
  1310.     If xx < 1 Then Exit For
  1311.     If Grid(xx, i) = 0 Then Exit For
  1312.     If Grid(xx, i) = player And (i - y) >= 2 Then IsValid = True: Exit Function
  1313.     If Grid(xx, i) = player Then Exit For
  1314. Next
  1315.  
  1316. For i = y + 1 To 8 Step 1
  1317.     xx = x + (i - y)
  1318.     If xx > 8 Then Exit For
  1319.     If Grid(xx, i) = 0 Then Exit For
  1320.     If Grid(xx, i) = player And (i - y) >= 2 Then IsValid = True: Exit Function
  1321.     If Grid(xx, i) = player Then Exit For
  1322. Next
  1323.  
  1324. End Function
  1325.  
  1326. Private Function CountBad(x As Integer, y As Integer)
  1327. Dim Bad As Integer
  1328. 'counts how many empty cells are around a cell,it is used for move ordering
  1329. 'so the more empty discs around a cell, the worse it is
  1330. Bad = 0
  1331. If x > 1 Then
  1332. If Grid(x - 1, y) = 0 Then Bad = Bad + 1
  1333. End If
  1334.  
  1335. If x < 8 Then
  1336. If Grid(x + 1, y) = 0 Then Bad = Bad + 1
  1337. End If
  1338.  
  1339. If y > 1 Then
  1340. If Grid(x, y - 1) = 0 Then Bad = Bad + 1
  1341. End If
  1342.  
  1343. If y < 8 Then
  1344. If Grid(x, y + 1) = 0 Then Bad = Bad + 1
  1345. End If
  1346.  
  1347. If x > 1 And y > 1 Then
  1348. If Grid(x - 1, y - 1) = 0 Then Bad = Bad + 1
  1349. End If
  1350.  
  1351. If x < 8 And y < 8 Then
  1352. If Grid(x + 1, y + 1) = 0 Then Bad = Bad + 1
  1353. End If
  1354.  
  1355. If x > 1 And y < 8 Then
  1356. If Grid(x - 1, y + 1) = 0 Then Bad = Bad + 1
  1357. End If
  1358.  
  1359. If x < 8 And y > 1 Then
  1360. If Grid(x + 1, y - 1) = 0 Then Bad = Bad + 1
  1361. End If
  1362.  
  1363. CountBad = Bad
  1364.  
  1365. End Function
  1366.  
  1367. Private Sub GetLegalMoves(player As Integer)
  1368. 'fills the (LegalMoves) array with the legal moves for a certain
  1369. 'player in the current position(used for move generation)
  1370. Dim i As Integer, j As Integer
  1371. LegalMovesNum = 0
  1372. For i = 1 To 8
  1373.     For j = 1 To 8
  1374.     If IsValid(player, i, j) = True Then
  1375.     LegalMovesNum = LegalMovesNum + 1
  1376.     LegalMoves(LegalMovesNum, 1) = i
  1377.     LegalMoves(LegalMovesNum, 2) = j
  1378.     End If
  1379.     Next
  1380. Next
  1381. End Sub
  1382.  
  1383. Private Sub NewGame()
  1384. 'starts a new game, resets everything to default
  1385. Dim i As Integer, j As Integer
  1386. For i = 1 To 8
  1387.     For j = 1 To 8
  1388.     Grid(i, j) = 0
  1389.     Next
  1390. Next
  1391. Grid(4, 4) = 2
  1392. Grid(5, 5) = 2
  1393. Grid(5, 4) = 1
  1394. Grid(4, 5) = 1
  1395. WhiteCount = 2
  1396. BlackCount = 2
  1397. Label5.Caption = "2"
  1398. Label6.Caption = "2"
  1399.  
  1400. turn = "black"
  1401. Label2.Caption = "black"
  1402. DrawBoard
  1403.  
  1404. Timer1.Enabled = True
  1405. Timer2.Enabled = True
  1406. freezed = False
  1407. End Sub
  1408. Private Function EvaluateEnd(player As Integer)
  1409. 'the evaluation function used in the end of the game, it returnes
  1410. 'the difference between our discs and the opponents discs
  1411. Dim Value As Integer
  1412. Value = WhiteCount - BlackCount
  1413. If player = 2 Then EvaluateEnd = Value Else: EvaluateEnd = -Value
  1414. End Function
  1415.  
  1416. Private Function Evaluate(player As Integer)
  1417. 'the evaluation function used in the begining and the middle of the game, it is
  1418. 'based on mobility(number of legal moves) for each player and also on the board
  1419. 'positions that each player occupy
  1420. Dim Value As Integer, cellval As Integer, cellnum As Integer
  1421. Dim i As Integer, j As Integer
  1422. 'at first the function evaluates for the white player and then changes the sign if we are evaluating for black
  1423. Value = 0
  1424. For i = 1 To 8
  1425.     For j = 1 To 8
  1426.     If IsValid(2, i, j) = True Then Value = Value + 18 'add 18 for each legal move for white
  1427.     If IsValid(1, i, j) = True Then Value = Value - 18 'subtract 18 for each legal move for black
  1428.     If Grid(i, j) <> 0 Then
  1429.         cellnum = (j - 1) * 8 + i
  1430.         Select Case cellnum
  1431.         Case 1, 8, 57, 64 'a corner
  1432.         cellval = 250
  1433.         Case 2, 7, 9, 16, 49, 56, 58, 63 'C square(a square that is adjacent to a corner horizontally or vertically
  1434.         cellval = -30
  1435.         Case 10, 15, 50, 55 'X square(a square that is adjacent to a corner diagonally
  1436.         cellval = -40
  1437.         Case 3, 4, 5, 6, 17, 25, 33, 41, 24, 32, 40, 48, 59, 60, 61, 62 ' sides other than C squares
  1438.         cellval = 15
  1439.         Case Else 'any other place(in the middle of the board)
  1440.         cellval = 0
  1441.         End Select
  1442.         'adds or subtracts the score depending on which player occupies that cell
  1443.         If Grid(i, j) = 2 Then Value = Value + cellval Else: Value = Value - cellval
  1444.     End If
  1445.     Next
  1446. Next
  1447. 'negate the value if we are evaluating for black and return the normal value if we are evaluating for white
  1448. If player = 2 Then Evaluate = Value Else: Evaluate = -Value
  1449.         
  1450. End Function
  1451.  
  1452.  
  1453. Private Function Search(depth As Integer, alpha As Integer, beta As Integer)
  1454. 'the searching function(finds the best move for the computer)
  1455. Dim NewScore As Integer
  1456. Dim LegalMovesNow(40, 2) As Integer 'keeps the legal moves in this procedure
  1457. Dim player As Integer 'which player is going to play at the current depth
  1458. Dim TempGrid(1 To 8, 1 To 8) As Integer 'stores the grid information before making a move in order to be able to unmake it
  1459. Dim a As Integer, b As Integer
  1460. Dim tempwhite As Integer, tempblack As Integer 'stores the number of discs for each player before making a move in order to be able to unmake it
  1461. Dim i As Integer
  1462.  
  1463. 'determine which player is to go at the current depth
  1464. Select Case turn
  1465. Case "white"
  1466. If (startdepth - depth) Mod 2 = 0 Then
  1467. player = 2
  1468. Else
  1469. player = 1
  1470. End If
  1471. Case "black"
  1472. If (startdepth - depth) Mod 2 = 0 Then
  1473. player = 1
  1474. Else
  1475. player = 2
  1476. End If
  1477. End Select
  1478.  
  1479. Erase LegalMovesNow()
  1480.  
  1481. If depth = 0 Then 'if we are at the end of the tree then return evaluation
  1482.     If SearchEnd = True Then
  1483.     alpha = EvaluateEnd(player)
  1484.     Else
  1485.     alpha = Evaluate(player)
  1486.     End If
  1487.     Search = alpha
  1488.     Nodes = Nodes + 1
  1489.     Exit Function
  1490. End If
  1491.  
  1492. GetLegalMoves (player) 'generates the legal moves for the current player
  1493.  
  1494. If LegalMovesNum > 0 Then
  1495.  
  1496. OrderMoves (player) ' move ordering to make the search faster(by producing cutoffs earlier)
  1497.  
  1498. 'copy the legal moves array to the current procedure
  1499. For i = 1 To LegalMovesNum
  1500. LegalMovesNow(i, 1) = LegalMoves(i, 1)
  1501. LegalMovesNow(i, 2) = LegalMoves(i, 2)
  1502. Next
  1503.  
  1504.  
  1505. For i = 1 To LegalMovesNum
  1506.  
  1507. 'store grid information in order to be able to unmake the move
  1508. For a = 1 To 8
  1509.     For b = 1 To 8
  1510.     TempGrid(a, b) = Grid(a, b)
  1511.     Next
  1512. Next
  1513. tempwhite = WhiteCount
  1514. tempblack = BlackCount
  1515.  
  1516.  Call MakeMove(player, LegalMovesNow(i, 1), LegalMovesNow(i, 2))
  1517.  
  1518.  
  1519.  NewScore = -Search(depth - 1, -beta, -alpha) 'calculate the score after making this move
  1520.   
  1521. 'unmake the move
  1522. For a = 1 To 8
  1523.     For b = 1 To 8
  1524.     Grid(a, b) = TempGrid(a, b)
  1525.     Next
  1526. Next
  1527.  WhiteCount = tempwhite
  1528.  BlackCount = tempblack
  1529.  
  1530.  If NewScore >= beta Then
  1531.  'make a cutoff because the opponent won't let me to get in this too good position for me (he already knows a strategy to avoid this)
  1532.  Search = beta
  1533.  Exit Function
  1534.  End If
  1535.  
  1536.  
  1537.  If NewScore > alpha Then 'if the new score is better than the best one found so far
  1538.  alpha = NewScore 'make if the best score
  1539.     If depth = startdepth Then ' if we are at the root nodes then record this move because it is the best one found so far
  1540.     SelMove(1) = LegalMovesNow(i, 1)
  1541.     SelMove(2) = LegalMovesNow(i, 2)
  1542.     End If
  1543.  End If
  1544.  
  1545.  
  1546. Next
  1547.  
  1548. Search = alpha
  1549.  
  1550. Else ' if LegalMovesNum = 0
  1551.  
  1552. Search = -Search(depth - 1, -beta, -alpha)
  1553.  
  1554. End If
  1555. End Function
  1556.  
  1557. Private Sub OrderMoves(player As Integer)
  1558. 'orders the legal moves by giving quick values for them and then sorting
  1559. Dim Values(40) As Integer
  1560. Dim TempGrid(1 To 8, 1 To 8) As Integer
  1561. Dim tempwhite As Integer, tempblack As Integer
  1562. Dim i As Integer, j As Integer, a As Integer, b As Integer
  1563. Dim temp1 As Integer, temp2 As Integer
  1564. Dim cellnum As Integer, cellval As Integer, score As Integer
  1565. Dim Counted As Integer
  1566.  
  1567. For i = 1 To LegalMovesNum
  1568.  
  1569. score = 0
  1570. Call GetFlipped(player, LegalMoves(i, 1), LegalMoves(i, 2))
  1571.  
  1572. 'the value of a move is the sum of the values for all the discs that if flipps
  1573. For j = 1 To FlippedNum
  1574.  
  1575. a = NewDiscs(j, 1)
  1576. b = NewDiscs(j, 2)
  1577.  
  1578.  ' there is something very similar to this in the evaluation function
  1579.         cellnum = (b - 1) * 8 + a
  1580.         Select Case cellnum
  1581.         Case 1, 8, 57, 64
  1582.         cellval = 250
  1583.         Case 2, 7, 9, 16, 49, 56, 58, 63
  1584.         cellval = -30
  1585.         Case 10, 15, 50, 55
  1586.         cellval = -40
  1587.         Case 3, 4, 5, 6, 17, 25, 33, 41, 24, 32, 40, 48, 59, 60, 61, 62
  1588.         cellval = 15
  1589.         Case Else
  1590.         cellval = 0
  1591.         End Select
  1592.  
  1593. Counted = CountBad(a, b)
  1594. cellval = cellval - (Counted + 8 * Sgn(Counted)) ' the value of the cell also depends on how many empty cells are surrounding it
  1595. Next
  1596.  
  1597. score = score + cellval
  1598. Values(i) = score
  1599.   
  1600.  
  1601.  
  1602. Next
  1603.  
  1604. 'sort the moves
  1605. Dim LargestVal As Integer, BestNow As Integer
  1606. For i = 1 To LegalMovesNum
  1607. LargestVal = -10000
  1608.     For j = i To LegalMovesNum
  1609.     If Values(j) > LargestVal Then BestNow = j: LargestVal = Values(j)
  1610.     Next
  1611.     temp1 = LegalMoves(BestNow, 1)
  1612.     temp2 = LegalMoves(BestNow, 2)
  1613.     LegalMoves(BestNow, 1) = LegalMoves(i, 1)
  1614.     LegalMoves(BestNow, 2) = LegalMoves(i, 2)
  1615.     LegalMoves(i, 1) = temp1
  1616.     LegalMoves(i, 2) = temp2
  1617.     Values(BestNow) = Values(i)
  1618. Next
  1619. End Sub
  1620. Private Sub ChangeTurn()
  1621. 'changes the turn for the other player or passes turns or ends the game
  1622. Dim player As Integer, opponent As Integer, i As Integer, j As Integer
  1623. Dim whattodo As String
  1624. Dim PlayerMayPass As String
  1625. DrawBoard
  1626.  
  1627. Select Case turn
  1628. Case "black"
  1629. PlayerMayPass = "White"
  1630. player = 2
  1631. opponent = 1
  1632. Case "white"
  1633. PlayerMayPass = "Black"
  1634. player = 1
  1635. opponent = 2
  1636. End Select
  1637.  
  1638. whattodo = ""
  1639. For i = 1 To 8
  1640.     For j = 1 To 8
  1641.     'if there are legal moves for the othar player then only change the turn
  1642.     If IsValid(player, i, j) = True Then whattodo = "normal": Exit For
  1643.     Next
  1644. Next
  1645. 'if there are no legal moves for the other player then check if we are going
  1646. 'to pass the turn and give the player already moves another turn
  1647. If whattodo = "" Then
  1648.  
  1649. For i = 1 To 8
  1650.     For j = 1 To 8
  1651.     If IsValid(opponent, i, j) = True Then whattodo = "pass": Exit For
  1652.     Next
  1653. Next
  1654. End If
  1655.  
  1656. 'if both players have no moves then end the game
  1657. If whattodo = "" Then whattodo = "endgame"
  1658.  
  1659. Select Case whattodo
  1660. Case "normal"
  1661.     Select Case turn
  1662.     Case "black"
  1663.     turn = "white"
  1664.     Case "white"
  1665.     turn = "black"
  1666.     End Select
  1667. Case "pass"
  1668.     Dim s As String
  1669.     s = PlayerMayPass + " passes"
  1670.     MsgBox (s)
  1671. Case "endgame"
  1672.     EndGame
  1673. End Select
  1674.  
  1675. Label2.Caption = turn
  1676. End Sub
  1677.  
  1678. Private Sub EndGame()
  1679. 'ends the game
  1680. DrawBoard
  1681. If BlackCount > WhiteCount Then
  1682. MsgBox ("The black player wins the game")
  1683. ElseIf BlackCount < WhiteCount Then
  1684. MsgBox ("The white player wins the game")
  1685. Else
  1686. MsgBox ("The game is a draw")
  1687. End If
  1688. Timer1.Enabled = False
  1689. Timer2.Enabled = False
  1690.  
  1691. End Sub
  1692. Private Sub TakeMove(Index As Integer)
  1693. 'takes a move for the computer or for the human player
  1694. Dim a As Integer, b As Integer, theplayer As Integer
  1695. a = (Index Mod 8) + 1
  1696. b = Int(Index / 8) + 1
  1697. Select Case turn
  1698. Case "black"
  1699. theplayer = 1
  1700. Case "white"
  1701. theplayer = 2
  1702. End Select
  1703. If IsValid(theplayer, a, b) = True Then
  1704. Call MakeMove(theplayer, a, b)
  1705. Label5.Caption = Str(WhiteCount)
  1706. Label6.Caption = Str(BlackCount)
  1707. ChangeTurn
  1708. End If
  1709.  
  1710. DrawBoard
  1711.  
  1712. End Sub
  1713.  
  1714. Private Sub CompMove()
  1715. 'makes the computer move
  1716. Dim TheDepth As Integer, best As Integer, a As Integer, b As Integer, c As Integer
  1717. freezed = True 'make the player not able to make a move
  1718. Form1.MousePointer = 11 'change the shape of the mouse ponter
  1719. Nodes = 0
  1720. If (BlackCount + WhiteCount) > (64 - EndDepth) Then 'if we are at the end of the game then make a search to play the perfect move
  1721. SearchEnd = True
  1722. TheDepth = 20 'the depth is higher than the number of empty discs to handle passes
  1723. Else 'nor at the end of the game, make a normal search
  1724. SearchEnd = False
  1725. TheDepth = MidDepth
  1726. End If
  1727. startdepth = TheDepth
  1728. best = Search(TheDepth, -5000, 5000) 'make the search
  1729. Form1.MousePointer = 1
  1730.  
  1731. a = SelMove(1)
  1732. b = SelMove(2)
  1733. c = 8 * (b - 1) + a - 1 'calculate the index of the square from and x and y coordinates
  1734. TakeMove (c)
  1735. freezed = False
  1736. End Sub
  1737.  
  1738.  
  1739. Private Sub blackoptions_Click(Index As Integer)
  1740. Dim i As Integer
  1741. For i = 0 To 4
  1742. blackoptions(i).Checked = False
  1743. Next
  1744. blackoptions(Index).Checked = True
  1745. Player1Type = Index
  1746. Label9.Caption = blackoptions(Index).Caption
  1747. End Sub
  1748.  
  1749.  
  1750. Private Sub Command1_Click()
  1751. 'the (End Setup) command button
  1752. Dim theplayer As Integer, opponent As Integer
  1753. Dim DoWhat As String
  1754. BlackCount = 0
  1755. WhiteCount = 0
  1756. Dim i As Integer, j As Integer
  1757. For i = 1 To 8
  1758.     For j = 1 To 8
  1759.     If Grid(i, j) = 1 Then BlackCount = BlackCount + 1
  1760.     If Grid(i, j) = 2 Then WhiteCount = WhiteCount + 1
  1761.     Next
  1762. Next
  1763.  
  1764. Label5.Caption = Str(WhiteCount)
  1765. Label6.Caption = Str(BlackCount)
  1766.  
  1767. If Option1.Value = True Then theplayer = 1: opponent = 2 Else: theplayer = 2: opponent = 1
  1768.  
  1769. DoWhat = ""
  1770.  
  1771. GetLegalMoves (theplayer)
  1772. If LegalMovesNum > 0 Then
  1773. DoWhat = "normal"
  1774. Select Case theplayer
  1775. Case 1
  1776. turn = "black"
  1777. Case 2
  1778. turn = "white"
  1779. End Select
  1780. Label2.Caption = turn
  1781. End If
  1782.  
  1783. If DoWhat = "" Then
  1784.     GetLegalMoves (opponent)
  1785.     If LegalMovesNum > 0 Then DoWhat = "pass"
  1786. End If
  1787.  
  1788. If DoWhat = "" Then EndGame
  1789. If DoWhat = "pass" Then ChangeTurn
  1790.  
  1791. mnusetup_Click
  1792. End Sub
  1793.  
  1794. Private Sub Command2_Click()
  1795. 'the (clear) command button
  1796. Dim i As Integer, j As Integer
  1797. For i = 1 To 8
  1798.     For j = 1 To 8
  1799.     Grid(i, j) = 0
  1800.     Next
  1801. Next
  1802. Grid(4, 4) = 2
  1803. Grid(5, 5) = 2
  1804. Grid(5, 4) = 1
  1805. Grid(4, 5) = 1
  1806. DrawBoard
  1807. End Sub
  1808.  
  1809. Private Sub Command3_Click()
  1810. blackoptions_Click (0)
  1811. End Sub
  1812.  
  1813. Private Sub Form_Load()
  1814. NewGame
  1815. Player1Type = 0
  1816. Player2Type = 3
  1817. End Sub
  1818.  
  1819. Private Sub Form_Unload(Cancel As Integer)
  1820. End
  1821. End Sub
  1822.  
  1823. Private Sub Image1_Click(Index As Integer)
  1824. If mnusetup.Checked = True Then 'if we are in the setup mode
  1825.     Dim a As Integer, b As Integer
  1826.     a = (Index Mod 8) + 1
  1827.     b = Int(Index / 8) + 1
  1828.     Select Case Grid(a, b)
  1829.     Case 0
  1830.     Grid(a, b) = 1
  1831.     Case 1
  1832.     Grid(a, b) = 2
  1833.     Case 2
  1834.     Grid(a, b) = 0
  1835.     End Select
  1836.     DrawBoard
  1837. Else ' we are in the normal mode
  1838.     If freezed = True Then Exit Sub
  1839.     TakeMove (Index)
  1840. End If
  1841.  
  1842. End Sub
  1843.  
  1844.  
  1845. Private Sub mnuexit_Click()
  1846. End
  1847. End Sub
  1848.  
  1849. Private Sub mnunew_Click()
  1850. NewGame
  1851. End Sub
  1852.  
  1853. Private Sub mnuseggest_Click()
  1854. 'similar to the (CompMove) sub
  1855. If (Player1Type <> 0 And turn = "black") Or (Player2Type <> 0 And turn = "white") Then Exit Sub 'exit sub if it is computer to play
  1856. If Timer1.Enabled = False And Timer2.Enabled = False Then Exit Sub 'exit sub if the game is over
  1857. Dim OppType As Integer, imgnum As Integer
  1858. mnuseggest.Enabled = False
  1859. freezed = True
  1860. If turn = "black" Then OppType = Player2Type: imgnum = 2
  1861. If turn = "white" Then OppType = Player1Type: imgnum = 1
  1862. If OppType = 0 Then OppType = 3
  1863. Select Case OppType
  1864. Case 1
  1865. MidDepth = 1
  1866. Case 2
  1867. MidDepth = 2
  1868. Case 3
  1869. MidDepth = 4
  1870. Case 4
  1871. MidDepth = 6
  1872. End Select
  1873. EndDepth = MidDepth * 2
  1874.  
  1875. Dim TheDepth As Integer, best As Integer, a As Integer, b As Integer, c As Integer
  1876. Form1.MousePointer = 11
  1877. If (BlackCount + WhiteCount) > (64 - EndDepth) Then
  1878. SearchEnd = True
  1879. TheDepth = 20
  1880. Else
  1881. SearchEnd = False
  1882. TheDepth = MidDepth
  1883. End If
  1884. startdepth = TheDepth
  1885. best = Search(TheDepth, -5000, 5000)
  1886. Form1.MousePointer = 1
  1887.  
  1888. a = SelMove(1)
  1889. b = SelMove(2)
  1890. c = 8 * (b - 1) + a - 1
  1891.  
  1892. Dim i As Integer
  1893. For i = 1 To 3 'make the disc blink 3 times
  1894.     Image1(c).Picture = imgMain.ListImages.Item(imgnum).Picture
  1895.     DoEvents
  1896.     Sleep 200
  1897.     Image1(c).Picture = imgMain.ListImages.Item(4).Picture
  1898.     DoEvents
  1899.     Sleep 200
  1900. Next
  1901. freezed = False
  1902. mnuseggest.Enabled = True
  1903. End Sub
  1904.  
  1905. Private Sub mnusetup_Click()
  1906. mnugame.Enabled = mnusetup.Checked
  1907. mnuoptions.Enabled = mnusetup.Checked
  1908. Timer1.Enabled = mnusetup.Checked
  1909. Timer2.Enabled = mnusetup.Checked
  1910. mnusetup.Checked = Not (mnusetup.Checked)
  1911. Frame2.Visible = mnusetup.Checked
  1912. DrawBoard
  1913. End Sub
  1914.  
  1915. Private Sub mnushowpossible_Click()
  1916. mnushowpossible.Checked = Not (mnushowpossible.Checked)
  1917. DrawBoard
  1918. End Sub
  1919.  
  1920. Private Sub Timer1_Timer()
  1921. 'make a move for the computer if the black player is a computer
  1922.  
  1923. 'if two computers are playing then show the (Stop Aubo Play) button
  1924. If Timer1.Enabled = True And Timer2.Enabled = True And Player1Type <> 0 And Player2Type <> 0 Then
  1925. Command3.Visible = True
  1926. Else
  1927. Command3.Visible = False
  1928. End If
  1929.  
  1930. If turn = "black" And Player1Type <> 0 Then
  1931. 'determine the search depth according to the computer level
  1932. Select Case Player1Type
  1933. Case 1
  1934. MidDepth = 1
  1935. Case 2
  1936. MidDepth = 2
  1937. Case 3
  1938. MidDepth = 4
  1939. Case 4
  1940. MidDepth = 6
  1941. End Select
  1942. EndDepth = MidDepth * 2
  1943. CompMove
  1944. End If
  1945. End Sub
  1946.  
  1947. Private Sub Timer2_Timer()
  1948. 'similar to (timer1) but for the white player
  1949. If Timer1.Enabled = True And Timer2.Enabled = True And Player1Type <> 0 And Player2Type <> 0 Then
  1950. Command3.Visible = True
  1951. Else
  1952. Command3.Visible = False
  1953. End If
  1954.  
  1955. If turn = "white" And Player2Type <> 0 Then
  1956. Select Case Player2Type
  1957. Case 1
  1958. MidDepth = 1
  1959. Case 2
  1960. MidDepth = 2
  1961. Case 3
  1962. MidDepth = 4
  1963. Case 4
  1964. MidDepth = 6
  1965. End Select
  1966. EndDepth = MidDepth * 2
  1967. CompMove
  1968. End If
  1969. End Sub
  1970.  
  1971. Private Sub Timer3_Timer()
  1972. If Timer1.Enabled = True And Timer2.Enabled = True And Player1Type <> 0 And Player2Type <> 0 Then
  1973. Command3.Visible = True
  1974. Else
  1975. Command3.Visible = False
  1976. End If
  1977. End Sub
  1978.  
  1979. Private Sub whiteoptions_Click(Index As Integer)
  1980. Dim i As Integer
  1981. For i = 0 To 4
  1982. whiteoptions(i).Checked = False
  1983. Next
  1984. whiteoptions(Index).Checked = True
  1985. Player2Type = Index
  1986. Label10.Caption = whiteoptions(Index).Caption
  1987. End Sub
  1988.