MOD解説 > ComputerCraft > サンプルプログラム





サンプルプログラムについて

赤文字は実際に利用する際には変更しなければならない部分です、このままでは動作しません。

v1.33以前に作られたTurtleが移動するプログラムをv1.4以降で動かす場合、実行前に十分な燃料補給をしておくか、燃料補給の処理を追加する必要があります。



サンプルプログラム


パスワードドア

正しいパスワードを入力するとN秒間レッドストーン動力を出力するプログラムです。
passwordに正しいパスワード、NにRS動力を出力する時間、OutputにRS動力を出力する面を入れて下さい。
write()内の\nは改行を意味します。

pass = (" password ")
write("Enter password.\n")
a = read()
if a == pass then
write("Password correct!\n")
rs.setOutput(" Output ", true)
sleep( N )
rs.setOutput(" Output ", false)
else
write("Password incorrect!\n")
end


NOT回路

Inputから入力を受けている時は何も出力せず、入力を受けてない時はOutputから出力するプログラムです。
プログラムを終了させる時はctrl+Tを利用して下さい。

if rs.getInput(" Input ") == false then
rs.setOutput(" Output ", true)
end
while true do
os.pullEvent("redstone")
if rs.getInput(" Input ") == true then
rs.setOutput(" Output ", false)
else
rs.setOutput(" Output ", true)
end
end

ランダムパルス回路

ランダムな間隔で0.2秒のパルスをOutputから出力するプログラムです。

while true do
a = math.random(1, 10)
if a == 5 then
rs.setOutput(" Output ", true)
sleep(0.2)
rs.setOutput(" Output ", false)
sleep(0.2)
else
sleep(0.4)
end
end


ワイヤレスレッドストーンスイッチ

送信側でプログラムを起動する度に受信側でレッドストーンのON/OFFが切り替わるプログラムです。
modemにはモデムを設置している面、idには受信側のコンピューターID又はラベル、OutputにはRS動力を出力する面を入れて下さい。

送信側プログラム
rednet.open(" modem ")
rednet.send( id , "")

受信側プログラム
rednet.open(" modem ")
while true do
os.pullEvent("rednet_message")
rs.setOutput(" Output ", true)
os.pullEvent("rednet_message")
rs.setOutput(" Output ", false)
end


鉄道建設プログラム

マイニングタートル専用の自動レール敷設プログラムです。
プログラムを起動して、数字を入力するとそのブロック数レールを敷設します。
障害となるブロックは全て採掘し、足場が無ければ設置します。
タートルのインベントリの1番目に足場となるブロック、2番目にレールを入れて下さい。
なおスタックの都合上このプログラムでは65ブロック以上の敷設はできません。
またMOBにぶつかったりした場合正常に動作しない恐れがあります。

function reversedirection()
turtle.turnRight()
turtle.turnRight()
end

function dig(n)
turtle.up()
for i=1,n do
while turtle.detect() == true do
turtle.dig()
sleep(0.5)
end
turtle.forward()
turtle.digDown()
end
turtle.down()
end

function construction(n)
for i=1,n do
if turtle.detectDown() == false then
turtle.select(1)
turtle.placeDown()
turtle.up()
else
turtle.up()
end
turtle.select(2)
turtle.placeDown()
turtle.forward()
turtle.down()
end
end

a = read()
dig(a)
reversedirection()
construction(a)
reversedirection()


Turtle遠隔操作プログラム

WirelessTurtleを遠隔操作するプログラムです。
送信側のインターフェースを開いておく必要がある為実用性は疑問ですが、
rednetAPIを用いたプログラムの参考にして頂ければと思います。
modemにはモデムの設置面、idには受信側Turtleのid又はラベルを入れて下さい。

送信側プログラム
function keyconvert(k)
if k == 17 then
return "Forward"
elseif k == 31 then
return "Back"
elseif k == 30 then
return "TurnLeft"
elseif k == 32 then
return "TurnRight"
elseif k == 42 then
return "Down"
elseif k == 57 then
return "Up"
elseif k == 18 then
return "Exit"
else
return "This key is not assigned."
end
end

print("w = Forward\ns = Back\na = TurnLeft\nd = TurnRight\nshift = Down\nspace = Up\ne = Exit")
rednet.open(" modem ")
while true do
a, b = os.pullEvent("key")
c = keyconvert(b)
if c == "This key is not assigned." then
print(c)
else
rednet.send( id , c)
print(c)
if c == "Exit" then break end
end
end

受信側プログラム
rednet.open("right")
while true do
a, b = rednet.receive()
if b == "Exit" then break end
if b == "Forward" then
turtle.forward()
elseif b == "Back" then
turtle.back()
elseif b == "TurnLeft" then
turtle.turnLeft()
elseif b == "TurnRight" then
turtle.turnRight()
elseif b == "Down" then
turtle.down()
elseif b == "Up" then
turtle.up()
end
end


チェック柄床・壁建設プログラム

指定した3種類のブロックで、タートルにギンガムチェック柄の床または壁を建設させるプログラムです。
インベントリの奇数番目のスロット、2, 6, 10, 14番目のスロット、および4, 8, 12, 16番目のスロットにはそれぞれ同種のブロックを配置してください。
建設の途中でブロック・モブなどにぶつかった場合、建設は中断されます。

関数定義部分(実行プログラムを開始する前に別のプログラムとして実行することをおすすめします。)
function turtle_go(f)
if f then
b = turtle.forward()
else
b = turtle.up()
end
if not b then
if turtle.getFuelLevel == 0 then
print("Fuel_Empty.")
os.queueEvent("terminate")
else
print("Faild_to_Move.")
os.queueEvent("terminate")
end
end
end

function checkItemCount(n)
if turtle.getItemCount == 0 then
if n == 1 then
for i = 1, 15, 2 do
if turtle.getItemCount(i) > 0 then
turtle.select(i)
turtle.transferTo(1)
turtle.select(1)
break
end
if i == 15 then
print("Materials_Empty.")
os.queueEvent("terminate")
end
end
else
for i = n, (n + 12), 4 do
if turtle.getItemCount(i) > 0 then
turtle.select(i)
turtle.transferTo(n)
turtle.select(n)
break
end
if i == n + 12 then
print("Materials_Empty.")
os.queueEvent("terminate")
end
end
end
end
end

function construct_line(type, count, odd)
for i = (odd + 1), (odd + count) do
if i % 2 == 1 then
turtle.select(1)
checkItemCount(1)
turtle.placeDown()
else
if type == 0 then
turtle.select(2)
checkItemCount(2)
turtle.placeDown()
else
turtle.select(4)
checkItemCount(4)
turtle.placeDown()
end
end
turtle_go(true)
end

function turtle_turn(mode)
if mode == 0 then
turtle.turnLeft()
turtle_go(true)
turtle.turnLeft()
turtle_go(true)
elseif mode == 1
turtle.turnRight()
turtle_go(true)
turtle.turnRight()
turtle_go(true)
else
turtle.turnRight()
turtle.turnRight()
turtle_go(false)
turtle_go(true)
end
end

function construct_plane(x, y, mode)
for i = 1, y do
if mode == "floor" then
if i % 2 == 1 then
construct_line(1, x, 0)
turtle_turn(0)
else
construct_line(2, x, x % 2)
turtle_turn(1)
end
elseif mode == "wall" then
if i % 2 == 1 then
construct_line(1, x, 0)
turtle_turn(2)
else
construct_line(2, x, x % 2)
turtle_turn(2)
end
else
print("Invaild_Mode.")
os.queueEvent("terminate")
end
end
print("Construction_Ended.")
end

実行部分
xに建設部分の幅、yに建設部分の長さまたは高さをそれぞれ数値で、modeにfloor(床モード)またはwall(壁モード)を入れてください。
construct_plane( x , y , " mode ")

簡易クァーリプログラム(個人用)


プログラムを動かす前にタートルのスロット2(1段目の左から2番目)に丸石を最低5つ入れてください。捨てるブロックの指定として使います。また、掘った穴を最後に埋めるためにも使います。
プログラムを起動させると現在高度を尋ねられます。打ち込むと不足分の石炭の数を計算してくれます。足りなかったら燃料を補充してから、プログラムを再度起動してください。
最終確認の質問で1を入力すると岩盤までタートルが掘ってくれます。岩盤に到達すると出発点まで戻り、イベントリ内(3~16スロット)にある丸石を捨ててから事故防止のため、穴の入り口を埋めてくれます。

function dig_program()
a = 0
while turtle.digDown() or turtle.detectDown()==false do
turtle.down()
turtle.dig()
a = a + 1
for i=1,3 do
turtle.turnRight()
turtle.dig()
end
end
for i=1,a-1 do
turtle.up()
end
turtle.select(2)
turtle.place()
for i=1,3 do
turtle.turnRight()
turtle.place()
end
turtle.up()
for i=3,16 do
turtle.select(2)
if turtle.compareTo(i) then
turtle.select(i)
turtle.dropDown()
end
end
turtle.placeDown()
turtle.select(1)
print("mission completed!")
end
print("enter current z")
height = read()
d_b = (height - 5) * 2
print("move blocks:"..d_b)
if (turtle.getFuelLevel() < d_b) then
print("short coal number:"..(d_b - turtle.getFuelLevel()) / 80)
else
print("current fuel level is "..turtle.getFuelLevel()..", go(1) or stop(0)?:")
if "1" == read() then
dig_program()
else
print("exit")
end
end

空洞、水、溶岩があってもちゃんと動いてくれます。しかし、運悪く下に生物がいる場合、現在高度の計算が狂ってしまうため、元の高度まで戻ってくれません。
無駄な記述が多いので、改変して使ってください。また、変な英語になっています。


コメント

コメント欄の運営・編集方針に関してはコメント欄方針を参照してください。
このコメント欄はwikiの情報充実のため、追記がしやすいよう設けた物なので、編集が苦手な方は以下のコメントフォームへ書き込んで頂ければ有志でページに取り込みます。
編集に関わらない質問は一切受け付けておらず、一律して削除されます。
注意書きをよく読んだ上で、質問掲示板または非公式日本ユーザーフォーラムをご利用ください。
Wikiの運営に関連する話はWiki運営掲示板、雑談等は非公式日本ユーザーフォーラムにてお願いします。
表示される親コメントには限りがあるので、返信の際は返信したいコメント横のチェックを付けて返信するようご協力お願いします。
  • ランダムパルス回路のプログラムの3行目のif a = 5thenのプログラムは間違っています。正解はif a == 5 thenです。 - 趣味はプログラム作り 2012-07-07 23:32:01
  • == - 趣味はプログラム作り 2012-07-29 15:01:42
  • CCでBCのパイプラインの変わり - どこかの誰かさん 2012-11-12 11:53:19
  • ↑の追記 のプログラム組めました、 - 名無しさん 2012-11-12 11:54:33
  • 誰かモニターの利用のチュートリアル書いていただけませんか><? - 名無しさん 2013-01-13 16:46:23
  • 改行できません>< - namae 2013-10-13 23:02:45
  • どなたか丸石を捨てない簡易クアーリーがたのプログラムかいていただきませんか?。。 - 名無しさん 2013-11-01 21:04:24
    • ここは質問をする場所ではありません。 - 七四さん 2014-01-06 19:34:52
  • すみませんパスワードドアのプログラムを入れてプログラム名をコマンド画面(?)で入力したのですが bios:339: [string "<プログラム名>] :4: '=' expected と出て実行出来ませんどうしたらいいでしょう? - 名無しさん 2014-01-29 17:41:29
    • 4行目、あるいはその前の行あたりを入力ミスしたのでは? たとえば4行目のthenが抜けているとか。 - 名無しさん 2014-02-10 17:25:00
  • F - 名無しさん 2014-02-08 15:40:37
  • ぼくは、動力を出力する「面」とはどこかがわかりません。よかったらぜひ教えてください。 - マイクラ&東方オタク 2014-07-19 14:29:12
名前:

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|
Wikiのガイドライン
必ずお読みください!

基本事項



プラットフォーム



アイテムデータ



ゲームデータ



ワールド



Tips



ADVANCE



マルチプレイ



リンク





Wiki運営



その他





カウンタ


合計
-

トップページ
今日 : -
昨日 : -

更新履歴


取得中です。
※「ログ」「アーカイブ」「コメント」のページはここの履歴に表示されませんので、「更新履歴」および「コメント」から参照してください

人気ページ