0

我正在尝试创建一个图像生成器,它可以创建一个带有参数的网格,其中 x 代表行,y 代表列作为坐标。我现在想要做的是让命令行通过输入命令和参数来控制程序到目前为止我将调用的方法我的代码如下所示。我该怎么做才能让它工作。例如创建一个新图像 I,5,6。

命令行:

    require 'pixel'

    print "Hello please enter a command in : >> "
    command = gets.chomp

    case command
    when "i", "I"
     i = Image.new(m=5,n=6)
    when "c","C"
     i.clear
    when "l","L" 
     i.add_color(x,y,c) 
    when "v","V" 
     i.vertical(x,y1,y2,c)
    when "h","H" 
     i.horizontal(x1,x2,y,c)
    when "f","F" 
     i.fill(x,y,c)
    when "s","S" 
     i.s
    when "x","X" 
     exit
    else
      puts "Opps command does not exist"
    exit
    end

Ruby 图像生成器代码:

    class Image
      attr_accessor :m,:n

    def initialize(m,n)
     @m = m
     @n = n
     @image_array = Array.new(@n) {Array.new(@m).fill{(0)}}
    end

    def add_color(x,y,c)   
     x = x 
     y = y - 2
     @image_array[x][y] = c  
    end  

   def vertical(x,y1,y2,c)
    x = x - 1
    y1 = y1 - 1
    y2 = y2 - 1
    @image_array[y1..y2].each {|row| row[x] = c }
   end

  def horizontal(y,x1,x2,c)
   y = y - 2
   z = x2...x1
  @image_array[y].fill(c,z) 
 end

 def fill(x,y,c)
  x = x - 1 
  y = y - 1
  s = x * y
  s.upto(1).to_a
  y.upto(1).to_a

  @image_array[1..s].each {|r| r[y]=c }
  @image_array[1..s].fill(c,s)
end

def s
 p @image_array
end

def clear(m,n)
 @image_array = Array.new(@n) {Array.new(@m).fill{(0)}}
end
end

阻止它工作的命令行代码有什么问题?

4

2 回答 2

0

您发现命令行参数位于全局变量/数组 ARGV

http://www.ruby-doc.org/docs/ProgrammingRuby/html/rubyworld.html

有几个库可以帮助您进行命令行解析。一个较旧的,已经是标准库的一部分,是 optparse。

这里我做了一个如何使用它的例子:http: //pleac.sourceforge.net/pleac_ruby/userinterfaces.html

于 2012-10-08T23:05:26.410 回答
0

看看 optparse 库

http://ruby.about.com/od/advancedruby/a/optionparser.htm

于 2012-10-08T23:15:11.120 回答