A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一楼先上效果图
更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 1技术分 +3 收起 理由
杨佳名 + 3

查看全部评分

27 个回复

倒序浏览
先说一下原理吧 简单来说就是每一帧连续的显示出来 显示的速度非常快 利用人眼的视觉暂留现象造成了动画的效果
需要准备的工具 jdk1.5以上 MyEclipse或者Eclipse 或者EditPlus  字符画截取工具 百度去搜索 帧数截取工具 BadApple的动画百度下载 不要弹幕版本的 就是这些东西
回复 使用道具 举报
首先把动画的每一帧截成图片 然后用工具转化成字符画 大概是六千多张图片 转化成字符画也就是六千多个文本文档
然后利用Java的IO 知识把每一个txt文本读取显示到控制台上即可 但是这里有一个问题 就是显示过程中会疯狂的下滚 所以需要打印一帧清一次屏幕在打印一帧 但是Java是没有清屏的方法的 所以需要JNI 也就是java的本地调用 调用其他语言写的清屏函数 直接控制系统当然首选调用C语言清屏啦 然后显示一帧清一次屏幕就好啦 大概就是这么多 楼下贴code
回复 使用道具 举报
这个是技术帝啊,顶一下
回复 使用道具 举报
顶个....
回复 使用道具 举报
贴上源码 懒得 写注释了。。我最讨厌的就是给看没有注释的代码和自己要写注释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. }
复制代码
回复 使用道具 举报
音乐这部分代码我也不是很懂 在研究 我们辅导老师帮忙找的。。找了好久 好感动!
回复 使用道具 举报
Eagle 高级黑马 2014-12-29 20:10:33
8#
这个牛。顶一个啊。这么多文件啊。。。厄滴神啦。。。。。:o。。
回复 使用道具 举报
顶一个!!!!
回复 使用道具 举报
好厉害的样子 。。
回复 使用道具 举报
小猪快跑 来自手机 中级黑马 2014-12-29 21:09:57
11#
试试跑一下:loveliness:
回复 使用道具 举报

可能跑不起来。。。你没有那些文本文件 还有没写本地调用的函数:)
回复 使用道具 举报

可能跑不起来。。。你没有那些文本文件 还有没写本地调用的函数:)
回复 使用道具 举报
李增宽 来自手机 中级黑马 2014-12-30 23:36:37
14#
不明觉厉
回复 使用道具 举报
努力的橘子 来自手机 中级黑马 2014-12-30 23:40:49
15#
哇0.0顶一个顶一个
回复 使用道具 举报
崇拜啊。。我什么时候能有这水准就好了。
回复 使用道具 举报
zhiyi 中级黑马 2014-12-31 09:05:05
17#
哈哈,好厉害,不过这画面感觉回到了解放前
回复 使用道具 举报
真是牛逼啊
回复 使用道具 举报
dandan520 来自手机 中级黑马 2015-1-1 02:03:16
19#
(⊙o⊙)?,还能这样
回复 使用道具 举报
确实厉害,试跑了一下,跑不出来啊...
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马