#include<iostream.h>#include<stdlib.h>#define Num 15//********************************************************//类class T//定义类用来封装所有相关函数和变量{ char board[Num][Num]//用数组board[Num][Num]来定义
棋盘public: void PrintMenu() //打印菜单 说明游戏规则和方法void PrintBoard() //打印棋盘 void GameStart(char*,int &,int &,char) //下棋 int whichwin(int,int,char) //判断那个选手赢 void Choice(char &) //是否再玩 void Setboard() //重置棋盘}//****************************************************************//main主函数void main ()//主函数{ T s//说明类的一个对象ss.PrintMenu()//通过s调用PrintMenu函数提示如何游戏 char player1[20],player2[20]//玩家姓名 int FirstWin=0,SecondWin=0,Draws=0,x,y,N//说明变量,赋初值为0以待计算输赢结果 char choice='Y' cin.ignore(20,'\n')//输入输出流,前面如果有输入把输入行所有字符取空,以便后面的输入从新的一行开始 cout<<"请输入第一个玩家姓名:" cin.getline(player1,20)//连续读取数据 cout<<"请输入第二个玩家姓名:" cin.getline(player2,20) while(choice=='Y'||choice=='y')//条件成立,执行 { s.Setboard()//调用Setboard函数 N=0 while(N<=(Num*Num)) { s.PrintBoard()//打印棋盘 s.GameStart(player1,x,y,'O') N++//记录已下棋子数 if(s.whichwin(x-1,y-1,'O'))//返回值不为0则条件成立 { s.PrintBoard() cout<<player1<<"赢了。"<<endl FirstWin++//记录赢局数 break//终止本次循环 } s.PrintBoard()//同上 s.GameStart(player2,x,y,'X') N++ if(s.whichwin(x-1,y-1,'X')) { s.PrintBoard() cout<<player2<<"赢了。"<<endl SecondWin++ break } if(N==(Num*Num)) { cout<<"和棋!" Draws++//记录平局数 break } } s.Choice(choice)//给玩家提供一次选择是否再玩的机会 } //输出游戏输赢次数 cout<<player1<<"赢了"<<FirstWin<<"次"<<endl cout<<player2<<"赢了"<<SecondWin<<"次"<<endl cout<<"和"<<Draws<<"次"<<endl cout<<"谢谢使用。"<<endl cout<<"任意键继续。"<<endl cin.get()//很必要的,目的是空度换行字符}//*******************************************************************//定义公有成员函数void T::PrintMenu(){ cout<<"欢迎进入五子棋游戏!\n" cout<<"******************************************"<<endl cout<<"\t游戏说明:"<<endl<<endl cout<<"1.第一个玩家用O第二个玩家用X;"<<endl cout<<"2.请根据提示输入所要走的行和列;"<<endl cout<<"3.按<Enter>下棋。"<<endl cout<<"好的程序还是很复杂的,一般的可以看flash格式的动画小游戏,把它拆了就可以了,技术好点就要去研究黑石的
算法了,很复杂,逻辑+算法+拓扑+人工智能。
网上的源代码还是很多,自己好好看看吧。
黑石计算很全面,当然10级很垃圾。你只要认真一点,战胜应该不是问题。
一般都用3dan。
所谓计算实际上是抽象记忆,你首先要在脑子里面形成一副图。黑棋走这里,白棋走哪里,然后黑棋又走哪里。。。。
计算得越多,计算的步数越远。
当然那只是单一变化,算完了,再算另一种变化,如果黑棋不走那里,那白棋有哪些点可走,每个点结果会怎么样。
这就是计算的过程。
五子棋很复杂的,努力吧。。
不见然是这样的
黑石的开局是逻辑+算法+拓扑+人工智能,
中盘一般是先判断优势区域,或者叫块,采用正负加和算法,
尽量做到多区域链接,
终盘,一般是反复的线性算法,做VCF,
整个过程有一定的棋谱支持,但人工智能不强,这方面不如fiver6,
估计五子棋的所有棋谱的坐标文件是2000TB,但有效下发在1TB左右,这是我个人估计,围棋由于可以反复,棋谱没有终结的,
所以,毕竟五子棋的每个棋子是永久放在棋盘上的,可以穷尽的
网上有很多棋谱的搜索引擎,黑石毕竟不是最强的,她的开局比较厉害,终盘的算法也还可以,但时间太长,但中盘的布局和谋虑不是很好,大局观就是没有人的好。
要编写一个优秀的软件,你首先必须是一个连珠高手,把人的智能转移到程序上
评论列表(0条)