这篇文章主要介绍“如何使用Java实现控制台字符动画的小程序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Java实现控制台字符动画的小程序”文章能帮助大家解决问题。

代码呈现

图形元件父类

publicclassShapeimplementsIShape{Stringshape[];//图形形状字符串Stringshape_flicker[];//闪烁形状字符串intheight,width;//高、宽intx,y;//位置坐标Stringid;//元件id,用于制作动画效果时获取元件publicShape(intx,inty,Stringid){//构造方法初始化this.x=x;this.y=y;this.id=id;}publicShape(Stringid){this(0,0,id);}}

图形绘画工具类

importjava.util.HashMap;publicclassShapes{//存放图形元件intwidth,height;//画布大小publicstaticStringcanvas[];//画布图像字符串HashMap<String,Shape>ShapeMap=newHashMap<String,Shape>();//图形元件容器,添加到画布的图形都会存放在这publicShapes(intwidth,intheight){//初始化空白画布this.width=width;this.height=height;canvas=newString[height];for(inth=0;h<height;h++){Stringline="";for(intw=0;w<width;w++){line+="";}canvas[h]=line;}}publicvoiddraw(ShapemyShape){//将元件添加到画布中intpx,py;px=myShape.x;py=myShape.y;intcount=0;if(myShape.height+py>height-1){System.out.println("超出画布边界!!");return;}if(myShape.width+px>width-1){System.out.println("超出画布边界!!");return;}ShapeMap.put(myShape.id,myShape);//将元件添加到容器中for(Stringline:myShape.shape){charLine[]=canvas[py+count].toCharArray();for(inti=px;i<myShape.width+px;i++){Line[i]=line.charAt(i-px);}canvas[py+count]=String.valueOf(Line);count++;}}publicvoiddrawCanvas(){//绘制画布System.out.print("");for(inti=0;i<width;i++){System.out.print(i%10);}System.out.println();intcount=0;for(Stringline:canvas){System.out.println(count+line);count++;}}}

动画类

importjava.io.IOException;publicclassAnimation{//用于动画效果longtimer;//计时器introlled;//滚动计数器privateShapesshapes;//图形工具publicAnimation(){timer=0;rolled=0;init();}publicvoidflicker(Stringid,intinterval){//闪烁效果,id为元件的id,interval是闪烁间隔ShapemyShape=shapes.ShapeMap.get(id);Stringshape_flicker[]=myShape.shape.clone();//闪烁图像for(inti=0;i<shape_flicker.length;i++){shape_flicker[i]=shape_flicker[i].replaceAll("O","-");//将O替换为-实现闪烁效果}myShape.shape_flicker=shape_flicker;//绘制图像if(timer%interval==0){intpx,py;px=myShape.x;py=myShape.y;intcount=0;if((timer/interval)%2==0){for(Stringline:myShape.shape_flicker){charLine[]=Shapes.canvas[py+count].toCharArray();for(inti=px;i<myShape.width+px;i++){Line[i]=line.charAt(i-px);}Shapes.canvas[py+count]=String.valueOf(Line);count++;}}else{for(Stringline:myShape.shape){charLine[]=Shapes.canvas[py+count].toCharArray();for(inti=px;i<myShape.width+px;i++){Line[i]=line.charAt(i-px);}Shapes.canvas[py+count]=String.valueOf(Line);count++;}}}}publicvoidroll(Stringid,intfrom,intto,intspeed){//滚动效果,id为元件id,from,to为起始和终止点,speed为滚动速度rolled+=speed;ShapemyShape=shapes.ShapeMap.get(id);Stringshape_roll[]=myShape.shape.clone();myShape.x=from+rolled%(to-from);intpx,py;px=myShape.x;py=myShape.y;intcount=0;System.out.println("rolled:"+rolled+"px:"+px);for(Stringline:shape_roll){charLine[]=Shapes.canvas[py+count].toCharArray();for(inti=from;i<to;i++){if(i>=px&&i<=to&&i<px+line.length()){Line[i]=line.charAt(i-px);}else{Line[i]='';}}Shapes.canvas[py+count]=String.valueOf(Line);count++;}}privatevoidinit(){//初始化画布,添加元件shapes=newShapes(120,50);shapes.draw(newShape_Text(5,10,"HB1"));shapes.draw(newShape_Nineteen(52,21,"Nt1"));shapes.draw(newShape_Cake(45,30,"Cake1"));shapes.draw(newShape_Bubble(10,25,"BB1"));shapes.draw(newShape_Bubble(90,25,"BB2"));}publicvoidplay(intsleep)throwsIOException,InterruptedException{//播放动画,sleep设置刷新间隔while(true){if(timer>300){timer=0;}cls();if(timer<100){flicker("HB1",5);}else{roll("HB1",0,110,1);}flicker("Nt1",10);shapes.drawCanvas();timer++;Thread.sleep(sleep);System.out.println(timer);}}publicstaticvoidcls()throwsIOException,InterruptedException//清屏方法(ide中无效){newProcessBuilder("cmd","/c","cls").inheritIO().start().waitFor();//清屏命令}}

主类

importjava.io.IOException;publicclassMain{//启动动画publicstaticvoidmain(Stringargs[])throwsInterruptedException,IOException{Animationanimator=newAnimation();animator.play(30);}}

具体图形子类(Happy Birthday文字)

publicclassShape_TextextendsShape{//继承图形父类Strings[]={//字符图像"==================================================================================================","=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=","=OOOOOOOOOOOOOOOOOOOOOOOOO=","=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=","=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=","=OOOOOOOOOOOOOOOOOOOOO=","=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=","=================================================================================================="};publicShape_Text(inti,intj,Stringid){super(i,j,id);this.shape=s;this.height=shape.length;this.width=shape[0].length();}publicShape_Text(Stringid){this(0,0,id);}}

关于“如何使用Java实现控制台字符动画的小程序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。