Der Code, der die ganze Zeit auf dem Beamer schon Raumschiffchen rumschubst:

slot_strings = {[0] = "EMPTY", [1]="WEAPON", [2]="DRIVE", [3]="ORE"}
 
on_timer_expired = nil
 
function print_slots()
	local s = get_slots()
	print("Slot contents:")
	for i=1,#s do
		print("  "..slot_strings[s[i]])
  end
	print("end.")
end
 
function count_ore()
	local s = get_slots()
	local num = 0;
 
	for i=1,#s do
		if(s[i]==3) then
			num = num+1
		end
	end
 
	return num
end
 
-- Mine until the requested number of ores has been reached
function mine_until_ore(n)
 
        local yield = coroutine.yield
 
	continue_mining = coroutine.wrap(function()
 
		-- Save the old mining handler 
		local old_mining_handler = on_mining_complete
 
		on_mining_complete = continue_mining
		while(count_ore() < n) do
			mine()
			yield()
		end
 
		on_mining_complete = old_mining_handler
	end)
	continue_mining()
end
 
function build_stupid_ships()
 
	local yield = coroutine.yield;
 
	print("Starting.")
 
	on_mining_complete = continue;
	on_build_complete = continue;
	on_manufacture_complete = continue;
	on_transfer_complete = continue;
	on_undocking_complete = continue;
 
	print("Set handler.")
 
	while true do
		print("Starting to mine");
		slots = {}
		for i=1,6 do
			print("Mining number " .. i)
			slots[i] = mine();
			yield();
		end
 
		print("Mining done.");
 
		print("Building ship.");
		ship = build_ship(slots[1], slots[2], slots[3], slots[4], slots[5], slots[6]);
		yield();
		print("Ship built!");
 
		slots = {}
		for i=1,6 do
			print("Mining for drive " .. i);
			slots[i] = mine();
			yield();
			print("Building drive " .. i);
			manufacture(slots[i], DRIVE);
			yield();
			print("Mounting drive " .. i);
			transfer_slot(slots[i], i);
			yield();
		end
 
		print("Uploading software.");
		send_data("on_being_undocked = function() \
			xmin, xmax, ymin, ymax = get_world_size(); \
			x = xmin + math.random(xmax-xmin); \
			y = ymin + math.random(ymax-ymin); \
			set_autopilot_to(x,y); \
			print(\"Launching towards \"..x..\", \"..y);\
		end");
		--send_data("on_being_undocked = function() set_autopilot_to(15000, 86000); end")
		--send_data("on_autopilot_arrived = function() target=find_closest(2000, PLANET); colonize(target); end")
		--send_data("on_colonize_complete = function() print(\"I am now a colony!\"); end")
 
		send_data("on_timer_expired = nil");
 
		print("All done. Undocking.");
		undock();
		yield();
	end
end
 
start_building_ships = function()
	continue = coroutine.wrap(build_stupid_ships);
	continue();
end
 
stop_building_ships = function()
	continue = nil
end
 
-- Das hier einkommentieren, um diesen code beim starten automatisch auszuführen.
-- start_building_ships();

Morwenna

Der Code mit dem Z0ttel seine Schiffchen rumschubst - enthält ein Framework um einfacher Schiffe zu bauen.

Github

5 Aufklärungsschiffchen bauen sieht damit so aus:

for i = 1, 5 do
  -- Schiff mit drei Slots bauen
  action.make(SHIP, 3)
  -- Dem Schiff ein Triebwerk mitgeben
  -- Gebaut wird das Triebwerk automatisch als Abhängigkeit.
  action.transfer(DRIVE, 1, function()
    -- Dem Schiff den Code mitgeben und als Persönlichkeit/Rolle "probe" starten.
    infect("probe")
  end)
  -- Schiff abdocken lassen
  action.undock()
end
sample_code.txt · Last modified: 2011/12/31 17:13 by z0ttel
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki