java小程序之控制台字符动画的实现

说在前面

大一软件工程在读,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小程序之控制台字符动画实现的文章就介绍到这了,更多相关java控制台字符动画内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java从控制台接受输入字符的简单方法

    创建一个类,在该类的主方法中创建Scanner扫描起来封装System类的in输入流,然后提示用户输入身份证号码,并输入身份证号码的位数. 代码如下: 复制代码 代码如下: import java.util.Scanner;public class InputCode {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);// 创建输入流扫描器        Sy

  • Java中关于控制台读取数字或字符串的方法

    Java中,int a = System.in.read();此句读取的是一个字符,然后返回的是对应字符的ASCII, 例如,控制台输入123,只读取一个字符1,对应的ASCII为49,则输出49,输入abc则读取a,对应的ASCII是97,则输出97: Scanner sc = new Scanner(System.in) int n = sc.nextInt();从控制台读取一个数. String c = sc.next();//从控制台读取字符串 以上就是小编为大家带来的Java中关于控制

  • java小程序之控制台字符动画的实现

    说在前面 大一软件工程在读,java萌新一只,第一次写博客,技术很菜勿喷.如有错误欢迎指出! 这个小程序是给朋友的生日礼物,耗时半天,实际写起来碰到的知识点和困难还挺多,故发出来分享一下. 程序效果 可设置画布尺寸,添加图形元件,设置元件坐标和效果.元件闪烁效果,横向滚动效果. 代码呈现 图形元件父类 public class Shape implements IShape{ String shape[];//图形形状字符串 String shape_flicker[];//闪烁形状字符串 in

  • 微信小程序开发animation心跳动画效果

    本文实例为大家分享了微信小程序开发animation心跳动画,供大家参考,具体内容如下 1.微信小程序开发animation心跳动画 wxml文件中: <view class="bottomViewItem"> <view class="bottomMiddleHeaderView" bindtap="voteClick" data-id="value"> <view class="bo

  • 微信小程序按钮点击动画效果的实现

    动画效果如下: GIF看起来可能会有点卡 wxml <view class="confirm bubble">确定</view> wxss .confirm{ width: 325rpx; height: 80rpx; background: #07c160; border-radius: 6rpx; font-size: 30rpx; color: #fff; line-height: 80rpx; text-align: center; } .bubble{

  • mpvue实现小程序签到金币掉落动画(api实现)

    这里使用小程序自带的api来实现,用小程序来写动画的恶心点在于,没有帧,只能用setimeout 来作为帧来使用, 下面是实现代码, 下面是简单用div代替了图片,需要什么图片,可以自行替换相应的div即可 需要变成原生小程序,则需要修改一下代码的写法 效果图: 创建金币动画组件 clockAnimation.vue <template> <div class="container" v-if='isShow'> <!-- 创建金币对象 --> &l

  • C++&&Opencv实现控制台字符动画的方法

    原理概述 首先利用opencv获取到图片中特定像素点的颜色 根据颜色所处的范围选择不同的字符 再在控制台的特定位置打印即可 重点就是获取像素点的颜色 获取图像中某像素点的颜色图片载入变量 opencv中可使用Mat类型来储存图片 Mat img; img = imread("图片路径"); 将图片转化为灰度图 为什么要把图片转为灰度图呢? 主要是为了使图片颜色单一 减少后面条件判断的工作量 不过也可以不去做这一步的处理 Mat gimg; //img转化为灰度图后输出到gimg中 cv

  • 小程序实现点击动画效果

    本文实例为大家分享了小程序实现点击动画效果的具体代码,供大家参考,具体内容如下 今天接到一个小程序优化需求,要实现一个点击的动画效果 考虑实现方法,使用css的transition属性来进行实现,点击的时候给css新增一个active属性,就能实现这个效果了 // html  <view class="list-box">  <view class="list {{item.check ? 'active' : ''}}" wx:for="

  • java小程序火锅店点餐系统

    目录 一.前言介绍 二.系统功能分析 2.1管理员功能分析 2.2用户功能分析 3.3系统功能结构设计 三.小程序端 3.1用户信息管理功能的详细界面实现 3.2菜品展示功能的详细界面 3.3点餐功能的详细实现 3.4预定餐桌功能的详细实现 3.5购物车功能的实现 3.6订单管理功能的详细实现 3.7我的管理功能的详细实现 四.管理员功能模块 4.1用户登录功能的详细实现 4.2菜品管理功能的详细实现 4.3餐桌管理功能的详细实现 4.4餐桌预定管理功能的详细实现 4.5系统功能的详细实现 4.

  • Java小程序求圆的周长和面积实例 原创

    在Java学习的过程中,需要经常拿一些小程序来练习.今天,我们就来看看一个利用蒙特卡洛算法计算圆周率,并输出指定半径的圆的周长和面积的小程序. 代码如下: /** * auther 司机 */import java.util.Scanner; public class Test011 {  static double MontePI(int n) {   double PI;   double x, y;   int i, sum;   sum = 0;   for (i = 1; i < n;

  • 微信小程序开发之麦克风动画 帧动画 放大 淡出

    想做个录音机,第一步就卡在麦克风动画这里了. 先上gif.再吐槽. ① 上面gif中声波的动画是个半成品.没有循环播放.在微信小程序的开发文档上找了很久,也没找到循环模式的参数设置.用setInterval()并不执行动画.我在微信小程序文档 动画最下面找到这么一行字.这个锅是不是可以甩出去了? ps:如果有同学能实现动画循环,一定告诉我. ② 麦克风里面是个帧动画.没有前端的基础,只能用非主流的办法凑合了. 用wx:if{{}}判断js中定义的值是不是等于图片对应的数字来控制图片的显示和隐藏.

  • 微信小程序实现九宫格翻牌动画

    本文实例为大家分享了微信小程序实现九宫格翻牌的具体代码,供大家参考,具体内容如下 9宫格翻牌需求: 1.进来时平铺9个格子显示 2.点击开始抽奖时洗牌动作 3.洗完牌后呈现9个都是未翻牌的状态 4.点击任意一个牌子,有翻转的动作 5.翻转结束后出现中奖的弹窗 555,当时真的一点一点调动画 敲黑板~ wxml: <view class="main_border"> <view class="inside_border viewport-flip"&

随机推荐