rem ライフゲーム new '********** global variable ********** global n, m, gc n = 20 m = 20 global a[(n+2)*(m+2)], b[(n+2)*(m+2)] global mx, my, cw mx = 10 my = 10 cw = 14 global io, b1, b2, bm '********** initialize ********** sub init{ dim i, j i = 0 j = (n + 2) * (m + 2) while(i < j){ a[i] = 0 b[i] = 0 i = i + 1 } gc = 0 } '********** cell print ********** sub cell(x, y){ x = x * cw + mx y = y * cw + my io.pos(x, y) io.rect(cw - 2, cw - 2) } '********** all cell print ********** sub disp{ dim x, y y = 0 while(y < n){ x = 0 while(x < m){ if(a[(y+1)*m + (x+1)] == 1){ io.color = 0x0000ff } else{ io.color = 0xd0d0d0 } cell(x, y) x = x + 1 } y = y + 1 } } '********** click cell set ********** sub set_cell(x, y){ if(a[(y+1)*m + (x+1)] == 0){ a[(y+1)*m + (x+1)] = 1 io.color = 0x0000ff cell(x, y) } else{ a[(y+1)*m + (x+1)] = 0 io.color = 0xd0d0d0 cell(x, y) } } '********** Image click ********** sub click(x, y, k){ dim x1, y1, w ' CELL x1 = 0 while(x1 < m){ w = x1 * cw + mx if((x >= w) * (x <= w + cw - 2)) break x1 = x1 + 1 } y1 = 0 while(y1 < n){ w = y1 * cw + my if((y >= w) * (y <= w + cw - 2 )) break y1 = y1 + 1 } if((x1 < m) * (y1 < n)){ set_cell(x1, y1) return } } '********** button 1 click ********** sub bclick1{ if(bm == 1){ return } bm = 1 life disp gc = gc + 1 spr(mx + cw * m + mx, my + 60, 60, str(gc), 0, 0xffffff) bm = 0 } '********** button 2 click ********** sub bclick2{ init disp spr(mx + cw * m + mx, my + 60, 60, "", 0, 0xffffff) } '********** lifegame calculate ********** sub life{ dim i, j i = 1 while(i <= n){ j = 1 while(j <= m){ if(a[i*m + j]){ b[(i-1)*m + (j-1)] = b[(i-1)*m + (j-1)] + 1 b[(i-1)*m + (j+0)] = b[(i-1)*m + (j+0)] + 1 b[(i-1)*m + (j+1)] = b[(i-1)*m + (j+1)] + 1 b[(i+0)*m + (j-1)] = b[(i+0)*m + (j-1)] + 1 b[(i+0)*m + (j+1)] = b[(i+0)*m + (j+1)] + 1 b[(i+1)*m + (j-1)] = b[(i+1)*m + (j-1)] + 1 b[(i+1)*m + (j+0)] = b[(i+1)*m + (j+0)] + 1 b[(i+1)*m + (j+1)] = b[(i+1)*m + (j+1)] + 1 } j = j + 1 } i = i + 1 } i = 0 while(i <= n + 1){ j = 0 while(j <= m + 1){ if(b[i*m + j] != 2){ if(b[i*m + j] == 3){ a[i*m + j] = 1 } else{ a[i*m + j] = 0 } } b[i*m + j] = 0 j = j + 1 } i = i + 1 } } '********** string print ********** sub spr(x, y, w, a$, fc, bc){ io.color = bc io.pos(x, y) io.rect(w, 20) io.color = fc io.pos(x + 12, y + 3) io.textout a$ } '********** main ********** sub main{ io = Create Image io.Width = mx + cw * m + mx + 60 + mx io.Height = my + cw * n + my io.OnMouseDown = click b1 = Create Button b1.Caption = "CALC" b1.Top = my + 0 b1.Left = mx + cw * m + mx b1.Width = 60 b1.Height = 20 b1.OnClick = bclick1 b2 = Create Button b2.Caption = "RESET" b2.Top = my + 30 b2.Left = mx + cw * m + mx b2.Width = 60 b2.Height = 20 b2.OnClick = bclick2 DispProgram(0) MainForm.ClientWidth = io.Width MainForm.ClientHeight = io.Height MainTextBox.Visible = 0 init disp } '********** program start ********** main