一、实践目的:
了解继承的基本概念;
掌握父类与子类的关系与应用。
二、实践内容:
题目1.按要求设计程序:
1.定义一个五子棋的棋盘。五子棋棋盘含有宽w,高h,行数r,列数c和边距align,网格为正方形宽和高都为size,画棋盘的方法public void paint(Griphics g)。
2.定义一个中国象棋的棋盘。象棋棋盘含有与五子棋相同的属性,画棋盘的方法名称相同,但算法不同。
3.根据以上说明设计父类RenjuBoard,和子类ChineseChessBoard。
五子棋棋盘 示例代码:
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class RenjuBoard extends JPanel {
int w,h;//宽和高,用像素为单位。
int c,r;//列和行,列的线条和行的线条数用正整数表示。
int align;//边距
int size; //网格间距
public JLabel l=new Piece();
/*
* 无参构造函数
*/
public RenjuBoard(){
this(0,0,0,0);
}
/*
* 有宽、高、列和行的构造函数
*/
public RenjuBoard(int w,int h,int c,int r){
this.w = w;
this.h = h;
this.c = c;
this.r = r;
}
/*
* 只有行和列数的构造函数
*/
public RenjuBoard(int c,int r){
this(0,0,0,0);
this.r = r;
this.c = c;
}
/*
* 画棋盘(non-Javadoc)
* @see javax.swing.JComponent#paint(java.awt.Graphics)
*/
public void paint(Graphics g){
align = 20;
size = (w - 2 * align )/(c - 1);
for(int i=0; i<r; i++) //画横线
g.drawLine(0+align, i * size + align, align+(c-1)*size, i * size + align);
for(int j=0; j<c; j++) //画纵线
g.drawLine(align + j*size, align, align + j*size, align + (r-1)*size);
}
}
题目2.
1.设计一个抽象类Board,设计两个子类五子棋类和中国象棋类。
2.主窗体通过菜单选择,可以在窗体内实现对应棋盘。
五子棋如图1所示
图1 五子棋
图2 中国象棋
参考代码:
抽象类Board
import java.awt.Graphics;
import javax.swing.JPanel;
public abstract class Board extends JPanel {
int w,h;//宽和高,用像素为单位。
int c,r;//列和行,列的线条和行的线条数用正整数表示。
int align;//边距
int size; //网格间距
public abstract void paint(Graphics g);//
}
五子棋:
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class RenjuBoard extends Board {
/*
* 无参构造函数
*/
public RenjuBoard(){
this(0,0,0,0);
}
/*
* 有宽、高、列和行的构造函数
*/
public RenjuBoard(int w,int h,int c,int r){
this.w = w;
this.h = h;
this.c = c;
this.r = r;
}
/*
* 只有行和列数的构造函数
*/
public RenjuBoard(int c,int r){
this(0,0,0,0);
this.r = r;
this.c = c;
}
/*
* 画棋盘(non-Javadoc)
* @see javax.swing.JComponent#paint(java.awt.Graphics)
*/
public void paint(Graphics g){
align = 20;
size = (w - 2 * align )/(c - 1);
for(int i=0; i<r; i++) //画横线
g.drawLine(0+align, i * size + align, align+(c-1)*size, i * size + align);
for(int j=0; j<c; j++) //画纵线
g.drawLine(align + j*size, align, align + j*size, align + (r-1)*size);
}
}
象棋
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
public class ChineseChess extends Board {
/*
* 无参构造函数
*/
public ChineseChess(){
this(0,0,0,0);
}
/*
* 有宽、高、列和行的构造函数
*/
public ChineseChess(int w,int h,int c,int r){
this.w = w;
this.h = h;
this.c = c;
this.r = r;
}
/*
* 只有行和列数的构造函数
*/
public ChineseChess(int c,int r){
this(0,0,0,0);
this.r = r;
this.c = c;
}
/*
* 画棋盘(non-Javadoc)
* @see javax.swing.JComponent#paint(java.awt.Graphics)
*/
public void paint(Graphics g){
align = 20;
size = (w - 2 * align )/(r - 1);
//画横线
for(int i=0; i<r; i++)
g.drawLine(0+align, i * size + align, align+(c-1)*size, i * size + align);
//画纵线
for (int i = 0; i < c; i++){
g.drawLine(align + i * size, align, align + i
* size, align + (r -6) * size);
g.drawLine(align + i * size, align + (r-5) * size, align + i
* size, align + (r-1) * size);
}
//画斜线
g.drawLine(align + size * 3,align, align+size *5, align + size*2 );
g.drawLine(align + size * 5,align, align+size *3, align + size*2 );
g.drawLine(align + size * 3,align + size*(r-3), align+size *5, align + size*(r-1) );
g.drawLine(align + size * 5,align + size*(r-3), align+size *3, align + size*(r-1) );
// 画四周边线(粗线)
float lineWidth = 3.0f;
g.setColor(Color.black);
((Graphics2D) g).setStroke(new BasicStroke(lineWidth));
((Graphics2D) g).drawLine(align, align, size * (c - 1)
+ align, align);
((Graphics2D) g).drawLine(align, size * (r-1) + align,
size * (c - 1) + align, (r-1) * size
+ align);
((Graphics2D) g).drawLine(align, align, align, (r-1)
* size + align);
((Graphics2D) g).drawLine(align + size * (c - 1), align,
align + size * (c - 1), (r-1) * size
+ align);
//画炮位
g.drawLine(align + size-(size*2/7), align + size*2-(size*1/7), align + size-(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size-(size*1/7), align + size*2-(size*2/7), align + size-(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size-(size*2/7), align + size*2+(size*1/7), align + size-(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size-(size*1/7), align + size*2+(size*2/7), align + size-(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size+(size*2/7), align + size*2-(size*1/7), align + size+(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size+(size*1/7), align + size*2-(size*2/7), align + size+(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size+(size*2/7), align + size*2+(size*1/7), align + size+(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size+(size*1/7), align + size*2+(size*2/7), align + size+(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size*7-(size*2/7), align + size*2-(size*1/7), align + size*7-(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size*7-(size*1/7), align + size*2-(size*2/7), align + size*7-(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size*7-(size*2/7), align + size*2+(size*1/7), align + size*7-(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size*7-(size*1/7), align + size*2+(size*2/7), align + size*7-(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size*7+(size*2/7), align + size*2-(size*1/7), align + size*7+(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size*7+(size*1/7), align + size*2-(size*2/7), align + size*7+(size*1/7), align + size*2-(size*1/7));
g.drawLine(align + size*7+(size*2/7), align + size*2+(size*1/7), align + size*7+(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size*7+(size*1/7), align + size*2+(size*2/7), align + size*7+(size*1/7), align + size*2+(size*1/7));
g.drawLine(align + size-(size*2/7), align + size*7-(size*1/7), align + size-(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size-(size*1/7), align + size*7-(size*2/7), align + size-(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size-(size*2/7), align + size*7+(size*1/7), align + size-(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size-(size*1/7), align + size*7+(size*2/7), align + size-(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size+(size*2/7), align + size*7-(size*1/7), align + size+(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size+(size*1/7), align + size*7-(size*2/7), align + size+(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size+(size*2/7), align + size*7+(size*1/7), align + size+(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size+(size*1/7), align + size*7+(size*2/7), align + size+(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size*7-(size*2/7), align + size*7-(size*1/7), align + size*7-(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size*7-(size*1/7), align + size*7-(size*2/7), align + size*7-(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size*7-(size*2/7), align + size*7+(size*1/7), align + size*7-(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size*7-(size*1/7), align + size*7+(size*2/7), align + size*7-(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size*7+(size*2/7), align + size*7-(size*1/7), align + size*7+(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size*7+(size*1/7), align + size*7-(size*2/7), align + size*7+(size*1/7), align + size*7-(size*1/7));
g.drawLine(align + size*7+(size*2/7), align + size*7+(size*1/7), align + size*7+(size*1/7), align + size*7+(size*1/7));
g.drawLine(align + size*7+(size*1/7), align + size*7+(size*2/7), align + size*7+(size*1/7), align + size*7+(size*1/7));
//画卒、兵位
g.drawLine(align + size*0+(size*2/7), align + size*3-(size*1/7), align + size*0+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*0+(size*1/7), align + size*3-(size*2/7), align + size*0+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*0+(size*2/7), align + size*3+(size*1/7), align + size*0+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*0+(size*1/7), align + size*3+(size*2/7), align + size*0+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*2-(size*2/7), align + size*3-(size*1/7), align + size*2-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*2-(size*1/7), align + size*3-(size*2/7), align + size*2-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*2-(size*2/7), align + size*3+(size*1/7), align + size*2-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*2-(size*1/7), align + size*3+(size*2/7), align + size*2-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*2+(size*2/7), align + size*3-(size*1/7), align + size*2+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*2+(size*1/7), align + size*3-(size*2/7), align + size*2+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*2+(size*2/7), align + size*3+(size*1/7), align + size*2+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*2+(size*1/7), align + size*3+(size*2/7), align + size*2+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*4-(size*2/7), align + size*3-(size*1/7), align + size*4-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*4-(size*1/7), align + size*3-(size*2/7), align + size*4-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*4-(size*2/7), align + size*3+(size*1/7), align + size*4-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*4-(size*1/7), align + size*3+(size*2/7), align + size*4-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*4+(size*2/7), align + size*3-(size*1/7), align + size*4+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*4+(size*1/7), align + size*3-(size*2/7), align + size*4+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*4+(size*2/7), align + size*3+(size*1/7), align + size*4+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*4+(size*1/7), align + size*3+(size*2/7), align + size*4+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*6-(size*2/7), align + size*3-(size*1/7), align + size*6-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*6-(size*1/7), align + size*3-(size*2/7), align + size*6-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*6-(size*2/7), align + size*3+(size*1/7), align + size*6-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*6-(size*1/7), align + size*3+(size*2/7), align + size*6-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*6+(size*2/7), align + size*3-(size*1/7), align + size*6+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*6+(size*1/7), align + size*3-(size*2/7), align + size*6+(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*6+(size*2/7), align + size*3+(size*1/7), align + size*6+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*6+(size*1/7), align + size*3+(size*2/7), align + size*6+(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*8-(size*2/7), align + size*3-(size*1/7), align + size*8-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*8-(size*1/7), align + size*3-(size*2/7), align + size*8-(size*1/7), align + size*3-(size*1/7));
g.drawLine(align + size*8-(size*2/7), align + size*3+(size*1/7), align + size*8-(size*1/7), align + size*3+(size*1/7));
g.drawLine(align + size*8-(size*1/7), align + size*3+(size*2/7), align + size*8-(size*1/7), align + size*3+(size*1/7));
// ------- --------------------下面兵位--------------------------------------
g.drawLine(align + size*0+(size*2/7), align + size*6-(size*1/7), align + size*0+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*0+(size*1/7), align + size*6-(size*2/7), align + size*0+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*0+(size*2/7), align + size*6+(size*1/7), align + size*0+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*0+(size*1/7), align + size*6+(size*2/7), align + size*0+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*2-(size*2/7), align + size*6-(size*1/7), align + size*2-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*2-(size*1/7), align + size*6-(size*2/7), align + size*2-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*2-(size*2/7), align + size*6+(size*1/7), align + size*2-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*2-(size*1/7), align + size*6+(size*2/7), align + size*2-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*2+(size*2/7), align + size*6-(size*1/7), align + size*2+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*2+(size*1/7), align + size*6-(size*2/7), align + size*2+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*2+(size*2/7), align + size*6+(size*1/7), align + size*2+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*2+(size*1/7), align + size*6+(size*2/7), align + size*2+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*4-(size*2/7), align + size*6-(size*1/7), align + size*4-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*4-(size*1/7), align + size*6-(size*2/7), align + size*4-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*4-(size*2/7), align + size*6+(size*1/7), align + size*4-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*4-(size*1/7), align + size*6+(size*2/7), align + size*4-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*4+(size*2/7), align + size*6-(size*1/7), align + size*4+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*4+(size*1/7), align + size*6-(size*2/7), align + size*4+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*4+(size*2/7), align + size*6+(size*1/7), align + size*4+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*4+(size*1/7), align + size*6+(size*2/7), align + size*4+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*6-(size*2/7), align + size*6-(size*1/7), align + size*6-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*6-(size*1/7), align + size*6-(size*2/7), align + size*6-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*6-(size*2/7), align + size*6+(size*1/7), align + size*6-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*6-(size*1/7), align + size*6+(size*2/7), align + size*6-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*6+(size*2/7), align + size*6-(size*1/7), align + size*6+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*6+(size*1/7), align + size*6-(size*2/7), align + size*6+(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*6+(size*2/7), align + size*6+(size*1/7), align + size*6+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*6+(size*1/7), align + size*6+(size*2/7), align + size*6+(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*8-(size*2/7), align + size*6-(size*1/7), align + size*8-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*8-(size*1/7), align + size*6-(size*2/7), align + size*8-(size*1/7), align + size*6-(size*1/7));
g.drawLine(align + size*8-(size*2/7), align + size*6+(size*1/7), align + size*8-(size*1/7), align + size*6+(size*1/7));
g.drawLine(align + size*8-(size*1/7), align + size*6+(size*2/7), align + size*8-(size*1/7), align + size*6+(size*1/7));
//书写“楚河汉界”
Font font=new Font("楷体",Font.BOLD|Font.ITALIC,34);
g.setColor(new Color(137,16,10));
g.setFont(font);
g.drawString("楚", align + size*1, align+size*4+size*3/4);
g.drawString("河", align + size*2, align+size*4+size*3/4);
g.drawString("汉", align + size*5+size/2, align+size*4+size*3/4);
g.drawString("界", align + size*6+size/2, align+size*4+size*3/4);
}
}