应用程序的壳(界面、事件驱动)与算法的关系
两者是骨骼和肉体的关系,当应用程序的壳创建好了,就需要把相应的算法写入到事件驱动当中去,这样才能实现程序应有的功能。
Exp:浅析五子棋
1、五子棋的算法包含什么?
画棋子的算法 判断输赢的算法 人机对战算法
2、每个算法怎么用计算机语言实现?
//画棋子的算法
if(e.getX()>=50 && e.getX()<=770 && e.getY()>=50 && e.getY()<=770){
//定义单击棋盘所在的点缓冲区大小为20
//定义单击在棋盘上所在的行列数为x,y
x=(e.getX()+20)/50;
y=(e.getY()+20)/50;
//画棋子
//利用白棋:0 黑棋:1
//判断不为下棋位置不为空时才下棋,否则在已下棋位置重下报错
if(a[x][y]==null){
if(count==0){
//画透明的白棋
g.drawOval(x*50-10, y*50-10, 20, 20);
//建立每次下的白棋子对象
qiZi m=new qiZi();
m.type=0;
m.x=x*50-10;
m.y=y*50-10;
//在行列出赋值
a[x][y]=m;
count=1;
}
else
{ //画黑颜色的黑棋
g.fillOval(x*50-10, y*50-10, 20,20);
// System.out.println("这是黑子"+count);
//建立每次下的白棋子对象
count=0;
qiZi o=new qiZi();
o.type=1;
o.x=x*50-10;
o.y=y*50-10;
a[x][y]=o;
}
}
else{
//如果在同一点重新下棋报错
javax.swing.JFrame jf=new javax.swing.JFrame("错误提示");
jf.setSize(300,300);
javax.swing.JLabel jl=new javax.swing.JLabel("不能在以下过棋的位置重新下棋");
jf.add(jl);
jf.setVisible(true);
}
}
//判断输赢
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
//当找到的第一个有子位置的白棋时
if(a[i][j]!=null && a[i][j].type==0){
// System.out.println(a[i][j].x+"和"+a[i][j].y);
//判断搜寻到的白字的周围八个方向为白棋且字数为5点情况
//开始计数
//上下方计数
int record1=1;
//左右方计数
int record2=1;
//45度角方向计数
int record3=1;
//135度方向计数
int record4=1;
//利用for循环不断的判断
for(int w=1;w<=4;w++){
//45度方向的判断
if(i+w<17 && j+w<17){
if(a[i+w][j+w]!=null && a[i+w][j+w].type==0){
record3++;
//System.out.print(record);
if(record3==5){
System.out.print("白棋赢了");
}
}
}
//135度方向判定
if(i-w>=0 && j+w<17){
if(a[i-w][j+w]!=null && a[i-w][j+w].type==0){
record4++;
//System.out.print(record);
if(record4==5){
System.out.print("白棋赢了");
}
}
}
//判断上方情况
if(j+w<17){
if(a[i][j+w]!=null && a[i][j+w].type==0){
record1++;
//System.out.print(record);
if(record1==5){
System.out.print("白棋赢了");
}
}
}
//用于判断右方的情况
if(i+w<17){
if(a[i+w][j]!=null && a[i+w][j].type==0){
record2++;
//System.out.print(record);
if(record2==5){
System.out.print("白棋赢了");
}
}
}
}
}
// 黑气
//当找到的第一个有子位置的黑棋时
if(a[i][j]!=null && a[i][j].type==1){
// System.out.println(a[i][j].x+"和"+a[i][j].y);
//判断搜寻到的白字的周围八个方向为白棋且字数为5点情况
//开始计数
//上下方计数
int record1=1;
//左右方计数
int record2=1;
//45度角方向计数
int record3=1;
//135度方向计数
int record4=1;
//利用for循环不断的判断
for(int w=1;w<=4;w++){
//45度方向的判断
if(i+w<17 && j+w<17){
if(a[i+w][j+w]!=null && a[i+w][j+w].type==1){
record3++;
//System.out.print(record);
if(record3==5){
System.out.print("黑棋赢了");
}
}
}
//135度方向判定
if(i-w>=0 && j+w<17){
if(a[i-w][j+w]!=null && a[i-w][j+w].type==1){
record4++;
//System.out.print(record);
if(record4==5){
System.out.print("黑棋赢了");
}
}
}
//判断上方情况
if(j+w<17)
{
if(a[i][j+w]!=null && a[i][j+w].type==1){
record1++;
//System.out.print(record);
if(record1==5){
System.out.print("黑棋赢了");
}
}
}
//用于判断右方的情况
if(i+w<17){
if(a[i+w][j]!=null && a[i+w][j].type==1){
record2++;
//System.out.print(record);
if(record2==5){
System.out.print("黑棋赢了");
}
}
}
}
}
}
}
//判断输赢结束
3、将相应的代码发到哪里?
画棋子写到鼠标监听器中,利用计数器决定黑白棋
判断的输赢的也是写在这里