From: William James Date: 2006-12-25T11:40:08+09:00 Subject: Re: Merry Christmas! Christian Neukirchen wrote: > # In the spirit of ruby-talk:172428 and ruby-talk:124391... > > eval "IyBUaGFua3MgZm9yIGxvb2tpbmcgYXQgbXkgY29kZS4KIwojIENvcHlyaWdodCAoQy > kgMjAwMiwgMjAwNCwgMjAwNiAgQ2hyaXN0aWFuIE5ldWtpcmNoZW4gPGNobmV1a2lyY2hlbk > Bn bW > Fp bC5jb20+Ci MK > Iy BUaGlzIHByb2d yY > W0 gaXMgZn JlZSBzb2Z0d2FyZ Tsg eW > 91 IGNhbiByZWR pc3RyaWJ1dGUgaXQ gYW5k L2 > 9y CiMgbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyB vZ > iB 0aGUgR05VIEdlbmVyYWwgUHVibGl jIExpY2Vuc2U uC > gp TVERPVVQuc3luYyA9IHRydWUKCmNs YXNzIFhNYXN IY > WN rMjAwNgogIFdJRFRIID0gKEVOVlsi Q09MVU1OUyJ dI > Hx 8IDgwKS50b19pCgogI GRlZiBpbm l0aWFsaXplC iA > gI CBAbWV zc2FnZSA9ICIgTUVSUlk uQ0hSSVNUTU FT > Lk FORC5BLkhBUFBZLk5FV y5ZRUFSISAgICAgICA gI > CA gIgogICAgQHBvcyA9ID AKICBlbmQKCiAgZ GV > mI HJ1bgogICAgY2xlYXIKCiAgICBpdGVyY XR > lI DguNCBkbwogICAgICByZXNldAogICAgICB zZ > XQ gMC4wMCwgMAogICAgICBzZXQgLTAuM jU > sI DIwCiAgICAgIHNldCAgMC41MCwgNDAKCi Ag > IC AgIHNob3cKICAgICA gc2xlZXAg MC4xCiAgICBlbmQKCiA gI > CB jbGVhciAzCiAgICB0aWNrZXIgImJyb3Vn aHQgdG8geW91IGJ5 IG > No cmlzMiIKICAgIGNsZWFyIDIKICBl bmQKCiA gZGVmIGl0ZXJh dG > Uo bikKICAgICgwLi5uKk1hdGg6OlBJKS 5zdGVwK DAuMDkpIHs gf > EB pfAogICAgICB5aWVsZAogICAgICBAcG 9zID0gK EBwb3Mg Ky > Ax KSAlIEB tZXNzYWdlLnNpemUKICAgIH0KICBlbmQK CiAgZGVmIH Jl > c2 V0CiAgICBAbGluZ SA9ICIgIiAqIFdJRFR ICiAgZW5kCgogIGRlZi Bz > ZX QodHJpZ29mZnNldCwgb XNnb2Zmc2V0KQog ICAgQGxpbmVbK E1 > hd Gguc2luKEBpICsgTWF0aDo6 UEkqdHJpZ29mZ nNld Ck > gK iAoV0lEVEgvMi0xKSArIFdJRFRILzIpLnRvX2 ld > ID 0KICAgICAgQG1lc3NhZ2VbKEBwb3MgKyBtc2d vZ > mZ zZXQpICUgKEBtZXNzYWdlLnNpemU tMSldC iA > gZ W5kCi AgCiAgZGVmIHNob3cKICAgI HB1d HM > gQ GxpbmUKICBlbmQKICAKICBkZWYgY2x lY XI > ob j01MCkK ICAgIHByaW50ICJcbiIq bg > og IGVuZAoKICBkZWYgdGlja2VyKG1 lc > 3N hZ 2UpCiAgICBwcmludCAiI CI > qK ChXSURUSC1tZXNzY Wd > lL nNpemU pL > zI pC > iAgICBtZXNzYWdlLmVhY2hfYnl0ZSB7IHxifCBwdXRjIGI7IHNsZWVwIDAuMiB9CiAgICBwd > XRzCiAgZW5kCmVuZAoKWE1hc0hhY2syMDA2Lm5ldy5ydW4K**".delete(" \n").unpack( > "m*").first # Copyright (C) 2006 Christian Neukirchen / chneukirchen.org > > __END__ > -- > Christian Neukirchen http://chneukirchen.org require 'Win32/Console' $console = Win32::Console.new(STD_OUTPUT_HANDLE) $console.Cls() def at_xy( x, y ) $console.Cursor(x.to_i, y.to_i) end STDOUT.sync = 8 width = 80 height = 25 - 1 def collide( deltas, loc, string ) x,y = loc.zip(deltas).map{|a,b| (a+b).to_i} (x ... x+string.size).zip([y]*string.size).any?{|a| $board_hash[a]} end def rectangle( loc, dims ) (loc[1] ... loc[1]+dims[1]).each{|y| (loc[0] ... loc[0]+dims[0]).each{|x| $board[y][x] = "*" $board_hash[[x,y]] = true }} end def draw( x,y,str, show=true) at_xy( x,y) print (show ? str : " " * str.size) end $board = Array.new(height){ " " * width} $board_hash = {} [ [0,0,width,1], [0,1,1,height-2], [width-1,1,1,height-2], [0,height-1,width,1] ].each{|a| rectangle( a[0,2], a[2,2] ) } (1..8).each{|yy| rectangle([9-yy,yy], [1,1] ) rectangle([yy+22,yy],[1,1]) } rectangle( [9,17], [23,3] ) rectangle( [40,5], [30,1] ) rectangle( [30,1], [1,7] ) rectangle( [60,10],[1,7] ) rectangle( [49,6], [1,1] ) 12.step(20,2){|yy| rectangle([yy*4-18,yy], [1,1]) } print $board thing = "Yule" y = height - 2 x = width - 1 - thing.size dx,dy = 1,1 while 3 do count = nil [[dx,0],[0,dy],[dx,dy]].each{|a| if collide(a,[x,y],thing) count = a.select{|n| n.nonzero?}.size x_ok,y_ok = [[1,1],[1,nil],[nil,1]][count>1 ? rand(3) : 0] dx = -dx if x_ok && a[0].nonzero? dy = -dy if y_ok && a[1].nonzero? end break if count && a[1].nonzero? } print "\a" if 2 == count draw( x,y,thing, nil ) x += dx ; y += dy draw( x,y,thing ) sleep 0.05 end