智能机器人游戏——五子棋AI算法大比拼!
规则:
1.棋局类是一个单例,可以通过 Chessboard.GetInstance()棋局类的单例对象。
2.棋局会随机为两个玩家设置白棋或黑棋,白棋先手。
3.每局每个玩家可以使用时间为10分钟,超时算负。
4.如果玩家返回的坐标为非法,如该坐标已有棋子或超出棋局范围,系统将自动重新调用该玩家play()函数。
5.玩家只要继承player类,并重写play函数,返回放置棋子的坐标。
6.可通过GetMyChessStyle()方法获取自子的棋子是白或黑。
7.通过棋局类方法start()设置棋盘大小并开始比赛。
8.可能过棋局类单例对象的getCurrentChessBoard()方法获取当前棋盘的一个拷贝以了解战况,可通过棋局类单例对象的GetSize()方法获取棋盘的大小。
9.通过在main()函数中调用棋局类单例对象的SetPlayer方法设置比赛的AI,设用start方法开始比赛。
main()函数示例:
public static void Main()
{
Chessboard cb = Chessboard.GetInstance();
cb.SetPlayer(new Creazer (), new Zimmem_1());
cb.start(15);
}
{
Chessboard cb = Chessboard.GetInstance();
cb.SetPlayer(new Creazer (), new Zimmem_1());
cb.start(15);
}
示例1:
一个只会随机乱下的疯子:
class Creazer:Player
{
public override Position play()
{
/*获取棋局对象*/
Chessboard cb=Chessboard.GetInstance();
/*随机数生成器*/
Random ra = new Random();
/*随机生成一个坐标*/
Position pos = new Position();
pos.x = ra.Next(cb.GetSize());
pos.y = ra.Next(cb.GetSize());
return pos;
}
}
示例2:{
public override Position play()
{
/*获取棋局对象*/
Chessboard cb=Chessboard.GetInstance();
/*随机数生成器*/
Random ra = new Random();
/*随机生成一个坐标*/
Position pos = new Position();
pos.x = ra.Next(cb.GetSize());
pos.y = ra.Next(cb.GetSize());
return pos;
}
}
可以让用户自已输入:
class UserPlayer : Player
{
public override Position play()
{
/*获取棋局对象*/
Chessboard cb = Chessboard.GetInstance();
/*获取当前棋盘*/
Chessboard.ChessState[,] chessboard = cb.getCurrentChessBoard();
/*输出棋盘以让用户了解战况*/
for (long i = 0; i < cb.GetSize(); i++)
{
for (long j = 0; j < cb.GetSize(); j++)
{
Console.Write(chessboard[i, j].GetHashCode());
}
Console.WriteLine();
}
/*玩家输入坐标*/
Position pos = new Position();
pos.x = int.Parse(Console.ReadLine());
pos.y = int.Parse(Console.ReadLine());
return pos;
}
}
{
public override Position play()
{
/*获取棋局对象*/
Chessboard cb = Chessboard.GetInstance();
/*获取当前棋盘*/
Chessboard.ChessState[,] chessboard = cb.getCurrentChessBoard();
/*输出棋盘以让用户了解战况*/
for (long i = 0; i < cb.GetSize(); i++)
{
for (long j = 0; j < cb.GetSize(); j++)
{
Console.Write(chessboard[i, j].GetHashCode());
}
Console.WriteLine();
}
/*玩家输入坐标*/
Position pos = new Position();
pos.x = int.Parse(Console.ReadLine());
pos.y = int.Parse(Console.ReadLine());
return pos;
}
}
示例3:
我写的一个只会进攻,不会防守的算法,有点长.....
Code
结果示例:
Gobang.Creazer 先手,使用白棋,标志为1!
Gobang.Zimmem_1使用黑棋,标志为2!
游戏开始!
最终棋局为!
000000000000000
000000000000000
000000000000000
000000000000000
100000000000000
000000000000000
000000000000000
010000000000000
000000000122222
000000000000000
000000000000000
000100000000000
000000000000000
000000000000000
000010000000000
Gobang.Zimmem_1 胜!
由于时间不多,判胜负的算法没细想,有点垃圾,不过应该没问题,有兴趣的帮忙更进下。现在是用C#写,有兴趣的帮忙翻译成C++或java. Gobang.Zimmem_1使用黑棋,标志为2!
游戏开始!
最终棋局为!
000000000000000
000000000000000
000000000000000
000000000000000
100000000000000
000000000000000
000000000000000
010000000000000
000000000122222
000000000000000
000000000000000
000100000000000
000000000000000
000000000000000
000010000000000
Gobang.Zimmem_1 胜!
源码下载