Wave = []
loop do
20.times do
Wave.unshift(1)
p Wave
sleep(0.01)
end
20.times do
Wave.pop
p Wave
sleep(0.01)
end
end
x = 0
loop do
puts '-' * ((1 + Math.sin(x += 0.1)) * 20)
sleep 0.01
end
array.unshift(obj, ...) → array
Prepends objects to the front of array. other elements up one.
a = [ "b", "c", "d" ]
a.unshift("a") #=> ["a", "b", "c", "d"]
a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
#12 楼 @ghjcumt2008 这个 Wave 变量没被重新 assign,只不过是对象本身在变化内部状态,#7 楼 @luikore 已经解释过了
4.3 Constant References A constant in Ruby is like a variable, except that its value is supposed to remain constant for the duration of a program. The Ruby interpreter does not actually enforce the con- stancy of constants, but it does issue a warning if a program changes the value of a constant. Lexically, the names of constants look like the names of local variables, except that they begin with a capital letter. By convention, most constants are written in all uppercase with underscores to separate words, LIKE_THIS. Ruby class and module names are also constants, but they are conventionally written using initial capital letters and camel case, LikeThis.
x = 0
loop do
space = ' ' * (30-((1+Math.sin(x+=0.15))*15))
dot = '-' * ((1+Math.sin(x)) * 15) *2
puts space + dot
sleep 0.01
end
... 调幅信号:
x = 0
y = 0
loop do
puts '-' * ((1 + Math.sin(x += 0.018)) * ((1 + Math.sin(y += 0.15))) * 20)
sleep 0.01
end
冲击波嘛,必须有声音才行呀
x = 0
loop do
puts "\a-" * ((1 + Math.sin(x += 0.1)) * 20)
sleep 0.01
end
x = 0
y = 0
loop do
dot = '-' * ((1 + Math.sin(x += 0.018)) * ((1 + Math.sin(y += 0.15))) * 20)
puts dot.center 80
sleep 0.01
end
@qichunren @zputee
带音乐和颜色的... 用了 Mac OS X 的 say
和命令行播放器 afplay
, linux 应该也有类似的自己改一下就好
Thread.new do
system "say -r 300 #{'swa ' * 15}"
end
require "tempfile"
path = Tempfile.open 'nyan.mp3' do |f|
F = f # just don't GC it
f << `curl -s http://cdn.nyanit.com/audio/nyanlooped.mp3`
f.path
end
Thread.new{loop{system "afplay #{path}"}}
dot = ->{
i = 0
j = 16
-> {
i += 1
if i % 100 == 0
i = 0
j += 1
end
if j > 231
j = 16
end
"\e[38;5;#{j}m█"
}
}[]
x = 0
y = 0
loop do
print ' ' * ((1 + Math.sin(x += 0.1)) * 15 + 10)
n = ((1 + Math.sin(y += 0.019)) * 10).ceil
puts(n.times.map{dot[]}.join)
sleep 0.01
end
#35 楼 @richard020389 我还有 bad apple 的屏保... 当年把 win7 扫雷版的原理搞出来了 (还是 1.9 的代码,现在都用 fiddle 不用 dl 了...)
# coding: utf-8
require "dl"
require "dl/import"
include DL
module MineSweeper
extend Importer
dlload 'user32.dll'
# ------------------------------------------------------------------------------
# memory for title match
MSstr = '扫雷'.encode(Encoding.default_external)
Mem = CPtr[MSstr + "\0"]
def Mem.zero
Mem.size.times do |i|
Mem[i] = 0
end
end
# ------------------------------------------------------------------------------
# find minesweeper window handle and assign to $ms_h
# window title text
# (handle, char*, sz)
extern 'int GetWindowText(int, int, int)', :stdcall
# to find minesweeper window
# (proc, lparam)
extern 'int EnumWindows(void*, int)', :stdcall
# (handle, lparam)
EnumCallback = bind "int enum_call_back(int, int)" do |h, _|
Mem.zero
GetWindowText h, Mem.to_i, Mem.size
txt = Mem.to_s.strip.force_encoding Encoding.default_external
if txt == MSstr
$ms_h = h
0
else
1 # 0 stops it
end
end
EnumWindows EnumCallback, 0
exit unless $ms_h
# ------------------------------------------------------------------------------
# activate minesweeper window
extern 'int SetForegroundWindow(int)', :stdcall
SetForegroundWindow $ms_h
# ------------------------------------------------------------------------------
# simulate right clicks
# move cursor
extern 'int SetCursorPos(int, int)', :stdcall
# generate a mouse event
# (event, x, y, _, _)
extern 'void mouse_event(int, int, int, int, int)', :stdcall
MOUSEEVENTF_RIGHTDOWN = 0x0008
MOUSEEVENTF_RIGHTUP = 0x0010
# for coordinate transformation
# (handle, point*)
extern 'int ClientToScreen(int, void*)', :stdcall
POINT = struct ['int x', 'int y']
module_function
# move mouse and right click
def click x, y
x = x*18 + 41
y = y*18 + 41
p = POINT.malloc
p.x = x
p.y = y
ClientToScreen $ms_h, p
SetCursorPos p.x, p.y
sleep 0.01
mouse_event MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, x, y, 0, 0
sleep 0.05
end
# right click twice to remove the little flag
def unclick x, y
x = x*18 + 41
y = y*18 + 41
p = POINT.malloc
p.x = x
p.y = y
ClientToScreen $ms_h, p
SetCursorPos p.x, p.y
sleep 0.01
mouse_event MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, x, y, 0, 0
mouse_event MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, x, y, 0, 0
sleep 0.05
end
end
def slop show
if show
12.times do |i|
MineSweeper.click i, i
end
else
12.times do |i|
MineSweeper.unclick i, i
end
end
end
def hori show
if show
12.times do |i|
MineSweeper.click i, 0
end
else
12.times do |i|
MineSweeper.unclick i, 0
end
end
end
5.times {
slop true
slop false
sleep 2
hori true
hori false
}
#30 楼 @luikore 奇怪,我在 linux 下运行会报这个语法错误:
➜ ~ ruby -v
ruby 2.1.0dev (2013-04-26) [x86_64-linux]
➜ ~ ruby test.rb
test.rb:21:in `block (2 levels) in <main>': wrong number of arguments (0 for 1) (ArgumentError)
from test.rb:29:in `[]'
from test.rb:29:in `block (2 levels) in <main>'
from test.rb:29:in `times'
from test.rb:29:in `each'
from test.rb:29:in `map'
from test.rb:29:in `block in <main>'
from test.rb:26:in `loop'
from test.rb:26:in `<main>'
➜ ~ uname -a
Linux qhwa-laptop 3.2.0-40-generic #64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
且不论对象本身是否变化,这个场合数组用 Wave 首字母大写形式,没有意义呀。如果在类中被定义,或者不想让它变, 如果变了, 请警告我
, 也应该是 `全部大写', 搞的和类名称约定一致,这不是让人犯错误么...
@fsword
虽然 Wave 的确没有变化 (它的 object_id 始终引用同一个数组), 但是这里用常量的意义不在于没有被重新 assign
, 而在于:我不想它被 assign
, 或者 希望总可以被访问
. 而这些条件下,不应该用和类一致的约定。而应该用全部大写。以楼主的例子来说,我看不出来非要用 常量
的意义。
a = [" ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", "0", " ", " ", " ", " ", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", "0", "\n", " ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", "0", "0", "0", "0", "\n", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", " ", " ", " ", " ", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n"]
puts a.join
!(a=[" ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", "0", " ", " ", " ", " ", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", "0", "\n", " ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", "0", "0", "0", "0", "\n", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", " ", " ", " ", " ", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n"];)
10.times{
puts ("\n\n\n")
!a.each {|x| print x; sleep 0.008 }
}
"over"
dot = ->{
i = 0
j = 150
-> {
i += 1
if i % 2== 0
i = 0
j += 1
end
if j > 231
j = 16
end
"\e[38;5;#{j}m█"
}
}[]
!(a=["\n","\n",
" ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", "0", " ", " ", " ", " ", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", "0", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", "0", "0", "0", "0", "\n",
" ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0","0", "\n","\n"];)
10.times{
a.each {|x| print ((x=="0")? dot[]:x) ; sleep 0.009 }
a.each {|x| print x; sleep 0.006}
}
"over"
北风乱,夜未央,你的影子。。。
dot = ->{
i = 0; j = 150
-> {
i += 1; (i=0 ; j+=1) if i % 2== 0
j = 16 if j > 231
"\e[38;5;#{j}m█"
}
}[]
class Array
def show_chars
print "\n" * 2
each do |x|
x.each_char{|x| print x; sleep 0.06};
print "\n"*2
end
true
end
end
(
a=["\n\n",
" ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", "0", " ", " ", " ", " ", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", "0", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", "0", "0", "0", "0", "\n",
" ", "0", "0", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", "0", "0", " ", " ", " ", "0", "0", " ", " ", " ", "0", "0", "\n",
" ", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0", "0", "0", " ", " ", " ", " ", "0", "0", " ", " ", " ", " ", "0", "0","0","\n",
"-","-","-","-","-","-","-","-","-","-","-","-","-","-","-",];
header =[
"北风乱,夜未央,你的影子",
"剪不断,徒留我孤单在",
"湖面成雙!",
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",];
footer = [
"OOOOOnly youuuuuuu\no 祝所有母亲 u\no 五月十二日 u\no 节日快乐!! u\nOOOOOnly youuuuuuu\n\n",]
)
(
print "\n"*25
header.show_chars
3.times{
a.each {|x| print ((x=="0")? dot[]:x) ; sleep 0.006 }
a.join.split("\n").reverse.join("\n").each_char {|x| print x; sleep 0.003}
};
footer.show_chars
)
"^_^"