這個比較簡單,沒啥東西,就是每列開始行的選擇,有點繞彎,我就註釋下GraphicsPanel吧,主要的繪制工作都在這個類裏面
private?class?GraphicsPanel?extends?JPanel?{public?void?paint(Graphics?g)?{
Graphics2D?g2d?=?(Graphics2D)?g;
g2d.?setFont?(getFont?().?deriveFont?(Font.?BOLD));
g2d.?setColor(Color.?BLACK);
g2d.?fillRect?(0,?0,?screenSize.?width,?screenSize.?height);//?設置背景色為黑色
int?currentColumn?=?0;
for?(int?x?=?0;?x?<?screenSize.width;?x?+=?gap)?{
int?endPos?=?posArr[currentColumn];?//獲得開始行位置
g2d.?setColor(Color.?GREEN);
g2d.drawString(String.valueOf(getChr()),?x,?endPos?*?gap);?//畫出隨機開始行的字符
int?cg?=?0;//初始黑色
for?(int?j?=?endPos?-16;?j?<?endPos;?j++)?{//隨機行逐列向上16行,為循環開始行
cg?+=?15;?//漸變色15遞增,255為green
if?(cg?>?255)?{
cg?=?255;
}
g2d.setColor(new?Color(0,?cg,?0));
g2d.drawString(String.valueOf(getChr()),?x,?j?*?gap);//畫出隨機行後的15行字符,顏色從黑色漸變成綠色,逐行增加
}
posArr[currentColumn]?+=?random.nextInt(5);?//下落距離最快為4
if?(posArr[currentColumn]?*?gap?>?getHeight())?{?//如果行數位置大於屏幕高度,從新獲取合適的行
posArr[currentColumn]?=?random.nextInt(lines);
}
currentColumn++;//下壹列獲取隨機行
}