黑马程序员技术交流社区

标题: 学完IO 做了点小东西 控制台动画BadApple 感兴趣的进来~ [打印本页]

作者: a986875894    时间: 2014-12-29 19:42
标题: 学完IO 做了点小东西 控制台动画BadApple 感兴趣的进来~
一楼先上效果图

QQ截图20141227150510.png (78.53 KB, 下载次数: 48)

QQ截图20141227150510.png

QQ截图20141227150535.png (40.34 KB, 下载次数: 51)

QQ截图20141227150535.png

QQ截图20141227150554.png (108.77 KB, 下载次数: 54)

QQ截图20141227150554.png

QQ截图20141227150604.png (126.05 KB, 下载次数: 50)

QQ截图20141227150604.png

作者: a986875894    时间: 2014-12-29 19:45
先说一下原理吧 简单来说就是每一帧连续的显示出来 显示的速度非常快 利用人眼的视觉暂留现象造成了动画的效果
需要准备的工具 jdk1.5以上 MyEclipse或者Eclipse 或者EditPlus  字符画截取工具 百度去搜索 帧数截取工具 BadApple的动画百度下载 不要弹幕版本的 就是这些东西
作者: a986875894    时间: 2014-12-29 19:49
首先把动画的每一帧截成图片 然后用工具转化成字符画 大概是六千多张图片 转化成字符画也就是六千多个文本文档
然后利用Java的IO 知识把每一个txt文本读取显示到控制台上即可 但是这里有一个问题 就是显示过程中会疯狂的下滚 所以需要打印一帧清一次屏幕在打印一帧 但是Java是没有清屏的方法的 所以需要JNI 也就是java的本地调用 调用其他语言写的清屏函数 直接控制系统当然首选调用C语言清屏啦 然后显示一帧清一次屏幕就好啦 大概就是这么多 楼下贴code
作者: 后悔药    时间: 2014-12-29 19:52
这个是技术帝啊,顶一下
作者: 陈思伟    时间: 2014-12-29 19:53
顶个....
作者: a986875894    时间: 2014-12-29 19:57
贴上源码 懒得 写注释了。。我最讨厌的就是给看没有注释的代码和自己要写注释0.0  音乐播放是内部API 可能会警告 或者报错 不过没关系。。。去掉就好了。。
  1. import java.io.*;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import sun.audio.AudioStream;
  6. import sun.audio.ContinuousAudioDataStream;

  7. class Test {
  8.         public native void cls();// 左方的native是通知Java这个函数会使用到外部函数

  9.         static {
  10.                 System.loadLibrary("ClearScreen");
  11.                 // 左方的代码代表我要载入clsTest.dll的动态链接

  12.         }
  13. }
  14. class PlayMusic implements Runnable {
  15.         public void run() {
  16.                 GameMusicTest.playSingleMusic("D:/mianxiangduixiang/音乐19.wav");
  17.         }
  18. }
  19. class disPlay {
  20.         public static void show() {
  21.                 BufferedReader br = null;
  22.                 BufferedWriter bw = null;
  23.                 boolean bool = true;
  24.                 final Test a = new Test();
  25.                 File file = null;
  26.                 int fileNumble = 0;
  27.                 while (bool) {
  28.                         if (fileNumble < 10) {
  29.                                 file = new File(
  30.                                                 "F:/aaa/TestBadApple/ASCII-BadApple-dqw19880428.blog.163.com.mkv000"
  31.                                                                 + fileNumble + ".txt");
  32.                         } else if (fileNumble < 100) {
  33.                                 file = new File(
  34.                                                 "F:/aaa/TestBadApple/ASCII-BadApple-dqw19880428.blog.163.com.mkv00"
  35.                                                                 + fileNumble + ".txt");
  36.                         } else if (fileNumble < 1000) {
  37.                                 file = new File(
  38.                                                 "F:/aaa/TestBadApple/ASCII-BadApple-dqw19880428.blog.163.com.mkv0"
  39.                                                                 + fileNumble + ".txt");
  40.                         } else if (fileNumble >= 1000 && fileNumble <= 6570) {
  41.                                 file = new File(
  42.                                                 "F:/aaa/TestBadApple/ASCII-BadApple-dqw19880428.blog.163.com.mkv"
  43.                                                                 + fileNumble + ".txt");
  44.                         } else {
  45.                                 if (br != null) {
  46.                                         try {
  47.                                                 br.close();
  48.                                         } catch (IOException e) {
  49.                                                 System.out.println(e.toString());
  50.                                         }
  51.                                 }
  52.                                 if (bw != null) {
  53.                                         try {
  54.                                                 bw.close();
  55.                                         } catch (IOException e) {
  56.                                                 System.out.println(e.toString());
  57.                                         }
  58.                                 }
  59.                                 break;
  60.                         }
  61.                         try {
  62.                                 br = new BufferedReader(new FileReader(file));
  63.                                 bw = new BufferedWriter(new OutputStreamWriter(System.out));
  64.                                 String str = null;
  65.                                 while ((str = br.readLine()) != null) {
  66.                                         bw.write(str);
  67.                                         bw.newLine();
  68.                                         bw.flush();
  69.                                 }

  70.                         } catch (IOException e) {
  71.                                 System.out.println(e.toString());
  72.                         }
  73.                         try {
  74.                                 Thread.sleep(1);
  75.                         } catch (Exception e) {

  76.                         }

  77.                         a.cls();
  78.                         fileNumble = fileNumble + 2;
  79.                 }
  80.         }
  81. }
  82. class BadApple {
  83.         public static void main(String[] args) {
  84.                 GameMusicTest.playSingleMusic("D:/mianxiangduixiang/badapple.mid");
  85.                 PlayMusic pm = new PlayMusic();
  86.                 Thread t = new Thread(pm);
  87.                 t.start();
  88.                 disPlay.show();
  89.         }
  90. }
  91. /**
  92. * Copyright (C), 2006-2010, ChengDu info. Co., Ltd. FileName: Music.java
  93. * 此类为音乐类,用于播放各种音乐
  94. *
  95. * @author ls
  96. * @Date 2010-4-1
  97. * @version 1.00
  98. */
  99. class GameMusicTest extends Thread {

  100.         private static AudioStream play_music;
  101.         private static ContinuousAudioDataStream musicStream;

  102.         /**
  103.          * 播放单音音频
  104.          *
  105.          * @param musicFile
  106.          *            单音音频文件路径
  107.          */
  108.         public static void playSingleMusic(String musicFile) {
  109.                 FileInputStream fin = null;
  110.                 try {
  111.                         fin = new FileInputStream(musicFile);// 创建文件读入流
  112.                         play_music = new sun.audio.AudioStream(fin);// 创建音频流

  113.                         sun.audio.AudioPlayer.player.start(play_music);// 播放音乐

  114.                 } catch (Exception e) {
  115.                         System.out.println(e);
  116.                 }

  117.         }

  118.         /**
  119.          * 循环播放音频
  120.          *
  121.          * @param musicFile
  122.          */
  123.         public static void playLoopMusic(String musicFile) {
  124.                 stopLoopMusic();
  125.                 try {
  126.                         FileInputStream musicInputStream = new FileInputStream(musicFile);
  127.                         sun.audio.AudioStream play_Loopmusic = new sun.audio.AudioStream(
  128.                                         musicInputStream);
  129.                         musicStream = new ContinuousAudioDataStream(
  130.                                         play_Loopmusic.getData());

  131.                         sun.audio.AudioPlayer.player.start(musicStream);
  132.                 } catch (FileNotFoundException e) {
  133.                         // TODO Auto-generated catch block
  134.                         e.printStackTrace();
  135.                 } catch (IOException e) {
  136.                         // TODO Auto-generated catch block
  137.                         e.printStackTrace();
  138.                 }
  139.         }

  140.         /**
  141.          * 停止播放循环音频
  142.          */
  143.         public static void stopLoopMusic() {
  144.                 if (musicStream != null) {
  145.                         sun.audio.AudioPlayer.player.stop(musicStream);

  146.                         try {
  147.                                 musicStream.close();
  148.                         } catch (IOException e) {
  149.                                 // TODO Auto-generated catch block
  150.                                 e.printStackTrace();
  151.                         }
  152.                 }
  153.         }

  154.         /**
  155.          * 停止播放单音音频
  156.          *
  157.          */
  158.         public static void stopSingleMusic() {
  159.                 sun.audio.AudioPlayer.player.stop(play_music);
  160.         }

  161. }
复制代码

作者: a986875894    时间: 2014-12-29 19:58
音乐这部分代码我也不是很懂 在研究 我们辅导老师帮忙找的。。找了好久 好感动!
作者: Eagle    时间: 2014-12-29 20:10
这个牛。顶一个啊。这么多文件啊。。。厄滴神啦。。。。。:o。。
作者: Afridoce    时间: 2014-12-29 21:03
顶一个!!!!
作者: 新鲜感    时间: 2014-12-29 21:05
好厉害的样子 。。
作者: 小猪快跑    时间: 2014-12-29 21:09
试试跑一下:loveliness:
作者: a986875894    时间: 2014-12-30 12:15
小猪快跑 发表于 2014-12-29 21:09
试试跑一下

可能跑不起来。。。你没有那些文本文件 还有没写本地调用的函数:)
作者: a986875894    时间: 2014-12-30 12:19
小猪快跑 发表于 2014-12-29 21:09
试试跑一下

可能跑不起来。。。你没有那些文本文件 还有没写本地调用的函数:)
作者: 李增宽    时间: 2014-12-30 23:36
不明觉厉
作者: 努力的橘子    时间: 2014-12-30 23:40
哇0.0顶一个顶一个
作者: zqbemail    时间: 2014-12-31 00:50
崇拜啊。。我什么时候能有这水准就好了。
作者: zhiyi    时间: 2014-12-31 09:05
哈哈,好厉害,不过这画面感觉回到了解放前
作者: yedaiwang    时间: 2014-12-31 09:11
真是牛逼啊
作者: dandan520    时间: 2015-1-1 02:03
(⊙o⊙)?,还能这样
作者: 精英通    时间: 2015-1-1 10:10
确实厉害,试跑了一下,跑不出来啊...
作者: 任我行_2014    时间: 2015-1-1 10:19
挺好的,先收藏,等学完IO部分在研究研究
作者: 清浅。。    时间: 2015-1-1 10:39
先看看,学完我也做一个
作者: 来自未来    时间: 2015-1-1 21:04
哇 大神啊,这都行。看来要好好学了。好有兴趣的说。
作者: levin.liu    时间: 2015-1-1 21:32
去试试,看效果怎么样,已加好友,望回复
作者: Zomu_文林    时间: 2015-1-1 21:52
不错!!值得学习!!
作者: 周峰峰    时间: 2015-1-4 20:48
Eagle 发表于 2014-12-29 20:10
这个牛。顶一个啊。这么多文件啊。。。厄滴神啦。。。。。。。

到哪都有你
作者: 赵涛涛    时间: 2015-1-4 21:20
顶楼主!确实不错,膜拜,相信以后我能做出来哈 嘿嘿
作者: Eagle    时间: 2015-1-5 10:50
周峰峰 发表于 2015-1-4 20:48
到哪都有你

你不服咬我。哈哈,今天是进来收集面试题的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2