下面我将和大家分享一个用Java做的简单小程序,用来实现控制台字符动画的效果。本文供大家参考,如有错误或是考虑不周的地方,还望大家不吝指出。

程序效果



可设置画布尺寸,添加图形元件,设置元件坐标和效果。元件闪烁效果,横向滚动效果。

代码呈现

图形元件父类

public class Shape implements IShape{String shape[];//图形形状字符串String shape_flicker[];//闪烁形状字符串int height,width;//高、宽int x,y;//位置坐标String id;//元件id,用于制作动画效果时获取元件public Shape(int x,int y,String id) {//构造方法初始化this.x=x;this.y=y;this.id=id;}public Shape(String id) {this(0,0,id);}
}

图形绘画工具类

import java.util.HashMap;public class Shapes {//存放图形元件int width,height;//画布大小public static String canvas[];//画布图像字符串HashMap<String, Shape> ShapeMap=new HashMap<String,Shape>();//图形元件容器,添加到画布的图形都会存放在这public Shapes(int width ,int height) {//初始化空白画布this.width=width;this.height=height;canvas=new String[height];for(int h=0;h<height;h++) {String line="";for(int w=0;w<width;w++){line+=" ";}canvas[h]=line;}}public void draw(Shape myShape) {//将元件添加到画布中int px,py;px=myShape.x;py=myShape.y;int count=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(String line :myShape.shape) {char Line[]=canvas[py+count].toCharArray();for(int i=px;i<myShape.width+px;i++) {Line[i]=line.charAt(i-px);}canvas[py+count]=String.valueOf(Line);count++;}}public void drawCanvas() {//绘制画布System.out.print(" ");for(int i=0;i<width;i++) {System.out.print(i%10);}System.out.println();int count=0;for(String line: canvas) {System.out.println(count+line);count++;}}
}

动画类

import java.io.IOException;public class Animation {//用于动画效果long timer;//计时器int rolled;//滚动计数器private Shapes shapes;//图形工具public Animation() {timer=0;rolled=0;init();}public void flicker(String id,int interval) {//闪烁效果,id为元件的id,interval是闪烁间隔Shape myShape=shapes.ShapeMap.get(id);String shape_flicker[]=myShape.shape.clone(); //闪烁图像for(int i=0;i<shape_flicker.length;i++) {shape_flicker[i]=shape_flicker[i].replaceAll("O","-");//将O替换为-实现闪烁效果}   myShape.shape_flicker=shape_flicker;//绘制图像if(timer%interval==0) {int px,py;px=myShape.x;py=myShape.y;int count=0;if((timer/interval)%2==0) {for(String line :myShape.shape_flicker) {char Line[]=Shapes.canvas[py+count].toCharArray();for(int i=px;i<myShape.width+px;i++) {Line[i]=line.charAt(i-px);}Shapes.canvas[py+count]=String.valueOf(Line);count++;}}else {for(String line :myShape.shape) {char Line[]=Shapes.canvas[py+count].toCharArray();for(int i=px;i<myShape.width+px;i++) {Line[i]=line.charAt(i-px);}Shapes.canvas[py+count]=String.valueOf(Line);count++;}}}}public void roll(String id,int from ,int to,int speed) {//滚动效果,id为元件id,from,to为起始和终止点,speed为滚动速度rolled+=speed;Shape myShape=shapes.ShapeMap.get(id);String shape_roll[]=myShape.shape.clone();myShape.x=from+rolled%(to-from);int px,py;px=myShape.x;py=myShape.y;int count=0;System.out.println("rolled:"+rolled+"px:"+px);for(String line :shape_roll) {char Line[]=Shapes.canvas[py+count].toCharArray();for(int i=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++;}}private void init() {//初始化画布,添加元件shapes=new Shapes(120,50);shapes.draw(new Shape_Text(5,10,"HB1"));shapes.draw(new Shape_Nineteen(52,21,"Nt1"));shapes.draw(new Shape_Cake(45,30,"Cake1"));shapes.draw(new Shape_Bubble(10,25,"BB1"));shapes.draw(new Shape_Bubble(90,25,"BB2"));}public void play(int sleep) throws  IOException, 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);}}public static void cls() throws IOException, InterruptedException//清屏方法(ide中无效){new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); // 清屏命令}
}

主类

import java.io.IOException;public class Main {//启动动画public static void main(String args[]) throws InterruptedException, IOException {Animation animator=new Animation();animator.play(30);}}

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

public class Shape_Text extends Shape{//继承图形父类String s[]= {//字符图像"==================================================================================================","= O    O   OO    OOOO   OOOO  O    O       OOOOO  OOOOO OOOOOO OOOOOO O    O OOOOO    OO   O    O =","= O    O  O  O  O    O O    O O    O       O    O   O   O    O   OO   O    O O    O  O  O  O    O =",  "= OOOOOO O    O O    O O    O O    O       O    O   O   OOOOOO   OO   OOOOOO O    O O    O O    O =",  "= O    O OOOOOO OOOOO  OOOOO   OOOO        OOOOO    O   O O      OO   O    O O    O OOOOOO  OOOO  =",  "= O    O O    O O      O         O         O    O   O   O  O     OO   O    O O    O O    O    O   =",  "= O    O O    O O      O         O         OOOOOO OOOOO O   O    OO   O    O OOOOO  O    O    O   =","=================================================================================================="};public Shape_Text(int i, int j,String id) {super(i,j,id);this.shape=s;this.height=shape.length;this.width=shape[0].length();}public Shape_Text(String id) {this(0,0,id);}
}

掌财社:使用Java实现控制台字符动画的小程序相关推荐

  1. 掌财社:原材料涨价有多猛?上游一天一价中下游艰难抉择

    "所有板材的报价,仅限于当日当时确认并付款,没有付款的一律作废重报." "最近都忙着一个事--谈判,和各式的供应商谈判." "去年就提了要涨,但一直压 ...

  2. java小程序:控制台字符动画

    java小程序:控制台字符动画 说在前面 程序效果 代码呈现 说在前面 大一软件工程在读,java萌新一只,第一次写博客,技术很菜勿喷.如有错误欢迎指出! 这个小程序是给朋友的生日礼物,耗时半天,实际 ...

  3. java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览

    详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘  要 本 ...

  4. 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程)

    本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程,详细内容可私信交流) (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷 ...

  5. 磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序

    本文由云+社区发表 作者:腾讯云数据库 随着云计算和数据库技术的发展,数据库正在变得越来越强大.数据库的性能如处理速度.对高并发的支持在节节攀升,同时分布式.实时的数据分析.兼容主流数据库等强大的性能 ...

  6. java计算机毕业设计基于安卓/微信小程序的大学生心理测试咨询管理系统app

    项目介绍 随着社会经济的发展,医疗卫生事业取得了巨大进步,在健康中心理健康占据越来越重要的地位,什么是心理健康:心理健康,从广义上讲,是指一种高效而满意的.持续的心理状态.从狭义上讲,心理健康是指人的 ...

  7. 基于java springboot的小说阅读微信小程序含后台管理系统源码

    系统运行环境 开发工具 eclipse(idea),mysql5.7(大于5.5),navicat,小程序开发工具 硬件要求 windows操作系统 cpu:2.4GHz 内存:4G 硬盘:100G ...

  8. java毕业设计儿童疫苗接种提醒系统小程序服务端Mybatis+系统+数据库+调试部署

    java毕业设计儿童疫苗接种提醒系统小程序服务端Mybatis+系统+数据库+调试部署 java毕业设计儿童疫苗接种提醒系统小程序服务端Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构 ...

  9. java老年人健康预警系统系统uniapp小程序

    考虑到实际生活中在 适老化老人健康预警微信小程序管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分. (a) 管理员:管理员使用本系统涉到的功能主要有:个人中心.老人管理 ...

最新文章

  1. js 动态加载select触发事件
  2. python 多态 知乎_Python函数接口的一些设计心得
  3. Java异常简单介绍
  4. Elasticsearch索引分析
  5. Javascript 创建对象方法的总结
  6. Stack Overflow 2016年对50,000名开发人员进行的调查得出的见解
  7. ❤ CSDN精心打造一款插件,让你的浏览器:解锁黑科技、个性十足、沉浸式体验 ❤
  8. ubuntu 安装搜狗输入法_超详细的ubuntu14.04安装搜狗输入法教程
  9. Linux的TCP接口介绍
  10. gx works2 存储器空间或桌面堆栈不足_2020淮北Gx螺旋输送机价格厂家出售
  11. (UE4 4.20)UE4 碰撞(Collision)之光线检测(RayTrace )
  12. Python实现汉字人名按拼音或笔画顺序排序
  13. pandas学习-中期测试
  14. yolov3的weights文件获取方法(yolov3-spp.weights等等)
  15. 阿里天池离线赛_移动推荐算法
  16. 【Java 数据结构】树和二叉树
  17. 【Verilog】parameter
  18. [FPGA 日常记录] #5 常见 FPGA 论坛排名 / 按活跃度
  19. QML Repeater
  20. 把矩形的四个顶点按照一定的顺序排好(左上、右上、右下、左下,符合人的视角).

热门文章

  1. sftp连接失败linux系统,本地电脑用Flashfxp连接SFTP提示连接失败
  2. java重写父类方法_重写父类方法
  3. c语言版计算坐标方位角,C语言辛普森道路测量正反算,秒杀5800计算器
  4. pythonmayavi三维建模可视化_Mayavi-更方便的可视化
  5. 三流Mayavi操作-Mayav-2.1.2-图形修饰函数 Figure decoration functions
  6. 浪潮nf5280m5安装linux网卡,NF5280M5 – 常见问题
  7. Android获取系统版本号、软件版本号
  8. 图像的频域--学习笔记
  9. Java基础知识 变量 基本类型 类型转换 标识符 关键字 运算符 循环 分支结构 JVM
  10. java百度转高德,百度、高德、Googe经纬度转换