J2se(11)
阶段小练习
----五子棋游戏
gobang----五子连珠
第一阶段: 画棋盘
A、首先把图片转换成程序中可以使用对象,把作为一个面板背景
1、创建一个窗体,宽度610px,高630px
2、在窗体中放置一个面板Jpanel,填充满整个屏幕
3、编写Jpanel面板的单击事件 --MouseListener----MouseClicked
4、编写内部类MyPanel继承于JPanel
(把图片文件夹,导入到工程的根目录)
A、在类中,重写父类的paint(Graphics g)方法
B、在方法,首先利用swing组件的一些方法,将3张图片转换程序中可以使用的对象
Image bg = Toolkit.getDefaultToolkit().createImage("img/bg.gif");
C、创建媒体跟踪器(它用于注册程序中要使用的图片对象)
MediaTracker mt = new MediaTracker(this);
D、在媒体跟踪器中,注册三个图片对象
mt.addImage(b,0);
E、让媒体跟踪器,把所有注册过的图片添加到内存,供程序使用
mt.waitForAll();
F、利用画笔在面板中绘制背景
g.drawImage(bg,0,0,null);
5、将GobangFrm窗体类中的
jpanel1 = new MyPanel();
第二阶段: 在棋盘落子
1、定义一个二维数组用于保存每一个棋子的坐标(全局变量)
private int[][] arrs = new int[15][15];//用于存储棋子的坐标
2、定义一个boolean型的变量flag,用于标识,当前应该是谁落棋子,默认true,表示黑棋
3、在第一阶段第3步中的事件中如下处理
A、先确定鼠标点击的位置的x与y值
int x = evt.getX()/40;
int y = evt.getY()/40;
缩小40倍,刚好对应到二维数组的下标
4、判断当前x,y对应的位置是否有棋子
5、 判断flag是true还是false,true为1,false为2
if(flag){
arrs[x][y]=1;
}else{
arrs[x][y]=2;
}
6、让棋盘重新绘图
jpanel1.repaint();//只要该方法一调用,棋盘就会重新绘制,包含棋子
用户调用jpanel1的repaint(),系统则会自动调用面板类的 paint()方法
7、flag取反,让对方落棋
flag = !flag;
8、在MyPanel的方法中,绘棋子(对二维数组循环判断当前的值是0,1,2)
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
if(arrs[i][j]==1){
g.drawImage(a,i*40,j*40,null);
}
if(arrs[i][j]==2){
g.drawImage(b,i*40,j*40,null);
}
}
}
第三阶段: 判断胜负(五子连成一条线)
1、编写方法,判断是否胜利 isWin
2、在方法中做如下处理:
A、定义一个整型变量,用于保存棋子的颜色
int chessman=0;//用于保存棋子的颜色
if(flag){
chessman = 1;//黑棋
}else{
chessman=2;//白棋
}
3、定义一个int类型的变量,用于保存有几个相同颜色棋子连成一条线
int count=1;
4、将x,y定义成全局变量
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
arrs[i][j]=0;
}
}