Znasz te skrzynki systemu Windows, w których możesz zrobić tylko jedną rzecz?
Przejdźmy do następnego poziomu!
Wyzwanie
Utwórz okno dialogowe z przyciskiem, który podąża za kursorem wszędzie!
Okular
Nie można pobierać żadnych danych wejściowych. Może istnieć wyjście do STDOUT lub STDERR. Musisz otworzyć okno za pomocą jednego przycisku (tekst nie jest konieczny, ale tekst może być zawarty w tytule okna, oknie dialogowym lub przycisku). Przycisk musi być klikalny i musi zawsze podążać za kursorem, aby można go było tylko kliknąć. Po kliknięciu może zrobić wszystko, co chcesz, ale nie powoduj awarii komputera, ponieważ będę to testować ... Okno dialogowe musi pozostać otwarte, dopóki przycisk nie zostanie naciśnięty, ale nie musi zamknij, gdy przycisk jest zamknięty.
Założenia, które możesz zrobić
- Możesz założyć, że kursor pozostanie w obszarze roboczym rysunku.
- Możesz założyć, że okno pozostanie aktywne, ale nie wolno wyłączać go, dopóki przycisk nie zostanie naciśnięty.
Przykład pseudokodu
Oto przykładowy pseudokod:
Open Dialog Box
Add Button to Dialog Box at position X, Y
WHILE True:
SET Dialog Box to CursorX - X, CursorY - Y
W tym wyzwaniu nie można zapewnić przypadków testowych
Jest to wyzwanie dla golfa, więc wygrywa najkrótszy ważny zgłoszenie do 14 marca (Dzień Pi)!
C # (Windows Form Application),
200114 bajtówBez golfa
Stare 200-bajtowe rozwiązanie:
Bez golfa
źródło
Event += listener
? To niesamowite :-)+
operatora. Wciąż bardzo zwięzły.AutoHotkey,
122115 bajtówźródło
Java 7,
294289286264220 bajtów-22 bajty dzięki MouseInfo (skradzione z Zavady ) Nie lubię bibliotek awt>.>
Ogoliłem 44 bajty, usuwając tutaj główną metodę. Główna metoda nie jest potrzebna, jeśli jest uruchamiana jako aplet. Można to osiągnąć za pomocą „Run As Java Applet” środowiska Eclipse lub przez wyłączenie menedżera bezpieczeństwa i użycie appletviewer , który jest dostarczany z JDK (chyba że nadal możesz przeglądać aplety w przeglądarkach internetowych. Nie sądzę, że chrome na to pozwala) .
źródło
import java.awt.event.*;
*
wieloznaczny nie importuje rekursywnie podpakietów. Muszęjava.awt.event
dlaMouseAdapter
iMouseEvent
Java,
172199235 bajtówGra w golfa:
Nie golfowany:
Objaśnienie: Korzystam z inicjalizacji podwójnego nawiasu klamrowego w deklaracji nowego JDialog. To zapisało bajty, wykluczając rozszerzenie JDialog (pozwalając mi zapisywać bajty wykluczając
public
zmain
). W anonimowej podklasie JDialoga sprawiam, że jest ona widoczna (używa1>0
zamiasttrue
) i wywołujea()
, co jest konieczne, ponieważ inicjalizator ma błąd czasu kompilacji, jeśli pętla była w nim normalnie umieszczona. Zdecydowałem się użyć MouseInfo zamiast całego nadmiaru kodu związanego z dodawaniem detektora myszy.Edycja: Musiał zwiększyć liczbę o 27, aby dodać
add(new java.awt.Button());
. Myślałem, że JDialogs ma domyślny przycisk ze względów technicznych, ale wydaje mi się, że się mylę.Edycja 2: Musiałem dodać
setSize
i przesunąć położenie myszy, aby przycisk można było kliknąć.źródło
Zmodyfikowane przetwarzanie Js
102108 bajtówWypróbuj online! Właśnie zaktualizowałem mój link!
Po prostu rysuje prostokąt, który podąża za myszą, i klikniesz w nim mniejszy prostokąt, który zmienia kolor na czerwony. Działa, ale nie jest niesamowity. Ta wersja jest bardzo surowa na aparatach ortodontycznych i tak dalej :(
źródło
Clojure, 525 bajtów
Czy nie stworzyć prawdziwy dialog Windows. Zamiast tego buduje fałszywy i tworzy na środku atrapę (niedziałający) przycisk.
Było to dozwolone przez PO w komentarzach.
Korzysta z biblioteki Quil .
źródło
Mops / Slim + CSS / SCSS / LESS / Stylus + ES6 Javascript (98 Bytes)
Wypróbuj online!
Mops (10 bajtów UTF-8)
Rysik (18 bajtów UTF-8)
JS (70 bajtów UTF-8)
Fragment zdekompilowany, ulepszony i wyjaśniony:
źródło
Mathematica 226 bajtów
Pozycja myszy względem ekranu jest śledzona przez przód, a pozycja okna notatnika dialogowego jest przesuwana za każdym razem, gdy mysz się porusza. Całkiem proste, ale polecenia są bardzo długie pod względem liter, jak często w przypadku Mathematica. Kliknięcie OK zamknie okno dialogowe.
PS Po zakończeniu testowania uruchom to, aby usunąć opcję interfejsu użytkownika.
źródło
JavaScript (ES6) + HTML + CSS, 139 bajtów
HTML:
CSS:
JavaScript:
Ponieważ nie możesz pozycjonować okien dialogowych alertów, stworzyłem niestandardowe okno dialogowe w HTML. Javascript rejestruje moduł obsługi zdarzenia na obiekcie okna i ustawia położenie na współrzędne zdarzenia.
Wypróbuj online: https://jsfiddle.net/1yohswje/
źródło