It extremely difficult to win against the computer. I did it, but that was after I ran the computer against itself and then copied its exact moves. There are certain situations that guarantee a win and you basically have to figure out all of them. The computer I played against used this list of winning positions:
private static int winPositions[][] =
{
{1},
{7,6}, {6,5}, {5,4}, {4,3}, {3,2}, {2,1},
{7,7,4}, {7,5,2}, {6,4,2}, {4,2,2},
{7,4,3}, {6,3,3}, {5,5,3},
{4,1,1,1}, {3,1,1},
{2,2,2,1},
{2,2,1}, {3,3,1,1},
{5,2,1,1},
};
//Each array is number of squares in row 0, 1, 2, 3 (a missing element is 0)