2次元ランダムウォーク
Posted feedbacks - Groovy
GUIで作ってみました。
画像が置けないので、画面イメージはBLOGに貼っています。
"Run"ボタンを押すたび100回ずつ動きます。
"Groovy in Action"を参考にしました。
実行結果
-------------------------
以下のURLに画面イメージ貼り付け。
http://d.hatena.ne.jp/nemo_kaz/20080730
画像が置けないので、画面イメージはBLOGに貼っています。
"Run"ボタンを押すたび100回ずつ動きます。
"Groovy in Action"を参考にしました。
実行結果
-------------------------
以下のURLに画面イメージ貼り付け。
http://d.hatena.ne.jp/nemo_kaz/20080730
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import groovy.swing.SwingBuilder
import java.awt.Color
import java.awt.BorderLayout as BL
import javax.swing.WindowConstants as WC
import javax.swing.BorderFactory as BF
import javax.swing.JOptionPane
swing = new SwingBuilder()
paint = swing.action(
name: 'Run',
closure: this.&paintGraph,
mnemonic: 'R',
accelerator: 'ctrl R'
)
about = swing.action(
name: 'About',
closure: this.&showAbout,
mnemonic: 'A',
accelerator: 'F1'
)
frame = swing.frame(title:'2次元ランダムウォーク',
location:[100,100], size:[300,300],
defaultCloseOperation:WC.EXIT_ON_CLOSE) {
menuBar (){
menu(mnemonic:'A','Action'){
menuItem(action:paint)
}
glue()
menu(mnemonic:'H','Help'){
menuItem(action:about)
}
}
panel (border:BF.createEmptyBorder(6,6,6,6)) {
borderLayout()
vbox(constraints: BL.CENTER,border:BF.createTitledBorder('Runボタンを押すたびに100回動きます')) {
panel(id:'canvas')
}
hbox (constraints: BL.SOUTH){
hstrut(width:10)
button(action:paint)
}
}
}
frame.show()
def labeledSpinner(label, value){
swing.label(label)
swing.hstrut()
swing.spinner(id:label, stateChanged:this.&paintGraph,
model:swing.spinnerNumberModel(value:value))
}
gfx = swing.canvas.graphics
gfx.color = new Color(255, 255, 150)
gfx.color = Color.red
xpos = 100
ypos = 100
def paintGraph(event) {
int width = swing.canvas.size.width
int height = swing.canvas.size.height
1.upto(100) {
xdir = Math.random()
ydir = Math.random()
if (xdir <0.3333 && xpos >5) { xpos-=5 }
if (xdir >0.6666 && (xpos < width-5)) { xpos+=5 }
if (ydir <0.3333 && ypos >5) { ypos-=5 }
if (ydir >0.6666 && (ypos <height-5)) { ypos+=5 }
gfx.fillRect(xpos,ypos,4,4)
}
}
void showAbout(event) {
JOptionPane.showMessageDialog(frame,
'''2次元ランダムウォーク
赤い四角がランダムに歩きます。''')
}
|


ytakenaka
#6806()
Rating2/2=1.00
2次元ランダムウォークをつくってみてください。
******
元は3本建てにしようかと思ったけど、上の一本に絞りました。おまけとして、3本とも下に補足しておきます。作れるようでしたら作ってみてください。
1.一次元のランダムウォークを作ってください。
1.1 データファイルに残してください。 フォーマット:時間 位置
おまけ)
可視化が簡単な処理系・プログラミング言語でしたら実際に可視化してみてください。フォーマットしたファイルをスプレッドシートやplotutilitiesなどの可視化ソフトを使って、実際に動きをかくにんしてみましょう。:-)
2.同じように2次元のランダムウォークを作ってください。
2.1 1.1と同じようにしてください。
フォーマット:時間 x位置 y位置
3.凝りたければ、アニメーションにするもよし、3次元の動きをとるもよし、自分の想像力がいかせるところまでやってみてください。
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%82%A6%E3%82%A9%E3%83%BC%E3%82%AF
分からないというヒトへの分かりにくいヒント:
今の位置から次の時間の位置が決まるのですが、決まりかたが、乱数で一歩後退するか一歩先にいくか?ということをやればよいです。
[ reply ]