Buat program Paint!

51

pengantar

Suatu hari, Anda menunjukkan kepada anak Anda cara menggambar di komputer. Anda mengetik mspaint.exedi run bar. Untuk ngeri Anda, ia mengatakan "Tidak ada item yang cocok dengan pencarian Anda". Anda harus membuat versi cat yang sederhana agar anak Anda dapat menggambar!

Tantangan

Anda harus membuat program menggambar sederhana. Untuk melakukan ini, buka jendela layar putih (lebih besar dari 99x99 piksel). Kapan saja mouse ditekan, ubah piksel tempat mouse menjadi hitam.

Ini , jadi jawaban tersingkat dalam byte menang!

pydude
sumber
8
Apakah harus berupa piksel? atau bisakah itu kotak 99x99?
fəˈnɛtɪk
2
Berapa lama harus berjalan?
Rɪᴋᴇʀ
2
Ketika TI-Basic Penmelakukan hal ini: o
Timtech
1
@Riker itu harus berjalan setidaknya 10 detik, lebih disukai selamanya
pydude
1
Apakah lebih besar dari 99 × 99 sehingga kita harus menggunakan tiga digit dalam notasi desimal untuk setiap dimensi? Apakah 99 × 100 atau 100 × 99 valid?
Sebastian Simon

Jawaban:

86

8086 kode mesin, 32 31 28 26 byte

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

Mengasumsikan kehadiran kartu grafis VGA, dan driver mouse yang kompatibel dengan Microsoft.

-2 byte terima kasih kepada @berendi!

tangkapan layar

Bagaimana itu bekerja:

            |   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

Itu semua yang ada untuk itu. Tidak ada sihir yang terlibat, hanya beberapa fungsi panggilan.

pengguna5434231
sumber
1
Kode bersih, jelas, dan pintar. Dilakukan dengan sangat baik! Saya tidak melihat di mana pun ini dapat lebih dioptimalkan untuk ukuran. Untuk beberapa alasan, ketika saya mencoba ini menggunakan driver CuteMouse, ini menarik tanpa tombol mouse harus ditekan, tetapi itu mungkin hanya masalah dengan CuteMouse yang tidak 100% kompatibel dengan Microsoft. Driver mana yang Anda gunakan untuk pengujian?
Cody Gray
2
Hmm. Setelah menjalankan kode dengan debugger (DEBUG.COM tua yang baik, tentu saja!), Tampaknya itu bukan masalah dengan driver CuteMouse. Tanpa tombol ditekan, INT 33hkembali 0 dalam BX, dan ini akan dikurangi ke FFFFh seperti yang diharapkan, tetapi garis masih ditarik. Mungkin ini karena mode 11h hanya memiliki satu halaman video, dan nomor halaman yang tidak valid secara otomatis diperbaiki? Saya menguji VM VirtualBox, jadi mungkin itu sesuatu yang dilakukan implementasi BIOS-nya.
Cody Grey
2
Sepertinya VirtualBox yang harus disalahkan di sini, itu hanya mengabaikan nomor halaman sama sekali: virtualbox.org/browser/vbox/trunk/src/VBox/Devices/Graphics/…
user5434231
2
Bill Atkinson sendiri akan bangga dengan ini. Kerja yang menyenangkan.
Wossname
4
-2 byte menghapus yang terakhir int 0x10, jmpkembali ke yang kedua int 0x10sebagai gantinya. Offset in jmptetap sama, sesuaikan alamat dimov dx
berendi - protes
25

Gores, 10 Gores byte

Scratch praktis dirancang untuk hal-hal seperti ini.

Cobalah online!

dkudriavtsev
sumber
Apakah ini benar-benar piksel? Juga, jika Anda mengklik mouse dengan kuat vs menahannya sebentar, itu menghasilkan hasil yang berbeda (tanpa memindahkannya tentu saja). Saya pikir itu membatalkan ini.
Rɪᴋᴇʀ
19
Ini bukan 10 byte Awal, sesuai dengan penilaian yang saat ini kami gunakan.
Okx
2
Anda mungkin harus menggunakan aplikasi scratchblocks untuk mengonversi ke teks, atau ukuran file SB2.
Matthew Roh
2
Saya menggunakan skor yang saya gunakan dengan jawaban awal. Bisakah seseorang menghubungkan saya dengan penilaian saat ini? @Okx
dkudriavtsev
8
@Endeleev Saya tidak yakin, tapi dia mungkin mengacu pada sistem penilaian Scratch ini .
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)

Disimpan 2 byte berkat Gustavo Rodrigues dan 2 byte dari Shaggy.

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>

Tom
sumber
Bagaimana dengan <canvas id=c>?
Gustavo Rodrigues
2
Ini sebenarnya menempatkan titik bukan di mana kursor saya pergi, tetapi ke kanan bawah panah. Apakah ini disengaja?
Anoplexian
Simpan 2 byte dengan menjatuhkannya c.dari awal JS Anda. @Anoplexian, itulah tubuh standar yang marginmembuang beberapa piksel.
Shaggy
4
Bagaimana saya membuat ini bekerja? Saya mengklik di area hasil dan tidak melakukan apa-apa.
numbermaniac
1
@Anoplexian Itu masalah yang diketahui; tidak ada cara yang dapat diandalkan untuk mendapatkan posisi relatif kursor mouse pada suatu elemen (pendek besar, fungsi khusus browser yang gagal ketika jenis padding CSS baru diperkenalkan).
wizzwizz4
17

C + Win32, 209 200 195 byte

Terima kasih, Cody dan Quentin! Saya berharap untuk menyingkirkan #include <windows.h>tetapi ini menyebabkan semua jenis kesalahan. Setidaknya itu berfungsi dengan benar dengan beberapa monitor ...

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

Kode sebelumnya:

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

masukkan deskripsi gambar di sini

Johan du Toit
sumber
2
Saya tidak dapat menguji sekarang, tapi saya pikir Anda dapat menggabungkan deklarasi hke forinisialisasi untuk menghemat dua byte :)
Quentin
Saya menyadari ini adalah kode golf dan mungkin diinginkan di sini, tapi LOWORDdan HIWORDyang tidak cara yang benar untuk mengekstrak koordinat kursor dari dikemas LPARAM. Anda harus menggunakan GET_X_LPARAMdan GET_Y_LPARAM, jika tidak, Anda akan mendapatkan hasil yang salah dengan beberapa monitor.
Cody Grey
@ Quentin, itu akan bekerja di c ++ tetapi tidak di c. Saya bisa menggunakan c ++ tapi kemudian saya akan menulis int mainyang akan menambahkan 4 byte lagi.
Johan du Toit
@Cody, Komentar adil. Saya tidak memiliki sistem multi monitor untuk menguji tetapi apakah Anda pikir menggunakan (short)LOWORD()dan (short)HIWORD()akan menyelesaikan masalah?
Johan du Toit
Apa yang disarankan Quentin berfungsi dengan baik dalam versi C modern apa pun, termasuk C99. Tentu saja, Anda menggunakan kompiler C Microsoft, yang macet di C89 / 90, dengan aturan pelingkupan variabel yang gila. C89 juga mengapa Anda diizinkan untuk menghapus jenis pengembalian mainfungsi (karena intaturan implisit ). Satu-satunya masalah adalah, menghilangkan return 0;penyebab perilaku tidak terdefinisi dalam C89 dan MSVC. Di C99 dan C ++, Anda memerlukan tipe return untuk main, tetapi return 0;implisit dan karenanya tidak perlu. Yah, bahasanya tidak dibuat untuk golf kode. :-)
Cody Grey
10

Memproses, 98 79 byte

19 byte disimpan berkat @dzaima

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

Penjelasan (kedaluwarsa)

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
}

klik kecil klik

Kritixi Lithos
sumber
@zaza saya tidak tahu size(100,100);tidak harus disebutkan, terima kasih! (juga saya tidak tahu mengapa saya tidak melihatif(mousePressed) sedikit)
Kritixi Lithos
7

JavaScript ES6, 126 byte

Diuji dalam chrome.

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

Cobalah online!

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

powelles
sumber
7

Haskell, 189 184 170 169 byte

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

Ini menggunakan Glossperpustakaan (v1.11). Ini membuka jendela layar penuh dan melukis piksel hitam (sebenarnya lingkaran dengan jari-jari 1) dengan menekan tombol kiri mouse. Tekan ESCuntuk keluar.

Bagaimana itu bekerja:

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

Sunting: @ceased untuk mengaktifkan counterclock yang memberi tahu saya tentang versi gloss terbaru yang menghemat 5 byte saat menggunakan jendela layar penuh. Terima kasih!

nimi
sumber
FullScreennullary in gloss> = 1.11, mengurangi skor dengan 5. (Namun saya mendapatkan kesalahan unknown GLUT entry glutInit, tapi mungkin pengaturan kekenyangan saya tidak berfungsi; tidak pernah menggunakannya di mesin ini.)
berhenti menghidupkan counterclockwis
@ceasedtoturncounterclockwis: ah, terima kasih atas petunjuknya. Saya memiliki 1.10.2.3 pada sistem saya dan sekarang diperbarui ke versi terbaru.
nimi
5

SmileBASIC 2, 52 51 byte

Yang ini berjalan di ayah SmileBASIC, Petit Computer (dan satu dua byte lebih pendek.)

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

Penjelasan:

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
siput_
sumber
Anda dapat menghemat 1 byte dengan melakukan GPSET TCHX,TCHY:GOTO@A karena warna default adalah 0 (transparan).
12Me21
4

Javascript + jQuery 138 byte

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

Lihat secara online!

Menambahkan klik dan seret dukungan akan mudah, Anda akan menetapkan variabel, namun, sesuai instruksi dan untuk mempersingkat kode, itu tidak didukung, "Setiap kali mouse ditekan, ubah piksel mouse menjadi hitam" . Saya mengartikan instruksi tersebut sebagai suatu clickperistiwa.

Neil
sumber
3
Hai! Lain kali, Anda harus membatalkan penghapusan jawaban lama Anda alih-alih membuat jawaban baru. Juga, saya khawatir ini harus bekerja di lingkungan yang ditentukan - jika ini adalah vanilla javascript, Anda harus memasukkan jumlah byte jQuery dengan kiriman Anda. Anda dapat menyebut kiriman ini "JavaScript + jQuery", dan itu tidak masalah: di sana Anda dapat menganggap jQuery diinstal. Saat jawaban ini berdiri, itu lebih merupakan jawaban "HTML", bukan javascript.
Conor O'Brien
1
@ ConorO'Brien saya akan memastikan untuk melakukannya lain kali. Saya memperbarui jawabannya menggunakan saran Anda.
Neil
4

SpecBAS - 61 59 byte

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

Hitam sudah menjadi warna pena default, tetapi latar belakang biasanya berwarna abu-abu tidak menyenangkan, jadi CLS 15setel ke putih terang.

masukkan deskripsi gambar di sini

Brian
sumber
Kebanyakan varian Basic tidak memerlukan spasi antara nomor perintah dan kode pada baris itu.
Pavel
SpecBAS menambahkan semua spasi setelah Anda menekan kembali (termasuk GOTOmenjadi GO TO)
Brian
1
Tapi bisakah Anda menghapus spasi, dan masih berfungsi dengan baik? Jika demikian, Anda tidak menghitungnya.
Pavel
Jika pengguna tidak keberatan hanya melukis dengan warna hitam, mengapa ia keberatan dengan latar belakang abu-abu?
Cees Timmerman
3

SmileBASIC, 70 58 53 Bytes

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

Dijelaskan:

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
12Me21
sumber
3

Clojure, 91 71 byte

-20 byte terima kasih kepada @cfrick untuk menunjukkan bahwa saya dapat menggunakan useuntuk mengecilkan impor saya.

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

Menggunakan Quil perpustakaan . Menarik titik setiap kali mouse diseret.

Pada dasarnya jawaban Pemrosesan, karena Quil adalah pembungkus Pemrosesan untuk 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))) 

masukkan deskripsi gambar di sini

Carcigenicate
sumber
71:(use 'quil.core)(defsketch P :mouse-dragged #(point(mouse-x)(mouse-y)))
cfrick
@cfrick LOL, saya selalu lupa usekarena itu "tidak tepat". Terima kasih.
Carcigenicate
3

Tcl / Tk, 45 46 51 57

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

pentagram

sergiol
sumber
Itu adalah satu pentogram yang jelek 😁
Johan du Toit
1
@JohanduToit: Tidak suka bintang?
sergiol
2

Java 7, 353 byte

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

Tidak Disatukan:

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

Python2 dan Python3, 82 byte (atau 77?)

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

Menggunakan modul Turtle, ini tidak terlalu buruk :)

Tidak Disatukan:

import turtle
turtle.up()

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

turtle.onscreenclick(fun)
turtle.mainloop()

Jika boleh memiliki garis di antara titik-titik, Anda sebenarnya dapat menyimpan 5 byte:

from turtle import *;onscreenclick(lambda x,y: goto(x,y)or dot(1));mainloop()
Wayne Werner
sumber
dari impor kura-kura *; atas (); onclick (lambda * x: goto (* x) atau titik (1)); selesai ()
innisfree
Itu 70 byte
innisfree
2

Excel VBA, 62 Bytes

Fungsi jendela langsung VBE anonim yang memungkinkan pengguna untuk menggambar di lembar mana pun hanya dengan memilihnya

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

Output Sampel

masukkan deskripsi gambar di sini

Taylor Scott
sumber
1

HTML + Javascript, 152 148 byte

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

Turing , 77 byte

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

Tidak Disatukan:

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
Kucing Bisnis
sumber
1

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

Bersenang-senang dengan 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

Ini salah satu upaya untuk mengimbangi default margindari <body>elemen, tetapi mungkin berbeda di seluruh browser dan stylesheet agen pengguna. Diuji berhasil di 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 byte

Piksel dalam gambar ini mungkin tampak lebih besar karena ditarik pada koordinat setengah piksel.

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>

Darrylyeo
sumber
1

TI-Basic, 1 byte

Pt-Change(

Saya yakin bahwa sebagian besar dari Anda dengan TI calcs memikirkan Penperintah tersebut, tetapi ternyata itu bukan tokenized sehingga masuk akal untuk menghitungnya sebagai 3 byte. Anda dapat membaca tentang versi interaktif Pt-Change(di http://tibasicdev.wikidot.com/pt-change

Timtech
sumber
Ini tidak menjawab tantangan: TI calcs tidak dapat menangani input mouse, sejauh yang saya tahu.
Grimmy
2
@ Grimy Jika Anda bersikeras, Anda selalu dapat menggunakan perpustakaan usb8x untuk mendapatkan input USB mouse. Tetapi saya yakin bahwa navigasi kursor default akan cukup.
Timtech
1

Lua (love2d Framework), 180 byte

versi golf

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

cukup mudah cara kerjanya. Pertama, beberapa inisialisasi untuk mempersingkat segalanya. Setelah itu akan memeriksa mouse diklik dan menyimpan poin ke array. Setelah itu menarik poin. Juga mengatur warna menjadi putih & hitam karena default adalah sebaliknya :)
Dan inilah gambarnya:

masukkan deskripsi gambar di sini

Lycea
sumber
1
Percaya atau tidak, saya datang ke sini untuk mengirim jawaban menggunakan Love2d karena saya baru tahu dan menyukainya, jadi beri +1 untuk upaya yang bagus! Bagaimanapun, saya pikir Anda dapat mempersingkat menjadi lebih sedikit seperti ini: 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)endyang menghasilkan 169 byte!
DimP
1
Saya datang ke sini dengan alasan yang sama, senang melihat ada orang lain di sini yang tahu: D Terima kasih :)
Lycea
1

Memproses, 65 byte

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

gambar minimal

George Profenza
sumber
1

glslsandbox 232 byte

Posting lama tetapi menemukan ini menarik.
Karena pemrosesan sudah dilakukan, saya memutuskan untuk melakukan sesuatu yang berbeda.

Ini menggambarkan apakah mouse ditekan atau tidak, jadi bukan yang diminta pydude tetapi hampir.

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

Cobalah di glslsandbox

PrincePolka
sumber
0

Memproses, 93 byte, 91 byte jika spasi tidak dihitung

void setup(){size(100,100);background(-1);}void draw(){if(mousePressed) point(mouseX,mouseY);}
Dat
sumber
1
Dalam PPCG, jika tidak disebutkan dalam tantangan, spasi dan semuanya dianggap normal (seperti byte dalam pengkodean pilihan, secara default UTF-8). Jadi skor Anda akan menjadi 92 byte karena ruang 1 tidak dapat dihapus tanpa merusak program, tetapi ruang kedua dapat dihapus dengan aman.
dzaima
0

UCBlogo dengan wxWidgets, 65 byte

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

Penjelasan (kode yang diberikan ke variabel buttonactdieksekusi pada setiap klik tombol):

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

Setidaknya, saya pikir ini berhasil. Seharusnya sesuai dengan dokumentasi , tetapi tampaknya buttonactvariabel hanya berfungsi di wxWidgets build dan saya berjuang untuk membangun UCBLogo dengan wxWidgets di Linux modern (waddyamean Anda tidak dapat melemparkan pointer ke intdan kembali?).

UCBlogo tanpa wxWidgets, 73 byte

Untuk melihat efek yang diinginkan, Anda dapat menjalankan versi yang lebih panjang ini dengan loop tak terbatas.

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

Tapi ini menabrak ucblogomesin saya ... Sepertinya kondisi balapan.

UCBlogo, benar-benar bekerja pada mesin saya, 80 byte

setbg 7 setpc 0 ht pu
while[1=1][setpos mousepos if[button?][pd] fd 1 pu wait 1]
Gilles 'SANGAT berhenti menjadi jahat'
sumber