Quote:
Extending forced moves would also improve the tactical ability of your program.
I didn't get you, can you be more elaborate this?
Quote:
A good evaluation function would look at the difference of odd threats between the two players, and know that first_player.odd()>second_player.odd() means that the first player is likely to win and that first_player.odd()<=(second_player.odd()-2) means that the second player is likely to win. In the middle, it matters how many columns have a shared odd threat, and things of that type. The details are starting to fade from my memory, since it's been 14 years since I spent time studying this game.
It is also important to be more confident on the result if the opponent has fewer odd places where a threat is still possible.
But I have heard that player1 strives for odd rows and player2 for even rows
Quote:
John Tromp's Java applet does it after 8 moves, so it's definitely achievable.
Well John Tromp used bit-boards for the game and as we know, bit-boards are way faster than normal array data types,and since I want it to play from scratch, so it must play perfect game even before 8 moves.
like in my previous example I gave, my program playing first
played the following moves:
1]4-4
2]4-4
3]4-4
4]5-3
5]5??-5
6]5-3
7]5-3
8]3-6
9]3-6// odd row threat.
10]7-6
11]6-6
12]5-3
13]6-1
14]7-1
15]7-7
16]7-1
17]1-1
18]7-1
19]2-2 // player 2 wins.
Now even if I choose to play at depth of 15 plys still my program wont recognize that there is a win for player2 as he gets odd row threat in row 5, while player 2 gets even row 2 diagonal threat.
Also I tried to implement the following logic of make 3 in a row,else if possible block three in a row,get two connected else block 2. in their decreasing order.
However, there are tricky stuffs in this game that require much more than that.
I can see that from move number 5 of the above mentioned game, it connects 2 in a row,but then loses.