kaki-lifegame 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7107f04a0136d027aa9e3decf4645d8e901c8d4
4
- data.tar.gz: 85357842f26ccc0e68305ce77367468c2a7378df
3
+ metadata.gz: 89a6f9f72edd2d93a8bedfdb4203426517422582
4
+ data.tar.gz: 99fcc35b4a6d739bc2ad394976c264588bd05b2b
5
5
  SHA512:
6
- metadata.gz: '0792b68d8e37e7977d4b19fa68072b6ab3f6d0383903048093615eb48067a7b3bcf7c7c6d1eb90dee3ada2b4e4619ba0314ca236e2420a039745796014329cc0'
7
- data.tar.gz: 14a770f488c6aebcaa3d51dce71380bd46d3a29265e7f58d4c3671bf536deb5113e524bdaa92e789ede7ae38a03b2886daa0fd1a98ec4cf8291413c2847fcaa4
6
+ metadata.gz: 187b2b4f5122d8abe47fb33956742f80e19719ed68f4b8558dc9735cca698225ed31cff6af052fa222db617859bca3c38a69ed5abea888852ee4c68c18a3c3a8
7
+ data.tar.gz: 4bb812802145dd5828377f6c304d39a9c4d59aa003a7e14f6ba6aff85e52955a99a0d64016af988b809894269bc6d6e245133a197b012211ae5538da9e26e576
@@ -1,3 +1,4 @@
1
+ Size : (large)
1
2
  Step : 0
2
3
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
3
4
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -2,17 +2,19 @@ require 'gtk2'
2
2
 
3
3
  module LifeGame
4
4
  class Field
5
- Width, Height = 85, 60
6
5
  MG = 4
7
6
 
8
7
  def initialize
8
+ @width, @height = 70, 50
9
+ @size = :small
9
10
  clear
10
11
  @step = @stored_step = 0
11
12
  @reserved = copy
12
13
  @store = []
13
14
  end
14
- attr_reader :step
15
-
15
+ attr_reader :step, :size
16
+ attr_accessor :width, :height
17
+
16
18
  def set_cell(x, y)
17
19
  @field[y + MG][x + MG] = 1
18
20
  end
@@ -48,13 +50,13 @@ module LifeGame
48
50
  end
49
51
 
50
52
  def each_cell
51
- (Height + (MG - 1) * 2).times do |y|
52
- (Width + (MG - 1) * 2).times {|x| yield(x - MG + 1, y - MG + 1)}
53
+ (@height + (MG - 1) * 2).times do |y|
54
+ (@width + (MG - 1) * 2).times {|x| yield(x - MG + 1, y - MG + 1)}
53
55
  end
54
56
  end
55
57
 
56
58
  def new_field
57
- Array.new(Height + MG * 2) {Array.new(Width + MG * 2, 0)}
59
+ Array.new(@height + MG * 2) {Array.new(@width + MG * 2, 0)}
58
60
  end
59
61
 
60
62
  def copy
@@ -84,17 +86,27 @@ module LifeGame
84
86
  end
85
87
 
86
88
  def load(file_name)
87
- @field = []
89
+ size = nil
88
90
  open(file_name, "r") do |io|
91
+ m = /^Size : \((.+)\)$/.match(io.gets.chomp)
92
+ unless m
93
+ puts "読み込みエラーです"
94
+ break
95
+ end
96
+ @field = []
97
+ size = m[1].to_sym
89
98
  @step = io.gets.chomp.scan(/\d+/)[0].to_i
90
99
  io.each_line do |line|
91
100
  @field << line.chomp.split(",").map(&:to_i)
92
101
  end
93
102
  end
103
+ return false unless size
104
+ change_window_size(size, false)
94
105
  end
95
106
 
96
107
  def save(file_name)
97
108
  open(file_name, "w") do |io|
109
+ io.puts "Size : (#{@size.to_s})"
98
110
  io.puts "Step : #{@step}"
99
111
  @field.each {|x| io.puts x.map(&:to_s).join(",")}
100
112
  end
@@ -113,6 +125,17 @@ module LifeGame
113
125
  @field = @store.pop
114
126
  @step -= 1
115
127
  end
128
+
129
+ def change_window_size(size, f = true)
130
+ return false if @size == size
131
+ @size = size
132
+ @width, @height = (@size == :small) ? [70, 50] : [85, 60]
133
+ clear if f
134
+ @step = @stored_step = 0
135
+ @reserved = copy
136
+ @store = []
137
+ true
138
+ end
116
139
  end
117
140
 
118
141
  class FieldArea < Gtk::DrawingArea
@@ -120,13 +143,14 @@ module LifeGame
120
143
  Space = 1
121
144
 
122
145
  L = CellSize + Space * 2
123
- AreaW, AreaH = Field::Width * L, Field::Height * L
124
146
 
125
147
  WaitChange = 50
126
148
 
127
149
  def initialize(field)
128
150
  super()
129
- set_size_request(AreaW, AreaH)
151
+
152
+ @areaw, @areah = field.width * L, field.height * L
153
+ set_size_request(@areaw, @areah)
130
154
 
131
155
  @f = field
132
156
 
@@ -169,6 +193,7 @@ module LifeGame
169
193
  set_wait_time
170
194
  end
171
195
  attr_writer :time_goes, :label1, :label2
196
+ attr_reader :areaw, :areah, :size
172
197
 
173
198
  def set_color(color_name)
174
199
  @gc.rgb_fg_color = @color[color_name]
@@ -220,8 +245,8 @@ module LifeGame
220
245
  end
221
246
 
222
247
  def each_cell
223
- Field::Height.times do |y|
224
- Field::Width.times {|x| yield(x, y)}
248
+ @f.height.times do |y|
249
+ @f.width.times {|x| yield(x, y)}
225
250
  end
226
251
  end
227
252
 
@@ -235,7 +260,7 @@ module LifeGame
235
260
  def scatter
236
261
  co1 = co2 = 0
237
262
  while co1 < 100 and co2 < 5000
238
- x, y = rand(Field::Width), rand(Field::Height)
263
+ x, y = rand(@f.width), rand(@f.height)
239
264
  if @f.get_cell(x, y).zero?
240
265
  set_cell(x, y)
241
266
  co1 += 1
@@ -250,14 +275,16 @@ module LifeGame
250
275
  end
251
276
 
252
277
  def load_file(file_name)
253
- @f.load(file_name)
278
+ is_change = @f.load(file_name)
279
+ area_size_change if is_change
254
280
  redraw
255
281
  show_step
282
+ return is_change
256
283
  end
257
284
 
258
285
  def background_renewal
259
286
  set_color(@grid ? :grid_color : :black)
260
- window.draw_rectangle(@gc, true, 0, 0, AreaW, AreaH)
287
+ window.draw_rectangle(@gc, true, 0, 0, @areaw, @areah)
261
288
  redraw
262
289
  end
263
290
 
@@ -301,13 +328,31 @@ module LifeGame
301
328
  redraw
302
329
  show_step
303
330
  end
331
+
332
+ def change_window_size(size)
333
+ if @f.change_window_size(size)
334
+ area_size_change
335
+ show_step
336
+ true
337
+ else
338
+ false
339
+ end
340
+ end
341
+
342
+ def area_size_change
343
+ @areaw, @areah = @f.width * L, @f.height * L
344
+ end
304
345
  end
305
346
 
306
347
  class SideBar < Gtk::VBox
307
- def initialize(field_area)
348
+ MGN = 3
349
+ SideBar_W = 130
350
+
351
+ def initialize(field_area, main_window)
308
352
  super()
309
- set_size_request(130, FieldArea::AreaH)
353
+ set_size_request(SideBar_W, field_area.areah)
310
354
  @farea = field_area
355
+ @mainw = main_window
311
356
  @edit_mode = true
312
357
 
313
358
  set_box1
@@ -347,12 +392,12 @@ module LifeGame
347
392
 
348
393
  box = Gtk::VBox.new
349
394
  pack_start(box, false, false, 0)
350
- box.pack_start(start_bt, false, false, 5)
351
- box.pack_start(stop_bt , false, false, 5)
352
- box.pack_start(step_bt , false, false, 5)
353
- box.pack_start(back_bt , false, false, 5)
354
- box.pack_start(l, false, false, 5)
355
- box.pack_start(Gtk::HSeparator.new, false, false, 10)
395
+ box.pack_start(start_bt, false, false, MGN)
396
+ box.pack_start(stop_bt , false, false, MGN)
397
+ box.pack_start(step_bt , false, false, MGN)
398
+ box.pack_start(back_bt , false, false, MGN)
399
+ box.pack_start(l, false, false, MGN)
400
+ box.pack_start(Gtk::HSeparator.new, false, false, 5)
356
401
  end
357
402
 
358
403
  def set_box2
@@ -384,10 +429,10 @@ module LifeGame
384
429
 
385
430
  box = Gtk::VBox.new
386
431
  pack_start(box, false, false, 0)
387
- box.pack_start(l1 , false, false, 5)
388
- box.pack_start(small_box, false, false, 5)
389
- box.pack_start(l2 , false, false, 5)
390
- box.pack_start(Gtk::HSeparator.new, false, false, 10)
432
+ box.pack_start(l1 , false, false, MGN)
433
+ box.pack_start(small_box, false, false, MGN)
434
+ box.pack_start(l2 , false, false, MGN)
435
+ box.pack_start(Gtk::HSeparator.new, false, false, 5)
391
436
  end
392
437
 
393
438
  def set_box3
@@ -423,11 +468,11 @@ module LifeGame
423
468
 
424
469
  box = Gtk::VBox.new
425
470
  pack_start(box, false, false, 0)
426
- box.pack_start(scatter_bt, false, false, 5)
427
- box.pack_start(grid_bt , false, false, 5)
428
- box.pack_start(small_box , false, false, 5)
429
- box.pack_start(clear_bt , false, false, 5)
430
- box.pack_start(Gtk::HSeparator.new, false, false, 10)
471
+ box.pack_start(scatter_bt, false, false, MGN)
472
+ box.pack_start(grid_bt , false, false, MGN)
473
+ box.pack_start(small_box , false, false, MGN)
474
+ box.pack_start(clear_bt , false, false, MGN)
475
+ box.pack_start(Gtk::HSeparator.new, false, false, 5)
431
476
  end
432
477
 
433
478
  def set_box4
@@ -444,9 +489,9 @@ module LifeGame
444
489
 
445
490
  box = Gtk::VBox.new
446
491
  pack_start(box, false, false, 0)
447
- box.pack_start(preserve_bt, false, false, 5)
448
- box.pack_start(restore_bt , false, false, 5)
449
- box.pack_start(Gtk::HSeparator.new, false, false, 10)
492
+ box.pack_start(preserve_bt, false, false, MGN)
493
+ box.pack_start(restore_bt , false, false, MGN)
494
+ box.pack_start(Gtk::HSeparator.new, false, false, 5)
450
495
  end
451
496
 
452
497
  def set_box5
@@ -463,27 +508,52 @@ module LifeGame
463
508
  load_bt.signal_connect("clicked") do
464
509
  if @edit_mode
465
510
  file_name = select_file("Load File", Gtk::FileChooser::ACTION_OPEN)
466
- @farea.load_file(file_name) if file_name
511
+ if file_name
512
+ main_window_change(@farea.load_file(file_name))
513
+ end
467
514
  end
468
515
  end
469
516
 
470
517
  box = Gtk::VBox.new
471
518
  pack_start(box, false, false, 0)
472
- box.pack_start(save_bt, false, false, 5)
473
- box.pack_start(load_bt, false, false, 5)
474
- box.pack_start(Gtk::HSeparator.new, false, false, 10)
519
+ box.pack_start(save_bt, false, false, MGN)
520
+ box.pack_start(load_bt, false, false, MGN)
521
+ box.pack_start(Gtk::HSeparator.new, false, false, MGN)
475
522
  end
476
523
 
477
524
  def set_box6
478
525
  close_bt = Gtk::Button.new("終了")
526
+ large_bt = Gtk::Button.new("大")
527
+ small_bt = Gtk::Button.new("小")
479
528
 
480
529
  close_bt.signal_connect("clicked") do
481
530
  Gtk.main_quit if @edit_mode
482
531
  end
483
532
 
533
+ large_bt.signal_connect("clicked") do
534
+ change_window_size(:large) if @edit_mode
535
+ end
536
+
537
+ small_bt.signal_connect("clicked") do
538
+ change_window_size(:small) if @edit_mode
539
+ end
540
+
541
+ small_box = Gtk::HBox.new
542
+ small_box.pack_start(large_bt , true, true, 1)
543
+ small_box.pack_start(small_bt, true, true, 1)
544
+
484
545
  box = Gtk::VBox.new
485
546
  pack_start(box, false, false, 0)
486
- box.pack_start(close_bt, false, false, 5)
547
+ box.pack_start(small_box, false, false, MGN)
548
+ box.pack_start(close_bt , false, false, MGN)
549
+ end
550
+
551
+ def change_window_size(size)
552
+ main_window_change(@farea.change_window_size(size))
553
+ end
554
+
555
+ def main_window_change(is_change)
556
+ @mainw.set_size_request(@farea.areaw + SideBar_W, @farea.areah) if is_change
487
557
  end
488
558
 
489
559
  def select_file(title, mode)
@@ -507,12 +577,12 @@ module LifeGame
507
577
 
508
578
  field = Field.new
509
579
  field_area = FieldArea.new(field)
510
- side_bar = SideBar.new(field_area)
580
+ side_bar = SideBar.new(field_area, self)
511
581
 
512
582
  box = Gtk::HBox.new
513
583
  add(box)
514
- box.pack_start(field_area, true, true, 0)
515
- box.pack_start(side_bar , true, true, 0)
584
+ box.pack_start(field_area, true , true, 0)
585
+ box.pack_start(side_bar , false, true, 0)
516
586
 
517
587
  signal_connect("destroy") {Gtk.main_quit}
518
588
  show_all
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaki-lifegame
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - obelisk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-11 00:00:00.000000000 Z
11
+ date: 2018-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gtk2