Ruby/SDLでライフゲーム
3 月 11th, 2009
tnct.Seminar9.03#1が無事?終了しました^^
なんだかんだ頑張ったぞ俺
午前中は無線鯖立てに時間を使っていたので何もできなかったけど
午後は急加速!!
作成したのはライフゲ
簡単にいうと周りの個体数が多いと死亡
周りの個体がいなくても死亡
適度な個体がいれば生き残るという条件をコーディングします。
# -*- coding: utf-8 -*- require 'sdl'#画面描画SDL require 'rubygems'#gemInstallしたのもを使用 require 'narray'#多次元配列拡張ライブラリ width = 100 height = width $window = 400 $window_life = width SDL.init(SDL::INIT_VIDEO) $screen = .setVideoMode($window,$window,16,SDL::SWSURFACE) $screen.fillRect(0,0,$window,$window,[0,0,0]) $life_table1 = NArray.int(width,height) $life_table2 = NArray.int(width,height) for i in 1..(width - 1) for j in 1..(height - 1) $life_table1[i,j] = rand(2) end end def life_num(i,j)#周りの生きているを数える num = 0 num = $life_table1[i+1,j] num = num + $life_table1[i+1,j-1] num = num + $life_table1[i+1,j+1] num = num + $life_table1[i-1,j] num = num + $life_table1[i-1,j-1] num = num + $life_table1[i-1,j+1] num = num + $life_table1[i,j+1] num = num + $life_table1[i,j-1] return num #いらないとわかりつつ念のため end def life_func(i,j)#マスの生死を判断する関数 if $life_table1[i,j] == 0 if life_num(i,j) == 3 live = 1 else live = 0 end else if life_num(i,j) == 3 || life_num(i,j) == 2 live = 1 else live = 0 end end end def display_life(i,j,num) width_life_start = i * ($window/$window_life) + 1 height_life_start = j * ($window/$window_life) + 1 width_life_end = $window/$window_life height_life_end = $window/$window_life if num == 1 $screen.fill_rect(width_life_start,height_life_start,width_life_end,height_life_end,[255,255,255]) else $screen.fill_rect(width_life_start,height_life_start,width_life_end,height_life_end,[0,0,0]) end end 1000.times{ for i in 1..(width - 2) for j in 1..(height - 2) $life_table2[i,j] = life_func(i,j) display_life(i,j,life_func(i,j)) end end #p $life_table1 $screen.updateRect(0,0,0,0) #sleep 1 $life_table1 = $life_table2 $life_table2 = NArray.int(width,height) }
最初のほうコード直してないからwidthとか意味のない代入してるけどw
これは意味ないのわかってて放置してるから愛嬌でw
とりあえず今回も楽しい勉強会でした^^
(うわうpしたらインデントなくなってるwww見づらいw