Utwórz program do malowania!


51

Wprowadzenie

Pewnego dnia pokazałeś swojemu dziecku, jak rysować na komputerze. Wpisujesz mspaint.exew pasku uruchamiania. Ku Twojemu przerażeniu jest napisane: „Brak elementów pasujących do wyszukiwania”. Musisz stworzyć prostą wersję farby, aby dziecko mogło rysować!

Wyzwanie

Musisz stworzyć prosty program do rysowania. Aby to zrobić, otwórz białe okno wyświetlacza (większe niż 99 x 99 pikseli). Za każdym razem, gdy mysz zostanie wciśnięta, zmień piksel na myszy.

To jest , więc wygrywa najkrótsza odpowiedź w bajtach!


8
Czy to muszą być piksele? czy może to być 99 x 99 kwadratów?
fəˈnɛtɪk

2
Jak długo trzeba biegać?
Rɪᴋᴇʀ 20.04.17

2
Gdy TI-Basic Penrobi dokładnie to: o
Timtech,

1
@Riker powinien działać przez co najmniej 10 sekund, najlepiej na zawsze
pydude

1
Czy jest większy niż 99 × 99, więc musimy użyć trzech cyfr w zapisie dziesiętnym dla każdego wymiaru? Czy poprawne byłoby 99 × 100 lub 100 × 99?
Sebastian Simon

Odpowiedzi:


87

8086 kod maszynowy, 32 31 28 26 bajtów

00000000  b8 0f 00 cd 10 b8 02 10  ba 18 01 cd 10 b8 03 00  |................|
00000010  cd 33 4b b8 01 0c eb f3  3f 00                    |.3K.....?.|
0000001a

Zakłada obecność karty graficznej VGA i dowolnego sterownika myszy zgodnego z Microsoft.

-2 bajty dzięki @berendi!

zrzut ekranu

Jak to działa:

            |   org 0x100
            |   use16
b8 0f 00    |       mov ax, 0x000f      ; set screen mode: 640x350 monochrome
cd 10       |       int 0x10            ; call video bios
b8 02 10    |       mov ax, 0x1002      ; set palette
ba 18 01    |       mov dx, palette     ; pointer to palette data
cd 10       |   @@: int 0x10            ; call video bios
b8 03 00    |       mov ax, 0x0003      ; get mouse position in (CX, DX) and button status in BL
cd 33       |       int 0x33            ; call mouse driver
4b          |       dec bx              ; if no buttons pressed, --BX = 0xFFFF (invalid page)
b8 01 0c    |       mov ax, 0x0c01      ; plot pixel with color AL at (CX, DX) in page BH
eb f3       |       jmp @b              ; repeat
3f 00       |   palette db 0x3f, 0x00   ; palette in 2:2:2 rgb. color 0 = white, 1 = black.
            |                           ; this should be a 17-byte struct, but we only care about the first two colors here

To wszystko. Nie wymaga magii, tylko kilka wywołań funkcji.


1
Czysty, przejrzysty i sprytny kod. Bardzo ładnie wykonane! Nigdzie nie widzę, że można to dalej zoptymalizować pod kątem wielkości. Z jakiegoś powodu, gdy próbowałem tego za pomocą sterownika CuteMouse, rysuje się bez przytrzymywania przycisku myszy, ale może to być po prostu problem z tym, że CuteMouse nie jest w 100% kompatybilny z Microsoftem. Z którego sterownika korzystałeś podczas testów?
Cody Gray

2
Hmm Po uruchomieniu kodu za pomocą debugera (oczywiście stary dobry DEBUG.COM!) Wydaje się, że nie jest to problem ze sterownikiem CuteMouse. Bez przytrzymania przycisku INT 33hzwraca 0 BX, a to zmniejsza się do FFFFh zgodnie z oczekiwaniami, ale linia jest nadal rysowana. Być może dzieje się tak, ponieważ tryb 11h ma tylko jedną stronę wideo, a nieprawidłowy numer strony jest automatycznie naprawiany? Testuję na VM VirtualBox, więc może właśnie to robi jego implementacja systemu BIOS.
Cody Gray

2
Wygląda na to, że winny jest tutaj VirtualBox, po prostu całkowicie ignoruje numer strony: virtualbox.org/browser/vbox/trunk/src/VBox/Devices/Graphics/…
user5434231

2
Sam Bill Atkinson byłby z tego dumny. Wspaniała praca.
Wossname

4
-2 bajty usuwają ostatni int 0x10, z jmppowrotem do drugiego int 0x10zamiast. Odsunięcie jmppozostaje takie samo, dostosuj adres inmov dx
berendi - protestując

25

Scratch, 10 bajtów Scratch

Scratch został praktycznie zaprojektowany do takich rzeczy.

Wypróbuj online!


Czy to faktycznie robi piksele? Ponadto, jeśli klikniesz mysz szybko i przytrzymasz ją przez chwilę, spowoduje to inne wyniki (bez przesuwania go oczywiście). Myślę, że to unieważnia.
Rɪᴋᴇʀ

19
To nie jest 10 bajtów Scratch, zgodnie z obecnie używaną oceną.
Okx

2
Prawdopodobnie powinieneś użyć aplikacji scratchblocks do konwersji na tekst lub na rozmiar pliku SB2.
Matthew Roh,

2
Używam punktacji, której użyłem we wcześniejszych odpowiedziach na zarysowania. Czy ktoś może powiązać mnie z bieżącą punktacją? @Okx
dkudriavtsev

8
@Mendeleev nie jestem pewien, ale prawdopodobnie odnosi się on do tego systemu punktacji Scratch .
FreeAsInBeer

20

HTML + JavaScript (ES6), 66 64 62 bajtów

HTML

<canvas id=c>

JavaScript

onclick=e=>c.getContext`2d`.fillRect(e.x,e.y,1,1)

Zaoszczędzono 2 bajty dzięki Gustavo Rodriguesowi i 2 bajty od Kudłatego.

onclick=e=>c.getContext`2d`.fillRect(e.x,e.y,1,1)
/* This css isn't needed for the program to work. */
*{margin: 0}
#c{border:1px solid black}
<canvas id=c>


Jak o <canvas id=c>?
Gustavo Rodrigues

2
To faktycznie umieszcza kropkę nie tam, gdzie idzie mój kursor, ale w prawym dolnym rogu strzałki. Czy to celowe?
Anopleksjan

Zaoszczędź 2 bajty, upuszczając c.od początku swojego JS. @Anopleks, to domyślne ciało marginodrzucające rzeczy o kilka pikseli.
Kudłaty

4
Jak sprawić, żeby to działało? Klikam w obszarze wyników i nic nie robi.
numbermaniac

1
@Anoplexian To znany problem; nie ma niezawodnego sposobu na ustalenie względnej pozycji kursora myszy na elemencie (brakuje dużych, specyficznych dla przeglądarki funkcji, które zawodzą, gdy wprowadzany jest nowy typ wypełnienia CSS).
wizzwizz4

17

C + Win32, 209 200 195 bajtów

Dzięki, Cody i Quentin! Miałem nadzieję, że się go pozbędę, #include <windows.h>ale prowadzi to do różnego rodzaju błędów. Przynajmniej działa poprawnie z wieloma monitorami ...

#include<windows.h> 
struct{int h,m,w,x:16,y:16;}m;h;main(){for(h=CreateWindow("EDIT","",1<<28,0,0,199,199,0,0,0,0);GetMessage(&m,h,0,0);m.m^513?DispatchMessage(&m):SetPixel(GetDC(h),m.x,m.y,0));}

Poprzedni kod:

#include<windows.h> 
main(){MSG m;HWND h;for(h=CreateWindow("EDIT","",1<<28,0,0,199,199,0,0,0,0);GetMessage(&m,h,0,0);m.message^513?DispatchMessage(&m):SetPixel(GetDC(h),LOWORD(m.lParam),HIWORD(m.lParam),0));}

wprowadź opis zdjęcia tutaj


2
Nie mogę przetestować teraz, bu Myślę, że można połączyć deklarację hdo forinicjatora, aby zapisać dwa bajty :)
Quentin

Zdaję sobie sprawę, jest to kod golf i pożądane może być tutaj, ale LOWORDi HIWORDto nie jest poprawny sposób wyodrębnić współrzędne kursora z zapakowany LPARAM. Należy używać GET_X_LPARAMi GET_Y_LPARAM, inaczej dostaniesz błędne wyniki z wieloma monitorami.
Cody Gray

@Quentin, który będzie działał w c ++, ale nie w c. Mógłbym użyć c ++, ale wtedy napisałbym, int mainco dodałoby 4 dodatkowe bajty.
Johan du Toit,

@Cody, uczciwy komentarz. Nie mam systemu z wieloma monitorami do przetestowania, ale czy uważasz, że użyjesz go (short)LOWORD()i (short)HIWORD()rozwiążesz problem?
Johan du Toit,

To, co sugerował Quentin, działa dobrze w każdej nowoczesnej wersji C, w tym w C99. Oczywiście używasz kompilatora C firmy Microsoft, który utknął w C89 / 90, z regułami określania zakresu zmiennych. C89 jest także powodem, dla którego możesz pominąć maintyp zwracany przez funkcję (z powodu intreguły niejawnej ). Jedynym problemem jest pominięcie return 0;przyczyn niezdefiniowanego zachowania w C89 i MSVC. W C99 i C ++ potrzebujesz typu zwracanego dla main, ale return 0;jest niejawny, a zatem niepotrzebny. Cóż, język nie został stworzony do gry w golfa kodowego. :-)
Cody Gray

10

Przetwarzanie, 98 79 bajtów

19 bajtów zapisanych dzięki @dzaima

void setup(){background(-1);}void draw(){if(mousePressed)point(mouseX,mouseY);}

Wyjaśnienie (nieaktualne)

void setup() {
  size(100,100);            // size of the sketch
  background(-1);           // set the background to white
                            // 1 byte shorter than background(255);
}

void draw(){}               // required for mousePressed to work

void mousePressed() {       // function that is called whenever the mouse is pressed
  point(mouseX, mouseY);    // draw a point at the mouse's coordinates
                            // the colour is set to black as default
}

kliknięcie


@dzaima Nie wiedziałem, że size(100,100);nie trzeba o tym wspominać, dzięki! (też nie wiem, dlaczego tego nie widziałem if(mousePressed))
Kritixi Lithos

7

JavaScript ES6, 126 bajtów

Testowane w chromie.

onclick=e=>document.body.outerHTML+=`<a style=position:fixed;top:${e.y}px;left:${e.x}px;width:1px;height:1px;background:#000>`

Wypróbuj online!

onclick=e=>document.body.outerHTML+=`<a style=position:fixed;top:${e.y}px;left:${e.x}px;width:1px;height:1px;background:#000>`


7

Haskell, 189 184 170 169 bajtów

import Graphics.Gloss.Interface.Pure.Game
main=play FullScreen white 9[]Pictures(#)(\_->id)
EventKey(MouseButton LeftButton)Down _(x,y)#l=Translate x y(Circle 1):l
_#l=l

To korzysta z Glossbiblioteki (v1.11). Otwiera okno pełnoekranowe i maluje czarne piksele (w rzeczywistości okręgi o promieniu 1), naciskając lewy przycisk myszy. Naciśnij, ESCaby wyjść.

Jak to działa:

play                 -- handles the whole event handling, screen update, etc. process
    FullScreen       -- use a full screen window
    white            -- use a white background
    9                -- 9 simulation steps per second (see simulation handler below)
    []               -- the initial world state, an emtpy list of circles
    Pictures         -- a function to turn the world state into a picture.
                     -- The world state is a list of translated circles and
                     -- "Pictures" turns this list into a single picture
    (#)              -- event handler, see below
    (\_->id)         -- simulation step handler. Ignore time tick and return the
                     -- world state unchanged. More readable: "\tick world -> world"

EventKey ... # l=... -- if the left mouse button is pressed, add a circle with
                     -- radius 1 translated to the current position of the mouse
                     -- to the world state
_#l=l                -- on all other events do nothing

Edycja: @zakrętem, aby włączyć counterclockwis powiedział mi o najnowszej wersji połysku, która oszczędza 5 bajtów podczas korzystania z pełnoekranowych okien. Dzięki!


FullScreenma zerowy połysk> = 1,11, zmniejszając wynik o 5 ( unknown GLUT entry glutInitchociaż pojawia się błąd , ale prawdopodobnie moja konfiguracja glut po prostu nie działa; nigdy nie używałam jej na tym komputerze).
przestał się obracać przeciwnie do zegara

@ceasedtoturncounterclockwis: ah, dzięki za podpowiedź. Miałem 1.10.2.3 w moim systemie i teraz zaktualizowałem do najnowszej wersji.
nimi 21.04.17

5

SmileBASIC 2, 52 51 bajtów

To jeden biegnie w tatusia SmileBASIC'S, Petit komputer (i jest jeden dwa bajt krótszy.)

PNLTYPE"OFF
GPAGE 1GCLS 15@A
GPSET TCHX,TCHY
GOTO@A

Wyjaśnienie:

PNLTYPE"OFF       'turn off keyboard
GPAGE 1           'set graphics to lower screen
GCLS 15           'clear with color 15 (white)
@A                'loop begin
GPSET TCHX,TCHY   'set black pixel at draw location
GOTO@A            'loop

Możesz zapisać 1 bajt, GPSET TCHX,TCHY:GOTO@Aponieważ domyślnym kolorem jest 0 (przezroczysty).
maja

4

JavaScript + jQuery 138 bajtów

d=$(document.body).click((e)=>d.append("<div style='background:black;width:5;height:5;position:fixed;top:"+e.pageY+";left:"+e.pageX+"'>"))

Sprawdź to online!

Dodanie obsługi kliknięcia i przeciągnięcia byłoby proste, ustawiłbyś zmienną, jednak zgodnie z instrukcjami i w celu skrócenia kodu nie jest on obsługiwany: „Za każdym razem, gdy mysz jest wciśnięta, zmień piksel myszy na czarny” . Zinterpretowałem instrukcję jako clickwydarzenie.


3
Cześć! Następnym razem powinieneś cofnąć usunięcie starej odpowiedzi zamiast nowej. Obawiam się również, że musi to działać w określonym środowisku - jeśli jest to javascript waniliowy, musisz dołączyć liczbę bajtów jQuery do swojego zgłoszenia. Możesz nazwać to zgłoszenie „JavaScript + jQuery”, i byłoby dobrze: możesz założyć, że jQuery jest zainstalowany. W chwili obecnej ta odpowiedź jest bardziej odpowiedzią „HTML” niż javascript.
Conor O'Brien,

1
@ ConorO'Brien Zrobię to następnym razem. Zaktualizowałem odpowiedź, używając twoich sugestii.
Neil,

4

SpecBAS - 61 59 bajtów

1 CLS 15 
2 IF MOUSEBTN=1 THEN PLOT MOUSEx,MOUSEy
3 GO TO 2

Czarny jest już domyślnym kolorem pióra, ale tło ma zwykle paskudny odcień szarości, więc CLS 15ustawia go na jasną biel.

wprowadź opis zdjęcia tutaj


Większość podstawowych wariantów nie wymaga spacji między numerem polecenia a kodem w tym wierszu.
Pavel

SpecBAS dodaje wszystkie spacje po wciśnięciu klawisza return (w tym GOTOstawaniu się GO TO)
Brian

1
Ale czy możesz usunąć spacje i nadal działać poprawnie? Jeśli tak, nie liczysz ich.
Pavel

Jeśli użytkownik nie ma nic przeciwko malowaniu tylko na czarno, dlaczego miałby przeszkadzać na szarym tle?
Cees Timmerman

3

SmileBASIC, 70 58 53 bajtów

XSCREEN 4GCLS-1@L
TOUCH OUT,X,Y
GPSET X,Y+240,0GOTO@L

Wyjaśniono:

XSCREEN 4 'display one graphics page on both screens
GCLS -1 'fill screen with white
@L 'loop
TOUCH OUT,X,Y 'get touch location
GPSET X,Y+240,0 'draw black pixel at touch position, offset by the height of the top screen.
GOTO @L 'loop

3

Clojure, 91 71 bajtów

-20 bajtów dzięki @cfrick za wskazanie, że mogę użyć usedo zmniejszenia importowania.

(use 'quil.core)(defsketch P :mouse-dragged #(point(mouse-x)(mouse-y)))

Korzysta z biblioteki Quil . Rysuje kropkę przy każdym przeciągnięciu myszy.

Zasadniczo odpowiedź na przetwarzanie, ponieważ Quil jest opakowaniem przetwarzania dla Clojure.

(q/defsketch P ; Start a new drawing

             :mouse-dragged ; Attach a mouse drag listener
             ; that draws a point at the current mouse location
             #(q/point (q/mouse-x) (q/mouse-y))) 

wprowadź opis zdjęcia tutaj


71:(use 'quil.core)(defsketch P :mouse-dragged #(point(mouse-x)(mouse-y)))
Por.

@cfrick LOL, zawsze o tym zapominam, useponieważ jest to „niewłaściwe”. Dziękuję Ci.
Carcigenicate

3

Tcl / Tk, 45 46 51 57

gri [can .c]
bind . <1> {.c cr o %x %y %x %y}

pentagram


To jeden fugly pentogram
Johan

1
@JohanduToit: Nie lubisz gwiazd?
sergiol

2

Java 7, 353 bajtów

import java.awt.*;import java.awt.event.*;class M{static int x,y;public static void main(String[]a){Frame f=new Frame(){public void paint(Graphics g){g.drawLine(x,y,x,y);}};f.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent e){x=e.getX();y=e.getY();f.repaint(x,y,1,1);}});f.setBackground(Color.WHITE);f.resize(500,500);f.show();}}

Nie golfowany:

import java.awt.*;
import java.awt.event.*;

class M {
    //store the last point
    static int x, y;
    public static void main(String[] a) {
        Frame f = new Frame() {
            @Override
            public void paint(Graphics g) {
                g.drawLine(x, y, x, y);
            }
        }
        f.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                x = e.getX();
                y = e.getY();
                //repaint only the "new pixel"
                f.repaint(x, y, 1, 1);
            }
        });
        //default background is grey
        f.setBackground(Color.WHITE);
        f.resize(500, 500);
        f.show();
    }
}

2

Python2 i Python3, 82 bajty (lub 77?)

from turtle import *;up();onscreenclick(lambda x,y: goto(x,y)or dot(1));mainloop()

Korzystanie z modułu Turtle nie jest takie złe :)

Nie golfowany:

import turtle
turtle.up()

def fun(x, y):
    turtle.goto(x,y)
    turtle.dot(1)

turtle.onscreenclick(fun)
turtle.mainloop()

Jeśli linie między kropkami są w porządku, można w rzeczywistości zapisać 5 bajtów:

from turtle import *;onscreenclick(lambda x,y: goto(x,y)or dot(1));mainloop()

from turtle import *; up (); onclick (lambda * x: goto (* x) or dot (1)); done ()
innisfree 24.04.17.04

To 70 bajtów
innisfree

2

Excel VBA, 62 bajty

Anonimowa funkcja bezpośredniego okna VBE, która pozwala użytkownikowi rysować na dowolnym arkuszu, po prostu wybierając go

Cells.RowHeight=48:Do:DoEvents:Selection.Interior.Color=0:Loop

Przykładowe dane wyjściowe

wprowadź opis zdjęcia tutaj


1

HTML + JavaScript, 152 148 bajtów

<body onclick="document.body.innerHTML+='<x style=position:fixed;width:1;height:1;left:'+event.clientX+';top:'+event.clientY+';background:#000;>'"/>

1

Turing , 77 bajtów

var x,y,b:int loop mousewhere(x,y,b)if b=1then drawdot(x,y,1)end if end loop

Nie golfowany:

var x,y,b : int      
loop
  mousewhere(x,y,b)  % Set (x,y) to mouse co-ords, and b to 1 or 0 indicating if the button is pressed
  if b=1 then
    drawdot(x,y,1)  % Draw a black pixel at (x,y)
  end if
end loop

1

HTML + CSS + JavaScript (ES6), 8 + 31 + 64 = 103 bajty

Zabawa z CSS box-shadow!

s='0 0 0',onclick=e=>p.style.boxShadow=s+=`,${e.x}px ${e.y}px 0`
*{margin:0;width:1px;height:1px
<p id=p>

HTML + CSS + JavaScript (ES6), 8 + 22 + 69 = 99 bajtów

Ten próbuje zrównoważyć domyślne marginz <body>elementu, lecz może on być różny w różnych przeglądarkach i stylów agenta użytkownika. Testowany pomyślnie w Chrome.

s='0 0 0',onclick=e=>p.style.boxShadow=s+=`,${e.x-8}px ${e.y-16}px 0`
*{width:1px;height:1px
<p id=p>

HTML + CSS + JavaScript (ES6), 8 + 18 + 69 = 95 bajtów

Piksele w tym mogą wydawać się większe, ponieważ są rysowane przy współrzędnych półpiksela.

s='0 0 0',onclick=e=>p.style.boxShadow=s+=`,${e.x}px ${e.y}px 0 .5px`
*{margin:0;width:0
<p id=p>


1

TI-Basic, 1 bajt

Pt-Change(

Jestem pewien, że większość z was z TI Calcs pomyślała o Penpoleceniu, ale okazuje się, że nie jest to tokena, więc sensowne byłoby policzenie go jako 3 bajtów. O interaktywnej wersji można przeczytać Pt-Change(na stronie http://tibasicdev.wikidot.com/pt-change


To nie odpowiada na wyzwanie: cielęta TI nie są w stanie obsłużyć danych myszy, o ile mi wiadomo.
Grimmy,

2
@Grimy Jeśli nalegasz, zawsze możesz użyć biblioteki usb8x, aby uzyskać wejście myszy USB. Ale jestem pewien, że wystarczy domyślna nawigacja kursorem.
Timtech

1

Lua (framework love2d), 180 bajtów

wersja golfowa

l=love v,g,m,p=255,l.graphics,l.mouse,{}d=m.isDown function l.draw()g.setBackgroundColor(v,v,v)if d(1)or d(2)then p[#p+1],p[#p+2]=m.getPosition()end g.setColor(0,0,0)g.points(p)end

bez golfa

l=love 
v,g,m,p=255,l.graphics,l.mouse,{}
d=m.isDown 
function l.draw()
  g.setBackgroundColor(v,v,v)
  if d(1)or d(2)then 
    p[#p+1],p[#p+2]=m.getPosition()
  end 
  g.setColor(0,0,0)
  g.points(p)
end

całkiem proste, jak to działa. Najpierw kilka inicjalizacji, aby skrócić czas. Następnie sprawdzi kliknięcie myszy i zapisze punkty w tablicy. Następnie rysuje punkty, a także ustawia kolor na biało-czarny, ponieważ domyślnie jest odwrotnie :)
A oto zdjęcie:

wprowadź opis zdjęcia tutaj


1
Wierzcie lub nie, przyszedłem tutaj, aby opublikować odpowiedź za pomocą Love2d, ponieważ dopiero niedawno się o tym dowiedziałem i pokochałem, więc +1 za miły wysiłek! W każdym razie myślę, że można to trochę skrócić w ten sposób: l=love v,g,m,p=255,l.graphics,l.mouse,{}function l.draw()g.setBackgroundColor(v,v,v)if m.isDown(1)then p[#p+1],p[#p+2]=m.getPosition()end g.setColor(0,0,0)g.points(p)enddaje to 169 bajtów!
DimP

1
Przybyłem tu z tego samego powodu, miło widzieć, że są tu inni ludzie, którzy o tym wiedzą: D Dziękuję :)
Lycea


1

glslsandbox 232 bajty

Stary post, ale uznał to za interesujące.
Ponieważ przetwarzanie zostało już wykonane, postanowiłem zrobić coś innego.

To rysuje, czy mysz jest wciśnięta, czy nie, więc nie to, o co prosiła pydude, ale prawie.

#ifdef GL_ES
precision lowp float;
#endif
uniform float time;uniform vec2 mouse,resolution;uniform sampler2D t;void main(){vec2 f=gl_FragCoord.xy,r=resolution;gl_FragColor=vec4(time<2.||length(f-mouse*r)>2.&&texture2D(t,f/r).x>.1);}

Wypróbuj na glslsandbox


0

Przetwarzanie, 93 bajty, 91 bajtów, jeśli spacje się nie liczą

void setup(){size(100,100);background(-1);}void draw(){if(mousePressed) point(mouseX,mouseY);}

1
W PPCG, jeśli nie jest wspomniane w wyzwaniu, spacje i wszystko liczą się normalnie (jako bajty w wybranym kodowaniu, domyślnie UTF-8). Twój wynik wynosiłby 92 bajty, ponieważ 1. miejsca nie można usunąć bez zerwania programu, ale drugie miejsce można bezpiecznie usunąć.
dzaima,

0

UCBlogo z wxWidgets, 65 bajtów

setbg 7
setpc 0
ht
pu
make "buttonact[setpos clickpos pd fd 1 pu]

Objaśnienie (kod przypisany do zmiennej buttonactjest wykonywany przy każdym kliknięciu przycisku):

SetBackground 7 ; white
SetPenColor 0 ; black
HideTurtle
PenUp
make "buttonact [
  SetPos ClickPos
  PenDown
  Forward 1
  PenUp
]

Przynajmniej myślę, że to działa. Powinno to być zgodne z dokumentacją , ale najwyraźniej buttonactzmienna działa tylko w kompilacji wxWidgets, a ja walczę o zbudowanie UCBLogo z wxWidgets na nowoczesnym Linuksie (waddyamean, którego nie można rzutować wskaźnikiem do intiz powrotem?).

UCBlogo bez wxWidgets, 73 bajty

Aby zobaczyć zamierzony efekt, możesz uruchomić tę dłuższą wersję z nieskończoną pętlą.

setbg 7 setpc 0 ht pu
while[1=1][setpos mousepos if[button?][pd] fd 1 pu]

Ale to ulega awarii ucblogona mojej maszynie ... Wygląda jak wyścig.

UCBlogo, faktycznie działający na moim komputerze, 80 bajtów

setbg 7 setpc 0 ht pu
while[1=1][setpos mousepos if[button?][pd] fd 1 pu wait 1]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.