Tạo một chương trình Paint!


51

Giới thiệu

Một ngày nọ, bạn đang chỉ cho con bạn cách vẽ trên máy tính. Bạn gõ mspaint.exevào thanh chạy. Đối với sự kinh hoàng của bạn, nó nói "Không có mục nào phù hợp với tìm kiếm của bạn". Bạn phải tạo một phiên bản sơn đơn giản để con bạn có thể vẽ!

Thử thách

Bạn phải tạo một chương trình vẽ đơn giản. Để thực hiện việc này, hãy mở một cửa sổ hiển thị màu trắng (lớn hơn 99x99 pixel). Bất cứ khi nào chuột được nhấn xuống, hãy thay đổi pixel mà chuột đang bật thành màu đen.

Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng!


8
Có cần phải là pixel? hoặc nó có thể là hình vuông 99x99?
fnɛtɪk

2
Nó cần bao lâu để chạy?
Rɪᴋᴇʀ

2
Khi TI-Basic Penthực hiện chính xác điều này: o
Timtech

1
@Riker nên chạy ít nhất 10 giây, tốt nhất là mãi mãi
pydude

1
Là lớn hơn 99 × 99 chỉ để chúng tôi phải sử dụng ba chữ số trong ký hiệu thập phân cho mỗi thứ nguyên? 99 × 100 hoặc 100 × 99 sẽ hợp lệ?
Sebastian Simon

Câu trả lời:


86

Mã máy 8086, 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

Giả sử sự hiện diện của card đồ họa VGA và bất kỳ trình điều khiển chuột tương thích Microsoft nào.

-2 byte nhờ @berendi!

ảnh chụp màn hình

Làm thế nào nó hoạt động:

            |   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

Thats tất cả để có nó. Không có phép thuật liên quan, chỉ một vài cuộc gọi chức năng.


1
Mã sạch, rõ ràng và thông minh. Hoàn thành rất tốt! Tôi không thấy bất cứ nơi nào điều này có thể được tối ưu hóa hơn nữa cho kích thước. Vì một số lý do, khi tôi đã thử điều này bằng trình điều khiển CuteMouse, điều này rút ra mà không cần nhấn nút chuột, nhưng đó có thể chỉ là vấn đề với CuteMouse không tương thích 100% với Microsoft. Bạn đã sử dụng trình điều khiển nào để thử nghiệm?
Cody Grey

2
Hừm. Sau khi chạy mã với trình gỡ lỗi (dĩ nhiên là DEBUG.COM cũ tốt!), Có vẻ như đó không phải là vấn đề với trình điều khiển CuteMouse. Không có nút giữ, INT 33hsẽ trả về 0 BXvà điều này được giảm xuống FFFFh như mong đợi, nhưng một dòng vẫn đang được rút ra. Có lẽ điều này là do chế độ 11h chỉ có một trang video và số trang không hợp lệ sẽ tự động được sửa? Tôi đang thử nghiệm trên VM VirtualBox, vì vậy có lẽ đó là điều mà việc triển khai BIOS của nó đang thực hiện.
Cody Grey

2
Có vẻ như VirtualBox đáng trách ở đây, nó chỉ đơn giản là bỏ qua số trang hoàn toàn: virtualbox.org/browser/vbox/trunk/src/VBox/Devices/Graphics/
trộm

2
Bản thân Bill Atkinson sẽ tự hào về điều này. Công việc lộng lẫy.
Wossname

4
-2 byte loại bỏ cái cuối cùng int 0x10, jmptrở lại cái thứ hai int 0x10thay thế. Bù đắp jmpvẫn giữ nguyên, điều chỉnh địa chỉ trongmov dx
berendi - phản đối

25

Cào, 10 byte cào

Scratch thực tế được thiết kế cho những thứ như thế này.

Hãy thử trực tuyến!


Điều này thực sự làm pixel? Ngoài ra, nếu bạn nhấp chuột nhanh và giữ nó một chút, nó sẽ tạo ra các kết quả khác nhau (tất nhiên là không di chuyển nó). Tôi nghĩ rằng điều đó vô hiệu.
Rɪᴋᴇʀ

19
Đây không phải là 10 byte Scratch, theo cách tính điểm chúng tôi hiện đang sử dụng.
Okx

2
Có lẽ bạn nên sử dụng ứng dụng Scratchblocks để chuyển đổi thành văn bản hoặc kích thước tệp SB2.
Matthew Roh

2
Tôi đang sử dụng cách tính điểm mà tôi đã sử dụng với các câu trả lời Scratch trước đó. Ai đó có thể xin vui lòng liên kết tôi với điểm hiện tại? @Okx
dkudriavtsev

8
@Mendeleev Tôi không chắc chắn, nhưng có lẽ anh ấy đang đề cập đến hệ thống tính điểm Scratch này .
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)

Đã lưu 2 byte nhờ vào Gustavo Coleues và 2 byte từ 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>


Thế còn <canvas id=c>?
Gustavo

2
Điều này thực sự đặt dấu chấm không phải là nơi con trỏ của tôi đi, mà ở phía dưới bên phải của mũi tên. Đây có phải là cố ý?
Anoplexian

Lưu 2 byte bằng cách loại bỏ c.từ khi bắt đầu JS của bạn. @Anoplexian, đó là cơ thể mặc định marginném mọi thứ đi một vài pixel.
Shaggy

4
Làm thế nào để tôi thực hiện công việc này? Tôi đang nhấp vào vùng kết quả và nó không làm gì cả.
numbermaniac

1
@Anoplexian Đó là một vấn đề được biết đến; không có cách nào đáng tin cậy để có được vị trí tương đối của con trỏ chuột trên một phần tử (thiếu các chức năng lớn dành riêng cho trình duyệt không thành công khi một loại đệm CSS mới được giới thiệu).
wizzwizz4

17

C + Win32, 209 200 195 byte

Cảm ơn, Cody và Quentin! Tôi đã hy vọng thoát khỏi #include <windows.h>nhưng điều này dẫn đến tất cả các loại lỗi. Ít nhất là nó hoạt động chính xác với nhiều màn hình ...

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

Mã trước:

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

nhập mô tả hình ảnh ở đây


2
Tôi không thể kiểm tra ngay bây giờ, tôi nghĩ bạn có thể hợp nhất khai báo hvào trình forkhởi tạo để lưu hai byte :)
Quentin

Tôi nhận ra điều này là mã golf và nó có thể được mong muốn ở đây, nhưng LOWORDHIWORDkhông đúng cách để trích xuất tọa độ con trỏ từ một đóng gói LPARAM. Bạn nên sử dụng GET_X_LPARAMGET_Y_LPARAMnếu không, bạn sẽ nhận được kết quả sai với nhiều màn hình.
Cody Grey

@Quentin, nó sẽ hoạt động trong c ++ nhưng không hoạt động trong c. Tôi có thể đã sử dụng c ++ nhưng sau đó tôi sẽ viết int mainthêm 4 byte nữa.
Johan du Toit

@Cody, bình luận công bằng. Tôi không có hệ thống đa màn hình để kiểm tra nhưng bạn có nghĩ rằng việc sử dụng (short)LOWORD()(short)HIWORD()sẽ giải quyết vấn đề không?
Johan du Toit

Những gì Quentin đề xuất hoạt động tốt trong bất kỳ phiên bản C hiện đại nào, bao gồm cả C99. Tất nhiên, bạn đang sử dụng trình biên dịch C của Microsoft, bị kẹt lại trong C89 / 90, với các quy tắc phạm vi biến đổi mất trí nhớ. C89 cũng là lý do tại sao bạn được phép bỏ qua mainkiểu trả về của hàm (vì intquy tắc ngầm ). Vấn đề duy nhất là, bỏ qua các return 0;nguyên nhân hành vi không xác định trong C89 và MSVC. Trong C99 và C ++, bạn cần một kiểu trả về main, nhưng nó return 0;là ẩn và do đó không cần thiết. Chà, ngôn ngữ không được tạo ra để chơi gôn. :-)
Cody Grey

10

Đang xử lý, 98 79 byte

19 byte được lưu nhờ @dzaima

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

Giải thích (lỗi thời)

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
}

nhấp chuột nhấp


@dzaima Tôi không biết size(100,100);không cần phải đề cập, cảm ơn! (tôi cũng không biết tại sao tôi không thấy if(mousePressed)bit)
Kritixi Lithos

7

JavaScript ES6, 126 byte

Đã thử nghiệm trong chrome.

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

Hãy thử trực tuyến!

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

Điều này sử dụng Glossthư viện (v1.11). Nó mở một cửa sổ toàn màn hình và vẽ các pixel màu đen (thực tế là các vòng tròn có bán kính 1) bằng cách nhấn nút chuột trái. Nhấn ESCđể thoát.

Làm thế nào nó hoạt động:

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

Chỉnh sửa: @ đã bật để bật ngược chiều cho tôi biết về phiên bản mới của độ bóng giúp tiết kiệm 5 byte khi sử dụng cửa sổ toàn màn hình. Cảm ơn!


FullScreenlà nullary trong độ bóng> = 1.11, làm giảm điểm xuống 5. ( unknown GLUT entry glutInitMặc dù tôi đang gặp lỗi , nhưng có lẽ thiết lập glut của tôi không hoạt động; không bao giờ sử dụng nó trên máy này.)
đã ngừng quay ngược chiều

@ceasetoturnc gặpclockwis: ah, cảm ơn vì gợi ý. Tôi đã có 1.10.2.3 trên hệ thống của mình và hiện đã được cập nhật lên phiên bản mới nhất.
nimi

5

SmileBASIC 2, 52 51 byte

Cái này chạy trong cha của SmileBASIC, Máy tính Petit (và ngắn hơn một byte.)

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

Giải trình:

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

Bạn có thể lưu 1 byte bằng cách thực hiện GPSET TCHX,TCHY:GOTO@Avì màu mặc định là 0 (trong suốt).
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+"'>"))

Kiểm tra nó trực tuyến!

Thêm hỗ trợ nhấp và kéo sẽ đơn giản, bạn sẽ đặt một biến, tuy nhiên, theo hướng dẫn và để rút ngắn mã, nó không được hỗ trợ, "Bất cứ khi nào chuột được nhấn xuống, hãy thay đổi pixel mà chuột đang bật thành màu đen" . Tôi diễn giải hướng dẫn như một clicksự kiện.


3
Hiya! Lần tới, bạn nên hủy bỏ câu trả lời cũ thay vì trả lời mới. Ngoài ra, tôi e rằng điều này phải hoạt động trong một môi trường được chỉ định - nếu đây là javascript vanilla, bạn sẽ phải bao gồm số byte của jQuery với trình của bạn. Bạn có thể gọi bài nộp này là "JavaScript + jQuery" và điều đó sẽ ổn: ở đó bạn có thể giả sử jQuery đã được cài đặt. Vì câu trả lời này hiện đang tồn tại, nó giống như một câu trả lời "HTML", không phải là một javascript.
Conor O'Brien

1
@ ConorO'Brien Tôi chắc chắn sẽ làm điều đó vào lần tới. Tôi đã cập nhật câu trả lời bằng cách sử dụng các đề xuất của bạn.
Neil

4

SpecBAS - 61 59 byte

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

Màu đen đã là màu bút mặc định, nhưng nền thường là màu xám khó chịu, vì vậy hãy CLS 15đặt nó thành màu trắng sáng.

nhập mô tả hình ảnh ở đây


Hầu hết các biến thể cơ bản không yêu cầu khoảng trắng giữa số lệnh và mã trên dòng đó.
Pavel

SpecBAS thêm tất cả các khoảng trống sau khi bạn quay trở lại (bao gồm cả GOTOtrở thành GO TO)
Brian

1
Nhưng bạn có thể loại bỏ các khoảng trống, và nó vẫn chạy tốt không? Nếu vậy, bạn không đếm chúng.
Pavel

Nếu người dùng không phiền chỉ vẽ bằng màu đen, tại sao anh ta lại nhớ một nền màu xám?
Cees Timmerman

3

SmileBASIC, 70 58 53 byte

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

Giải thích:

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 byte

-20 byte nhờ @cfrick đã chỉ ra rằng tôi có thể sử dụng useđể thu hẹp quá trình nhập của mình.

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

Sử dụng thư viện Quil . Vẽ một dấu chấm bất cứ khi nào chuột được kéo.

Về cơ bản câu trả lời Xử lý, vì Quil là trình bao bọc Xử lý cho 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))) 

nhập mô tả hình ảnh ở đây


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

@cfrick LOL, tôi luôn quên usevì nó "không phù hợp". Cảm ơn bạn.
Carcigenicate


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

Ung dung:

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 Python3, 82 byte (hoặc 77?)

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

Sử dụng mô-đun Rùa, điều này không quá tệ :)

Ung dung:

import turtle
turtle.up()

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

turtle.onscreenclick(fun)
turtle.mainloop()

Nếu bạn có các dòng giữa các dấu chấm, bạn thực sự có thể lưu 5 byte:

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

từ nhập rùa *; up (); onclick (lambda * x: goto (* x) hoặc dot (1)); xong ()
innisfree

Đó là 70 byte
innisfree

2

VBA Excel, 62 byte

Chức năng cửa sổ ngay lập tức VBE ẩn danh cho phép người dùng vẽ trên bất kỳ trang tính nào bằng cách chọn nó

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

Đầu ra mẫu

nhập mô tả hình ảnh ở đây


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;>'"/>

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

Ung dung:

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

Vui với 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

Điều này cố gắng bù đắp mặc định margincủa <body>phần tử, nhưng nó có thể khác nhau giữa các trình duyệt và biểu định kiểu tác nhân người dùng. Đã thử nghiệm thành công trong 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

Điểm ảnh trong ảnh này có thể xuất hiện lớn hơn khi chúng được vẽ ở tọa độ nửa pixel.

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(

Tôi chắc chắn rằng hầu hết các bạn có TI calcs đều nghĩ về Penlệnh này, nhưng hóa ra nó không được token hóa nên sẽ có ý nghĩa nhất khi tính đó là 3 byte. Bạn có thể đọc về phiên bản tương tác Pt-Change(tại http://tibasicdev.wikidot.com/pt-change


Điều này không trả lời cho thách thức: TI calcs không thể xử lý đầu vào chuột, theo như tôi biết.
Grimmy

2
@Grimy Nếu bạn khăng khăng bạn luôn có thể sử dụng thư viện usb8x để lấy đầu vào chuột USB thay thế. Nhưng tôi chắc chắn rằng điều hướng con trỏ mặc định sẽ đủ.
TimTech

1

Lua (khung love2d), 180 byte

phiên bản 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

vô dụng

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

khá dễ dàng làm thế nào nó hoạt động. Đầu tiên một vài khởi đầu để làm cho mọi thứ ngắn hơn. Sau đó, nó sẽ kiểm tra mous được nhấp và lưu các điểm vào mảng. Sau đó, nó vẽ các điểm. Ngoài ra, nó đặt màu thành trắng và đen vì mặc định là cách khác :)
Và đây là hình ảnh:

nhập mô tả hình ảnh ở đây


1
Dù bạn có tin hay không, tôi đã đến đây để đăng câu trả lời bằng Love2d vì tôi mới chỉ phát hiện ra điều đó và yêu nó, vì vậy +1 cho nỗ lực tốt đẹp! Dù sao, tôi nghĩ bạn có thể rút ngắn nó xuống một chút như thế này: 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)endkết quả là 169 byte!
DimP

1
Tôi đến đây cũng có lý do tương tự, rất vui khi thấy có những người khác ở đây biết điều đó: D Cảm ơn bạn :)
Lycea

1

Đang xử lý, 65 byte

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

vẽ tối thiểu


1

glslsandbox 232 byte

Bài cũ nhưng thấy điều này thú vị.
Vì việc xử lý đã được thực hiện nên tôi quyết định làm một cái gì đó khác biệt.

Điều này rút ra cho dù chuột có được nhấn hay không, vì vậy không phải là những gì pydude yêu cầu mà gần như.

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

Dùng thử trên glslsandbox


0

Đang xử lý, 93 byte, 91 byte nếu không gian không được tính

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

1
Trong PPCG, nếu không được đề cập trong thử thách, khoảng trắng và mọi thứ được tính là bình thường (dưới dạng byte trong mã hóa lựa chọn, theo mặc định UTF-8). Vì vậy, điểm của bạn sẽ là 92 byte vì không gian thứ 1 không thể bị xóa mà không phá vỡ chương trình, nhưng không gian thứ hai có thể được xóa an toàn.
dzaima

0

UCBlogo với wxWidgets, 65 byte

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

Giải thích (mã được gán cho biến buttonactđược thực thi trên mỗi lần nhấp vào nút):

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

Ít nhất, tôi nghĩ rằng điều này làm việc. Theo tài liệu này , nhưng rõ ràng buttonactbiến chỉ hoạt động trong bản dựng wxWidgets và tôi đang vật lộn để xây dựng UCBLogo với wxWidgets trên Linux hiện đại (waddyamean bạn không thể đưa con trỏ tới intvà quay lại?).

UCBlogo không có wxWidgets, 73 byte

Để xem hiệu ứng dự định, bạn có thể chạy phiên bản dài hơn này với một vòng lặp vô hạn.

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

Nhưng sự cố này xảy ra ucblogovới máy của tôi ... Trông giống như một điều kiện cuộc đua.

UCBlogo, thực sự hoạt động trên máy của tôi, 80 byte

setbg 7 setpc 0 ht pu
while[1=1][setpos mousepos if[button?][pd] fd 1 pu wait 1]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.