如何逐行打印数组元素并使用Ruby Curses选择每一行?

时间:2017-08-06 06:01:56

标签: ruby curses

我目前在Ruby Curses中打印0-3行。我还创建了一个带有动物名字的数组。 我的程序目前输出

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

import io.socket.client.IO;
import io.socket.client.Manager;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import io.socket.engineio.client.Transport;

public class LoiginActivity extends AppCompatActivity {
    private Socket socket;
    {
        try {
            socket = IO.socket("http://localhost:3000");

        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loigin);

        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
            @Override
            public void call(Object... args) {

                Log.i(TAG,"connected");
            }
        });
        socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Log.i(TAG, "Connectin error" + args[0]);
            }
        }); 

        socket.connect();   


    }
}

我希望它输出类似

的内容
dog + 0cat + 0bird + 0rat + 0
dog + 1cat + 1bird + 1rat + 1
dog + 2cat + 2bird + 2rat + 2
dog + 3cat + 3bird + 3rat + 3

有没有办法在不同的行上列出数组的每个元素,并且能够选择每一行?

这是我正在处理的功能

dog  + 0
cat  + 1
bird + 2
rat  + 3

我尝试过使用arr.each和arr.each_index,但它给了我相同的输出。

这是完整的程序。

更新

下面的菜单看起来像我想要的但是当按'w'或's'滚动菜单时,它会同时选择所有4个元素。有没有办法让它一次只能选择1个元素?

def draw_menu(menu, active_index=nil)
  4.times do |i|
    menu.setpos(i + 1, 1)
    menu.attrset(i == active_index ? A_STANDOUT : A_NORMAL)

    arr = []
    arr << "dog"
    arr << "cat"
    arr << "bird"
    arr << "rat"

    arr.each do |item|

      menu.addstr "#{item} + #{i}"
    end
  end
end

1 个答案:

答案 0 :(得分:1)

不确定4.times试图做什么,但我认为它是将相同的文本设置为屏幕上相同的位置4次。对于4中的每一个,如果当前的4个项目与active_index相同,则您将其中所有4个设置为相同的样式(A_STANDOUT而不是A_NORMAL)。

对我来说似乎有用的东西以及我认为的目的是:

def draw_menu(menu, active_index=nil)
  %w(dog cat bird rat).each_with_index do |element, index|
    menu.setpos(index + 1, 1)
    menu.attrset(index == active_index ? A_STANDOUT : A_NORMAL)

    menu.addstr("%-4s + #{index}" % element)
  end

  menu.setpos(5, 1) # set the cursor on the line after the menu items
end

然后在你的draw_info我无法看到文本输出的位置,但如果我将其更改为setpos(5, 1),则会在菜单后面的行显示:

def draw_info(menu, text)
  menu.setpos(5, 1)
  menu.attrset(A_NORMAL)
  menu.addstr text
end