Erstelle ein Malprogramm!


51

Einführung

Eines Tages haben Sie Ihrem Kind gezeigt, wie man an einem Computer zeichnet. Sie geben mspaint.exedie Laufleiste ein. Zu Ihrem Entsetzen heißt es "Keine Artikel entsprechen Ihrer Suche". Sie müssen eine einfache Version der Farbe erstellen, damit Ihr Kind zeichnen kann!

Herausforderung

Sie müssen ein einfaches Zeichenprogramm erstellen. Öffnen Sie dazu ein weißes Anzeigefenster (größer als 99x99 Pixel). Ändern Sie bei jedem Herunterdrücken der Maus das Pixel, auf dem sich die Maus befindet, in Schwarz.

Das ist , also gewinnt die kürzeste Antwort in Bytes!


8
Müssen es Pixel sein? oder können es 99x99 Quadrate sein?
Donnerstag,

2
Wie lange muss es laufen?
20.

2
Wenn TI-Basic Pengenau das tut: o
Timtech

1
@ Riker es sollte mindestens 10 Sekunden laufen, vorzugsweise für immer
pydude

1
Ist es größer als 99 × 99, sodass wir für jede Dimension drei Stellen in Dezimalschreibweise verwenden müssen? Wäre 99 × 100 oder 100 × 99 gültig?
Sebastian Simon

Antworten:


87

8086 Maschinencode, 32 31 28 26 Bytes

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

Vorausgesetzt, dass eine VGA-Grafikkarte und ein Microsoft-kompatibler Maustreiber vorhanden sind.

-2 Bytes dank @berendi!

Bildschirmfoto

Wie es funktioniert:

            |   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

Das ist alles dazu. Keine Zauberei, nur ein paar Funktionsaufrufe.


1
Sauberer, klarer und cleverer Code. Sehr schön gemacht! Ich sehe nirgendwo, dass dies für die Größe weiter optimiert werden kann. Als ich dies mit dem CuteMouse-Treiber versuchte, zeichnet dies aus irgendeinem Grund, ohne dass die Maustaste gedrückt werden muss. Dies kann jedoch ein Problem sein, da CuteMouse nicht 100% Microsoft-kompatibel ist. Welchen Treiber haben Sie zum Testen verwendet?
Cody Grey

2
Hmm. Nachdem Sie den Code mit einem Debugger ausgeführt haben (natürlich mit dem guten alten DEBUG.COM!), Scheint es kein Problem mit dem CuteMouse-Treiber zu geben. Wenn keine Taste gedrückt wird, INT 33hwird 0 in zurückgegeben BX, und dies wird wie erwartet zu FFFFh dekrementiert, aber es wird noch eine Linie gezeichnet. Vielleicht liegt es daran, dass Modus 11h nur eine Videoseite hat und die ungültige Seitennummer automatisch korrigiert wird? Ich teste auf VM VirtualBox. Vielleicht ist das etwas, was die BIOS-Implementierung bewirkt.
Cody Grey

2
Es sieht so aus, als ob VirtualBox hier die Schuld trägt, es ignoriert einfach die Seitenzahl insgesamt: virtualbox.org/browser/vbox/trunk/src/VBox/Devices/Graphics/…
user5434231 22.04.17

2
Darauf wäre Bill Atkinson selbst stolz. Großartige Arbeit.
Wossname

4
-2 Bytes entfernen den letzten int 0x10, stattdessen jmpzurück zum zweiten int 0x10. Offset in jmpbleibt gleich, Adresse inmov dx
berendi anpassen - protestieren

25

Scratch, 10 Scratch-Bytes

Scratch wurde praktisch für solche Dinge entwickelt.

Probieren Sie es online!


Tut dies tatsächlich Pixel? Wenn Sie mit der Maus schnell klicken und eine Weile gedrückt halten, werden unterschiedliche Ergebnisse erzielt (natürlich ohne sie zu bewegen). Ich denke, das macht das ungültig.
21.

19
Dies sind nicht 10 Scratch-Bytes, gemäß der momentan verwendeten Bewertung.
Okx

2
Sie sollten wahrscheinlich die Scratchblocks-App zum Konvertieren in Text oder die SB2-Dateigröße verwenden.
Matthew Roh

2
Ich verwende die Bewertung, die ich mit früheren Scratch-Antworten verwendet habe. Kann mich bitte jemand mit der aktuellen Wertung verlinken? @Okx
dkudriavtsev

8
@ Mendeleev Ich bin nicht sicher, aber er bezieht sich wahrscheinlich auf dieses Scratch-Scoring-System .
FreeAsInBeer

20

HTML + JavaScript (ES6), 66 64 62 Byte

HTML

<canvas id=c>

JavaScript

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

2 Bytes dank Gustavo Rodrigues und 2 Bytes von Shaggy gespeichert.

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>


Wie wäre es <canvas id=c>?
Gustavo Rodrigues

2
Dadurch wird der Punkt nicht dort platziert, wo sich mein Cursor befindet, sondern rechts unten auf dem Pfeil. Ist das beabsichtigt?
Anoplexian

Sparen Sie 2 Bytes, indem Sie die c.vom Anfang Ihres JS löschen. @Anoplexian, das ist der Standardkörper, der die marginDinge um einige Pixel abwirft .
Shaggy

4
Wie mache ich das? Ich klicke in den Ergebnisbereich und er macht nichts.
Numbermaniac

1
@Anoplexian Das ist ein bekanntes Problem; Es gibt keine verlässliche Möglichkeit, die relative Position des Mauszeigers auf einem Element zu ermitteln (es fehlen große, browserspezifische Funktionen, die fehlschlagen, wenn eine neue Art von CSS-Auffüllung eingeführt wird).
wizzwizz4

17

C + Win32, 209 200 195 Bytes

Danke, Cody und Quentin! Ich hatte gehofft, das loszuwerden, #include <windows.h>aber das führt zu allen möglichen Fehlern. Zumindest funktioniert es mit mehreren Monitoren richtig ...

#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));}

Vorheriger Code:

#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));}

Bildbeschreibung hier eingeben


2
Ich kann jetzt nicht testen, aber ich denke, Sie können die Deklaration von hin den forInitialisierer einbinden, um zwei Bytes zu sparen :)
Quentin

Ich weiß , das Code Golf ist und es kann hier wünschenswert sein, aber LOWORDund HIWORDbin nicht der richtige Weg , Cursor - Koordinaten aus einem gepackten zu extrahieren LPARAM. Sie sollten GET_X_LPARAMund verwenden GET_Y_LPARAM, andernfalls erhalten Sie bei mehreren Monitoren falsche Ergebnisse.
Cody Grey

@Quentin, das funktioniert in c ++ aber nicht in c. Ich hätte c ++ verwenden können, aber dann hätte ich geschrieben, int mainwas 4 weitere Bytes hinzugefügt hätte.
Johan du Toit

@Cody, gerechter Kommentar. Ich habe kein Multi-Monitor-System zum Testen, aber denkst du, es zu verwenden (short)LOWORD()und (short)HIWORD()würde das Problem lösen?
Johan du Toit

Was Quentin vorschlug, funktioniert gut in jeder modernen Version von C, einschließlich C99. Natürlich verwenden Sie den C-Compiler von Microsoft, der in C89 / 90 mit seinen Regeln für den Gültigkeitsbereich von dementen Variablen steckt. C89 ist auch der Grund, warum Sie mainden Rückgabetyp der Funktion (aufgrund der impliziten intRegel) weglassen dürfen . Das einzige Problem ist, die return 0;Ursachen undefiniertes Verhalten in C89 und MSVC wegzulassen. In C99 und C ++ benötigen Sie einen Rückgabetyp für main, der return 0;jedoch implizit und daher nicht erforderlich ist. Nun, die Sprache war nicht für Code-Golf gemacht. :-)
Cody Grey

10

Verarbeitung, 98 79 Bytes

Dank @dzaima wurden 19 Bytes gespeichert

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

Erklärung (veraltet)

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
}

clicketty click


@dzaima Ich wusste nicht, das size(100,100);muss nicht erwähnt werden, danke! (auch ich weiß nicht, warum ich das if(mousePressed)bisschen nicht gesehen habe )
Kritixi Lithos

7

JavaScript ES6, 126 Byte

In Chrom getestet.

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

Probieren Sie es 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 Bytes

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

Dies verwendet die GlossBibliothek (v1.11). Es öffnet sich ein Vollbildfenster und malt mit der linken Maustaste schwarze Pixel (tatsächlich Kreise mit Radius 1). Drücken Sie, ESCum das Menü zu verlassen.

Wie es funktioniert:

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

Edit: @ nicht mehr gegen den Uhrzeigersinn zu drehen, erzählte mir von der neuesten Version von Gloss, die 5 Bytes spart, wenn Vollbild-Fenster verwendet werden. Vielen Dank!


FullScreenwird nullary in Glanz> = 1,11, die Partitur von 5. Reduzieren (ich erhalte eine Fehlermeldung unknown GLUT entry glutInitmeine glut Setup funktioniert einfach nicht obwohl, sondern wahrscheinlich,. nie auf dieser Maschine)
aufgehört wiederum counterclockwis

@ceasedtoturncounterclockwis: ah, danke für den Hinweis. Ich hatte 1.10.2.3 auf meinem System und wurde jetzt auf die neueste Version aktualisiert.
Nimi

5

SmileBASIC 2, 52 51 Bytes

Diese läuft man in SmileBASIC Papas, Petit - Computer (und ist ein Zwei - Byte kürzer.)

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

Erläuterung:

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

Sie können 1 Byte einsparen, GPSET TCHX,TCHY:GOTO@Ada die Standardfarbe 0 (transparent) ist.
12. Mai,

4

Javascript + jQuery 138 Bytes

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

Probieren Sie es online aus!

Das Hinzufügen einer Klick- und Ziehunterstützung wäre einfach. Sie würden jedoch gemäß den Anweisungen eine Variable festlegen. Um den Code zu verkürzen, wird diese nicht unterstützt. . Ich habe die Anweisung als clickEreignis interpretiert .


3
Hiya! Beim nächsten Mal sollten Sie Ihre alte Antwort wiederherstellen, anstatt eine neue Antwort zu erstellen. Außerdem befürchte ich, dass dies in einer bestimmten Umgebung funktionieren muss. Wenn dies Vanille-Javascript ist, müssen Sie die Byteanzahl von jQuery in Ihre Übermittlung einbeziehen. Sie könnten diese Übermittlung "JavaScript + jQuery" nennen, und das wäre in Ordnung: Dort könnten Sie annehmen, dass jQuery installiert ist. Wie diese Antwort derzeit steht, ist es eher eine "HTML" -Antwort, kein Javascript.
Conor O'Brien

1
@ ConorO'Brien Das mache ich beim nächsten Mal. Ich habe die Antwort anhand Ihrer Vorschläge aktualisiert.
Neil

4

SpecBAS - 61 59 Bytes

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

Schwarz ist bereits die Standardfarbe des Stifts, aber der Hintergrund ist normalerweise ein böser Grauton, sodass CLS 15er hellweiß wird.

Bildbeschreibung hier eingeben


Die meisten Basic-Varianten benötigen kein Leerzeichen zwischen der Befehlsnummer und dem Code in dieser Zeile.
Pavel

SpecBAS fügt alle Leerzeichen hinzu, nachdem Sie die Eingabetaste gedrückt haben (einschließlich des GOTOWerdens GO TO)
Brian

1
Aber können Sie die Leerzeichen entfernen und trotzdem einwandfrei ausführen? Wenn ja, zählt man sie nicht.
Pavel

Wenn es dem Benutzer nichts ausmacht, nur mit Schwarz zu malen, warum sollte es ihm dann etwas ausmachen, einen grauen Hintergrund zu haben?
Cees Timmerman

3

SmileBASIC, 70 58 53 Bytes

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

Erklärt:

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 Bytes

-20 Bytes Danke an @cfrick für den Hinweis, dass ich usemeinen Import verkleinern kann .

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

Verwendet die Quil- Bibliothek. Zeichnet einen Punkt, wenn die Maus gezogen wird.

Grundsätzlich ist die Verarbeitung die Antwort, da Quil ein Verarbeitungs-Wrapper für Clojure ist.

(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))) 

Bildbeschreibung hier eingeben


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

@cfrick LOL, vergesse ich immer, useweil es "nicht richtig" ist. Danke.
Carcigenicate

3

Tcl / Tk, 45, 46, 51, 57

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

Pentagramm


Das ist ein flüchtiges Pentogramm 😁
Johan du Toit

1
@JohanduToit: Magst du keine Sterne?
Sergiol

2

Java 7, 353 Bytes

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();}}

Ungolfed:

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 und Python3, 82 Bytes (oder 77?)

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

Mit dem Turtle-Modul ist das nicht schlecht :)

Ungolfed:

import turtle
turtle.up()

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

turtle.onscreenclick(fun)
turtle.mainloop()

Wenn es in Ordnung ist, Linien zwischen den Punkten zu haben, können Sie tatsächlich 5 Bytes sparen:

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

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

Das sind 70 Bytes
innisfree

2

Excel VBA, 62 Bytes

Anonyme VBE-Direktfensterfunktion, mit der der Benutzer auf jedem Blatt zeichnen kann, indem er es einfach auswählt

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

Beispielausgabe

Bildbeschreibung hier eingeben


1

HTML + Javascript, 152 148 Bytes

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

1

Turing , 77 Bytes

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

Ungolfed:

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 Byte

Spaß mit 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 Byte

In diesem Beispiel wird versucht, die Standardeinstellung margindes <body>Elements zu ändern, sie kann jedoch in den Browsern und Benutzeragenten-Stylesheets unterschiedlich sein. Erfolgreich in Chrome getestet.

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 Byte

Pixel in diesem Bild erscheinen möglicherweise größer, da sie an halben Pixelkoordinaten gezeichnet sind.

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 Byte

Pt-Change(

Ich bin sicher, dass die meisten von Ihnen mit TI Calcs an den PenBefehl gedacht haben , aber es stellt sich heraus, dass er nicht mit einem Token versehen ist, sodass es am sinnvollsten wäre, ihn als 3 Byte zu zählen. Informationen zur interaktiven Version von finden Sie Pt-Change(unter http://tibasicdev.wikidot.com/pt-change


Dies beantwortet die Herausforderung nicht: TI Calcs kann, soweit ich weiß, keine Mauseingaben verarbeiten.
Grimmy

2
@Grimy Wenn Sie darauf bestehen, können Sie stattdessen immer die usb8x-Bibliothek verwenden, um USB-Mauseingaben zu erhalten. Aber ich bin sicher, dass die Standardcursornavigation ausreichen wird.
Timtech

1

Lua (love2d Framework), 180 Byte

Golf Version

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

ungolfed

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

ganz einfach wie es funktioniert. Zuerst ein paar Initialisierungen, um die Sache zu verkürzen. Danach wird überprüft, ob die Maus angeklickt ist, und die Punkte werden im Array gespeichert. Danach werden die Punkte gezeichnet. Außerdem wird die Farbe auf Weiß und Schwarz gesetzt, da die Standardeinstellung umgekehrt ist :)
Und hier kommt das Bild:

Bildbeschreibung hier eingeben


1
Ob Sie es glauben oder nicht, ich bin hierher gekommen, um eine Antwort mit Love2d zu schreiben, da ich erst kürzlich davon erfahren habe und es liebe, also +1 für die nette Mühe! Wie auch immer, ich denke, Sie können es ein bisschen kürzen, 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)endwas 169 Bytes ergibt!
DimP

1
Ich bin aus dem gleichen Grund hierher gekommen, schön zu sehen, dass es hier draußen andere Leute gibt, die es wissen: D Danke :)
Lycea

1

Verarbeitung, 65 Bytes

void draw(){if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);}

minimaler Draw


1

glslsandbox 232 bytes

Alte Post fand das aber interessant.
Da die Verarbeitung bereits abgeschlossen ist, habe ich mich für etwas anderes entschieden.

Dies zeichnet, ob die Maus gedrückt ist oder nicht, also nicht, wonach pydude aber fast gefragt hat.

#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);}

Probieren Sie es auf glslsandbox


0

Verarbeitung, 93 Byte, 91 Byte, wenn Leerzeichen nicht zählen

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

1
In PPCG gelten Leerzeichen und alles als normal (als Byte in der Codierung Ihrer Wahl, standardmäßig UTF-8), wenn dies in der Challenge nicht erwähnt wird. Ihre Punktzahl würde also 92 Bytes betragen, da das erste Leerzeichen nicht entfernt werden kann, ohne das Programm zu unterbrechen, aber das zweite Leerzeichen kann sicher entfernt werden.
Dzaima

0

UCBlogo mit wxWidgets, 65 Bytes

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

Erläuterung (der der Variablen zugewiesene Code buttonactwird bei jedem Tastenklick ausgeführt):

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

Zumindest denke ich, dass dies funktioniert. Es sollte laut Dokumentation , aber anscheinend buttonactfunktioniert die Variable nur in einem wxWidgets-Build und ich habe Mühe, UCBLogo mit wxWidgets auf einem modernen Linux zu erstellen (waddyamean können Sie keinen Zeiger auf intund zurück setzen?).

UCBlogo ohne wxWidgets, 73 Bytes

Um den beabsichtigten Effekt zu sehen, können Sie diese längere Version mit einer Endlosschleife ausführen.

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

Aber das stürzt ucblogoauf meiner Maschine ab ... Sieht aus wie ein Rennzustand.

UCBlogo, arbeitet tatsächlich auf meinem Computer, 80 Bytes

setbg 7 setpc 0 ht pu
while[1=1][setpos mousepos if[button?][pd] fd 1 pu wait 1]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.