OK, there has been lots of good stuff in this thread, so I'll keep it going. The general consensus is that a quiescence search should come next, and I am working towards that by reviewing my negamax/alphabeta search to reinforce on the basics.
I'm using Bruce Borland's pages as a guide. I like his stuff because it is not too technical for me.
I think the way I have coded my negamax/alpha-beta search is hindering my progress. I believe my algorithm is correct, I have had good success with WAC Suite, but
my algorithm is expressed in a non-standard way and I can't really relate it to the things Borland, and others, say about Alpha-Beta. In particular he passes alpha, beta, and depth to his recursibe function, and mine seems a little different. I also seem to use ply a little differently than most, though it all seems to come out in the wash.
So as a first next step I'd like to start a dialog for the purpose of reconciling the difference between my approach and Borland's. Maybe I should rewrite my negamax if it will make my life easier.
Borlands alpha-beta page is here.
http://web.archive.org/web/200404200223 ... habeta.htm
my engine code is here
in my code. From makeMove() I first do a non-recursive possibleMoves. Then I evaluate each move recursively by calling a method called evaluate. Note this is not an eval method. I suppose I should have called it negamax. There is another method called evalPos which adds up material and also does a little central control thing.
I see line 171 as the key line of code for pruning.
Anyways. I'll leave it at that. I'm hoping people will take a look at my code and provide some suggestions for bringing it into line with standard ways of design, if there is such a thing in the first place. Naturally I can provide further explanations of my code if needed.