susukinosu

エンジニアリングって、何だよ

20140604/Telnetでマインスイーパを「自動的に」「考えず」やりたい(表示修正版)


ある講義の課題で作成したプログラム。

Telnetでホスト(大学のあるサーバ)にポート指定して接続すると、

マインスイーパが遊べちゃうのだ!!!

さて、手動で初見クリアできたけれど

こいつを自動的にやらせるプログラム作ってね、と言われました。

Cでsocket()なりなんなり使わせようとしてるのかな???

と考えたけれどRubyで書いてみました。

#coding: utf-8

require 'net/telnet'

telnet = Net::Telnet.new("Host" => "hogehoge",
                         "Port" => 00000,
                         "Telnetmode" => true,
                         "Timeout" => 60)

ypoint, xpoint = 0

(1..10).each do |ypoint|
  (1..10).each do |xpoint|
    telnet.puts("#{ypoint},#{xpoint}") {|c| print c}
    telnet.waitfor(/200/) {|c| print c}
    if ypoint && xpoint > 9 then
      break
    end
  end
end

telnet.cmd("exit") {|c| print c}
telnet.close

最初、loopでやろうとしてたためかbreak判定を入れてたり。

ひっかかった点として、

telnet.puts("#{ypoint},#{xpoint}") {|c| print c}

の部分をはじめに

telnet.cmd("#{ypoint},#{xpoint}") {|c| print c}

にしていたため、2回目で動作を停止させてしまっていました。

cmdにしていると、相手方のプロンプトを待機するようになるため、

返ってこなければ…(お察し)

putsで送るだけ送っておくとなんとかなってしまった。

やばげなこーどだ