我想在控制台应用程序中制作一个小动画,为此,我创建了一个ascii艺术:
______
,.:b-'::' ,`::-/,._
_.\\,,-/` /| | ,' .`| ,_: ,.
` -_,'[ ._-|/,'Y ` ` / -/,-.:`.
,'/[(o _.. _,".`':| ___ ::/|.`][,'/,,/,'`.
`:-\-. `','\`,-' [:_,.....'__ ^..,|-.'- ,,\ :.
,'-\-.` _ `[.- --' '-..`'-[''\ .L-",`.
,L< ':],, ,` ,- '- , .''Y"-'.-'`
_'_,::''/-]._,' _ .. .._ `.`]'. -,-:,^.
_'/,[``.-'/'- _ :].-''`'''''--.[ -. .|/:L:| \
'[' ]>] ' /' _,' `- . ``\'` ,u[<L'
/,`. [-' / ,` ,. `. `.`,,``..| |
P.P.`[o'), ,''`__-. ,' /'\, .\'( ; .:]
/`/ ` .'/XXX `,' . -. ,' ,' `. \.> :,`
| \.u[/\'|X X/\' 'v ^, ,' ,' \ \ `^/:.-, |
.:-<.. [||/ XXX '/ `\ `\ ,' /' .\ || \]::`.'
| |::>,-b| || ^. '---' ,' Y| || [./.'/\
| /_,[| || || | ,. / || || |> --||
Y=]L__`=[| || | ,- ' || | ::_,==:
| |i .| |'. \ /' ,..._ `' || || /L. ,
|_]L,.'-] | [\ ,- ,' ,' '. || 'P..L, / |
v...-L\ \\ `/. ,' ,' `. -_ / /|'Y\-.`::'
\ -:,'\.., \`\ _,' /' ^, /, .[-` ,'
)_ ' '.\ `[`, /' `.'\,'' /`..:- |
<`...,`./ ` `[.= `= / ,_/-/.` ''
\`[,-'.v'\`. ".`._ _.:' '-' '.>/ '
[,_,L!`, [` ' `-...______.,-' v /'''|]:.'
``\ //'. .`.`. ' --- -- '' ',-|' ' b''
`.Yv-]-, ',-.'- ,-'''\ [,.-,'
`['./,L|'`.],.. .__ _ ,.',. .[ ]'v']
`v-/| <." ..`\-.. ::_ |: ,.-\\',.\'- ' '','
`.:`[/ / ' > .:',.||::_|/--'. ``,\ '/: '
-',:.\`[| .'/,[/ L',] ^ /``,] ``-`
-\|, -,: |`-|||/ |``.,..\`_,-'
''--.' ==='|::::\'-''
(是的,这是轮盘赌)
我创造了相同的ascii艺术,球在不同的位置(也像轮盘上的十字架)。
我认为我的问题非常棘手:我想在同一个地方将轮盘赌打印到控制台每秒4次(可能更多,不完全知道),以使它看起来像一个吉恩:)。 我没有问题加载文件(并将它们转换为字符串)但我没有找到在同一个地方重写的方法(“\ r \ n”不适用于多行文字)。
如果我不使用任何像curses这样的库就可以做到这一点会很棒(虽然我是Python中ncurses的忠实粉丝!)。
答案 0 :(得分:2)
我认为诅咒或类似的东西是必要的。
正如我记得的那样(诅咒很久以前),诅咒有两点 - 不同的终端,以及慢速终端连接的效率。您将面临这两个问题,具体取决于终端的连接方式以及您最终想要重新绘制屏幕的频率。
Curses分析了所需的输出以确定绘制内容的最有效方法 - 它应该将光标定位三次并分别绘制内容,还是输出多行并只绘制一次?定位光标所需的字符序列是什么?
祝你好运,无论如何。
答案 1 :(得分:1)
为了让你有一些开始,这段代码打印了一个外粗圆,一个内细圆,以及在你的形状中心的一个kross随机 ASCII 标点符号:
*$%,'"++-(
(,%,(#)&"("%#!'/%*.*)&
%%%&"&'$#'*#/,)$-,/,$/'..*+/*%--#)
&.#'''&.(,%)""$'-/.&.".(+)$##,)%.*))'$
)-.+,#*'*./&+)"$#,,$+')*%*.")"$(%-)&-$/(-&
$(%#/)'*-!%)."#' *%..&**,*.!%.+/'
('&!"%!-$/#,*/ !.-&.)+!#!."/!
*+#/!)&$'+-$ &$//)$*/.#(*
.$-+&'+).'!% .'/+,-&#&!%,,% ($$'),-,&*!'
'*"#!/(.&( /"$%!'%%'+$+$/&-/!(+/! %".%).%&//
$+''.)/&.# **""** )&/(*. /,-%-*(,'&
+&*//##+.& ,'&*&$ ,+$$)- $)%$#))!..
/'"#!$%.'& +#/) (& -. ".-- &(/+'#,)%*
'$.#-,// $&'! &+ "# !/,' ,-+&/$#,
%'%+)&,,$' ".$( .! (- +$'" /(&'.*,(&*
!#/%"/.-+) $+,. "& .- +($# )'.#!&"(./
%&$"%%/).$ -%"# &% $%'$ ,#"$,(-#$.
!$"$#*(#*) +*&# &* $# ###& *'$/#,.)(.
"$(*-'.*!( $""/ ), %, $/&( %*&$$)'-,&
/,#-$-** +**- %$ $- (.%, %$(%*)+'
#*,**,&(%* /"*" &/ #- '&## ,./+'$&,&(
&!!&*--*+% /#-.)& !"#/%- ',".&-#!+*
'$'"!"*"$" !.)(," .,&,.) -+)$//$/*+
'/#&"+%%-" ',+*,&&)/!**-$,$/(*!+' .!#-$'..$(
-#&%!-%),"-- --+#-,$!#-#$/+ +/'#*#*#*+./
()$"**!$//'/ +"+(+/,)%)*"
"+#'.$'-!*&"&$ )/!..,(-&.*/#(
)-#%/#!!!.$..#)* $'/%-/+#+)%.-*'.
/'#-+.%#$),)$/**%%&++%#,)"(+/,&((-($*'"+'*
*!**!+,#&-&-%"&&..,*/(&'!/&##-/&*+%%,"
/."($&$'!!))/&$#%))"/*&&)!"'$%/,+-
(+$.-)%#*#!$.)*###/*&(
#"*'"*#+(!
Java 8:
int r = 16;
IntStream.rangeClosed(-r, r)
.map(Math::abs)
.peek(i -> IntStream.rangeClosed(-r, r)
.map(Math::abs)
// printing a kind of thick circle,
// thin circle and cross in the center
.mapToObj(j -> i == j && i < r/3 || // cross
// outer thick circle
Math.abs(i*i + j*j - r*r/1.3) < 4*r ||
// inner thin circle
Math.abs(i*i + j*j - r*r/4) < r
// cast to String
? ""
// two random ASCII punctuation
// symbols: !"#$%&'()*+,-./
+ (char) (33 + Math.random() * 15)
+ (char) (33 + Math.random() * 15)
// two whitespaces
: " ")
.forEach(System.out::print))
.forEach(i -> System.out.println());