local xPos,yPos = 15,6 local mouseX,mouseY = 15,2 local monitor = peripheral.wrap("top") or error("Unable to wrap monitor!",0) local function closest(x,y) local nearX,nearY = x,y local nearestDistance = math.huge for xOffset = -1,1 do for yOffset = -1,1 do if (xOffset==0 or yOffset==0) and yOffset~=xOffset then local dx = x+xOffset-xPos local dy = y+yOffset-yPos local distance = math.sqrt(dx^2+dy^2) if distance < nearestDistance then nearX = x + xOffset nearY = y + yOffset end end end end return nearX,nearY end local function draw() monitor.clear() monitor.setCursorPos(mouseX,mouseY) monitor.write("X") monitor.setCursorPos(closest(mouseX,mouseY)) monitor.write("o") monitor.setCursorPos(xPos,yPos) monitor.write("T") end local updateRate = 1/5 local update = os.startTimer(updateRate) while true do local ev,p1,p2,p3,p4,p5 = os.pullEvent() if ev == "timer" and p1 == update then -- time to draw update = os.startTimer(updateRate) draw() elseif ev == "monitor_touch" then -- p1 = side of monitor mouseX = p2 mouseY = p3 end end