Bir Paint programı oluşturun!


51

Giriş

Bir gün, çocuğunuza bir bilgisayarda nasıl çizileceğini gösteriyordunuz. Yazdığınız mspaint.exeçalıştırma çubuğunda. Korku için, "Aramanla eşleşen hiçbir şey yok" yazıyor. Çocuğunuzun çizebilmesi için basit bir boya sürümü oluşturmalısınız!

Meydan okuma

Basit bir çizim programı oluşturmalısınız. Bunu yapmak için beyaz bir ekran penceresi açın (99x99 pikselden büyük). Fareye her basıldığında, farenin açık olduğu pikseli siyaha dönüştürün.

Bu , bayt cinsinden en kısa cevap!


8
Piksel olması gerekiyor mu? veya 99x99 kare olabilir mi?
f Aprnɛtɪk

2
Ne kadar süre koşması gerekiyor?
Rɪᴋᴇʀ

2
TI-Basic's Pentam olarak şunu yaptığında: o
Timtech

1
Tercihen sonsuza kadar en az 10 saniye boyunca çalışmalıdır @Riker
pydude

1
99 × 99'dan daha büyük olması, her boyut için ondalık göstergede üç basamak kullanmak zorunda mıyız? 99 × 100 veya 100 × 99 geçerli midir?
Sebastian Simon,

Yanıtlar:


87

8086 makine kodu, 32 31 28 26 bayt

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

VGA grafik kartının ve Microsoft uyumlu herhangi bir fare sürücüsünün varlığını varsayar.

@Berendi sayesinde -2 bayt!

ekran görüntüsü

Nasıl çalışır:

            |   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

Hepsi bu kadar. Sihir içermez, sadece birkaç işlev çağrısı.


1
Temiz, temiz ve akıllı kod. çok iyi yapmışsın! Bunun boyut için optimize edilebileceği hiçbir yerde göremiyorum. Bazı nedenlerden dolayı, bunu CuteMouse sürücüsünü kullanarak denediğimde, bu fare düğmesinin basılı tutulması gerekmeden çiziyor , ancak bu sadece CuteMouse'un% 100 Microsoft uyumlu olmamasıyla ilgili bir sorun olabilir. Test etmek için hangi sürücüyü kullandınız?
Cody Gray,

2
Hmm. Kodu bir hata ayıklayıcı ile çalıştırdıktan sonra (tabii ki eski DEBUG.COM, elbette!), Bu CuteMouse sürücüsüyle ilgili bir sorun değil gibi görünüyor. Bir düğme basılı tutulmadan INT 33h0 değerini döndürüyor BXve bu beklendiği gibi FFFFh'ye düşürülüyor , ancak bir çizgi hala çiziliyor. Belki de bunun nedeni, 11h modunun yalnızca bir video sayfası olması ve geçersiz sayfa numarasının otomatik olarak sabitlenmesidir. VM VirtualBox üzerinde test ediyorum, bu yüzden belki de BIOS uygulamasının yaptığı bir şey.
Cody Gray,


2
Bill Atkinson'ın kendisi bununla gurur duyardı. Muhteşem iş.
Woss,

4
-2 bayt son kısmının çıkarılması int 0x10, jmpikinci geri int 0x10yerine. Dengeleme jmpaynı kalır, adresi mov dx
17'de

25

Kazı Kazan, 10 Kazı Kazan

Scratch, pratikte bunun gibi şeyler için tasarlandı.

Çevrimiçi deneyin!


Bu aslında piksel yapıyor mu? Ayrıca, fareyi biraz basılı tutarak farenin hızlıca tıklarsanız, farklı sonuçlar verir (tabii ki hareket ettirmeden). Bunun geçersiz olduğunu düşünüyorum.
Rɪᴋᴇʀ

19
Şu anda kullandığımız puanlamaya göre, bu 10 Scratch byte değil.
Okx

2
Muhtemelen, metne dönüştürmek için scratchblocks uygulamasını veya SB2 dosya boyutunu kullanmanız gerekir.
Matthew Roh

2
Daha önceki Scratch cevaplarında kullandığım puanı kullanıyorum. Birisi lütfen beni şu anki puanlamaya bağlayabilir mi? @Okx
dkudriavtsev

8
@Mendeleev Emin değilim, ama muhtemelen bu Scratch puanlama sistemine atıfta bulunuyor .
FreeAsInBeer

20

HTML + JavaScript (ES6), 66 64 62 bayt

HTML

<canvas id=c>

JavaScript

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

Gustavo Rodrigues ve Shaggy'den 2 byte sayesinde 2 byte kurtarıldı.

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>


Nasıl hakkında <canvas id=c>?
Gustavo Rodrigues

2
Bu aslında noktaya imlecimin gittiği yeri değil, okun sağ alt köşesini yerleştirir. Bu kasıtlı mı?
Anoplexian

JS'nizin c.başından bırakarak 2 bayttan tasarruf edin . @Anopleks, varsayılan marginpiksel, işleri bir kaç piksel uzaklaştırır.
Shaggy

4
Bu işi nasıl yaparım? Sonuç alanına tıklıyorum ve hiçbir şey yapmıyor.
numbermaniac

1
@Anoplexian Bu bilinen bir konudur; fare imlecinin bir eleman üzerindeki göreceli pozisyonunu almanın güvenilir bir yolu yoktur (yeni bir CSS dolgusu kullanıldığında başarısız olan büyük, tarayıcıya özgü fonksiyonların yetersizliği).
wizzwizz4

17

C + Win32, 209 200 195 bayt

Teşekkürler, Cody ve Quentin! Kurtulmayı umuyordum #include <windows.h>ama bu her türlü hataya yol açıyor. En azından birden fazla monitörle doğru çalışıyor ...

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

Önceki 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));}

görüntü tanımını buraya girin


2
Şu anda test edemiyorum, bu yüzden iki bayttan tasarruf hetmek için forbaşlatıcı bildirimini birleştirebilirsiniz :)
Quentin

Bu kod golf olduğunun farkında ve burada arzu olabilir, ama LOWORDve HIWORDvardır değil imleci ayıklamak için doğru yolu bir dolu koordinatları LPARAM. Kullanıyor olmalısınız GET_X_LPARAMve GET_Y_LPARAMaksi halde birden fazla monitörde yanlış sonuçlar alırsınız.
Cody Gray,

@ Quentin, bu c ++ 'da işe yarayacak, fakat c' de olmayacak. C ++ kullanabilirdim ama sonradan int main4 bayt daha ekleyeceğini yazdım .
Johan du Toit,

@Cody, Adil yorum. Test etmek için bir çoklu monitör sistemim yok ama konuyu kullanmayı (short)LOWORD()ve (short)HIWORD()çözmeyi düşünüyor musunuz?
Johan du Toit,

Quentin'in önerdiği, C99 da dahil olmak üzere herhangi bir C modern versiyonunda iyi çalışıyor. Tabii ki, Microsoft'un C89 / 90'da geri kalmış olan C derleyicisini, değişken değişken kapsam kuralları ile kullanıyorsunuz. C89 ayrıca, mainfonksiyonun dönüş tipini (örtük intkural nedeniyle) ihmal etmenize izin vermenizin nedenidir . Tek sorun, return 0;C89 ve MSVC'de tanımsız davranışa neden olmamaktır. C99 ve C ++ için bir dönüş türüne ihtiyacınız vardır main, ancak bu return 0;örtülüdür ve dolayısıyla gereksizdir. Dil, kod golfü için yapılmadı. :-)
Cody Gray

10

İşlem, 98 79 bayt

@Dzaima sayesinde 19 bayt kurtarıldı

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

Açıklama (eski)

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 tıklayın


@ Dzaima bahsetmek zorunda olmadığını bilmiyordum size(100,100);, teşekkürler! (ayrıca ben görmedim neden bilmiyorum if(mousePressed)bit)
Kritixi Lithos

7

JavaScript ES6, 126 bayt

Kromda test edilmiştir.

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

Çevrimiçi deneyin!

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 bayt

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

Bu, Glosskütüphaneyi kullanır (v1.11). Bir tam ekran penceresini açar ve sol fare düğmesine basarak siyah pikselleri (aslında yarıçapı 1 olan daireler) boyar. Çıkmak ESCiçin tuşuna basın .

Nasıl çalışır:

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

Düzenleme: counterclockwis açmak için @ cresten bana tam ekran pencereleri kullanırken 5 bayt kaydeder parlak yeni sürümü hakkında anlattı. Teşekkürler!


FullScreenparlatıcısı> = 1.11, 5 tarafından skoru azaltılmasında nullary (Ben bir hata alıyorum unknown GLUT entry glutInitgerçi, ama muhtemelen benim fazlalığı kurulum sadece çalışmıyor;. Bu makinede hiç kullanmamış)
counterclockwis açmak için durdurdu

@ceasedtoturncounterclockwis: ah, ipucu için teşekkürler. Sistemimde 1.10.2.3 vardı ve şimdi en son sürüme güncellendi.
nimi

5

SmileBASIC 2, 52 51 bayt

Bu, SmileBASIC'in babası Petit Computer'da (ve bir iki bayt daha kısa.)

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

Açıklama:

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

GPSET TCHX,TCHY:GOTO@AVarsayılan renk 0 (saydam) olduğundan, 1 bayt yaparak tasarruf edebilirsiniz .
12Me21

4

Javascript + jQuery 138 bayt

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

Çevrimiçi olarak kontrol edin!

Tıkla ve sürükle desteği eklemek basit olacaktır, bununla birlikte bir değişken ayarladınız, ancak talimatlara göre ve kodu kısaltmak için desteklenmiyor, "Fareye her basıldığında, farenin üzerinde olduğu pikseli siyaha dönüştürün" . Talimatı bir clickolay olarak yorumladım .


3
Selam! Bir dahaki sefere, yeni bir cevap vermek yerine eski cevabınızı geri almalısınız. Ayrıca, bunun belirli bir ortamda çalışması gerektiğinden korkuyorum - bu vanilyalı javascript ise, jQuery'nin bayt sayısını gönderiminize dahil etmeniz gerekir. Bu gönderiye "JavaScript + jQuery" diyebilirsin ve bu iyi olurdu: orada jQuery'nin yüklü olduğunu varsayabilirsin. Bu cevap hali hazırda durduğu gibi, bir "HTML" cevabından daha fazlasıdır, bir javascript değildir.
Conor O'Brien,

1
@ ConorO'Brien Bir dahaki sefere bunu yapacağınızdan emin olacağım. Önerilerinizi kullanarak cevabı güncelledim.
Neil

4

SpecBAS - 61 59 bayt

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

Siyah zaten varsayılan kalem rengidir, ancak arka plan genellikle gri bir gri tonudur, bu nedenle CLS 15onu parlak beyaza ayarlar.

görüntü tanımını buraya girin


Çoğu Temel değişken, komut numarası ile o satırdaki kod arasında boşluk gerektirmez.
Pavel

SpecBAS, geri dönüşe bastıktan sonra tüm boşlukları ekler ( GOTOolma dahil GO TO)
Brian

1
Ancak boşlukları kaldırabilir ve hala düzgün çalışmasını sağlayabiliyor musunuz? Eğer öyleyse, onları saymazsın.
Pavel

Kullanıcı sadece siyahla boyamaya aldırış etmiyorsa, neden gri arkaplanı düşünür ki?
Cees Timmerman

3

SmileBASIC, 70 58 53 Bayt

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

Açıklaması:

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 bayt

-20 bayt, ithalimi küçültmek için kullanabileceğime işaret ettiği için @cfrick sayesinde use.

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

Quil kütüphanesini kullanır . Fare sürüklendiğinde bir nokta çizer.

Quil, Clojure için bir İşleme sarmalayıcısı olduğundan, Temel olarak İşlem yanıtı.

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

görüntü tanımını buraya girin


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

@cfrick LOL, her zaman unutuyorum useçünkü "uygun değil". Teşekkür ederim.
Carcigenicate


2

Java 7, 353 bayt

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 ve Python3, 82 bayt (veya 77?)

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

Kaplumbağa modülünü kullanarak, bu çok kötü değil :)

Ungolfed:

import turtle
turtle.up()

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

turtle.onscreenclick(fun)
turtle.mainloop()

Noktalar arasında çizgiler olması tamamsa, aslında 5 byte tasarruf edebilirsiniz:

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

kaplumbağa ithalat * dan; up (); onclick (lambda * x: (git * x) veya nokta (1)); yapılır ()
Innisfree

Bu 70 bayt
innisfree

2

Excel VBA, 62 Bayt

Kullanıcının herhangi bir sayfaya basitçe seçerek çizmesini sağlayan anonim VBE acil pencere işlevi

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

Örnek çıktı

görüntü tanımını buraya girin


1

HTML + Javascript, 152 148 bayt

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

1

Turing , 77 bayt

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 bayt

CSS ile eğlenceli 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 bayt

Bu margin, <body>öğenin varsayılanını dengelemeye çalışır , ancak tarayıcılarda ve kullanıcı aracısı stil sayfalarında farklı olabilir. Chrome'da başarıyla test edildi.

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 bayt

Buradaki pikseller, yarım piksel koordinatlarında çizildiklerinden daha büyük görünebilir.

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 bayt

Pt-Change(

TI calcs ile çoğunuzun Penkomutu düşündüğüne eminim , ama tokenize olmadığı ortaya çıktı, bu yüzden bunu 3 bayt olarak saymak en mantıklı olur. Sen etkileşimli sürümüne okuyabilirsiniz Pt-Change(at http://tibasicdev.wikidot.com/pt-change


Bu zorluklara cevap vermiyor: TI hesaplamaları bildiğim kadarıyla, fare girdisini kaldıramaz.
Grimmy

2
@Grimy Eğer ısrar ediyorsanız, yerine USB fare girişi almak için her zaman usb8x kütüphanesini kullanabilirsiniz. Ancak varsayılan imleç gezinmesinin yeterli olacağından eminim.
Timtech

1

Lua (love2d Çerçeve), 180 bayt

golf versiyonu

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

nasıl çalıştığını oldukça kolay. Öncelikle işleri kısaltmak için birkaç başlangıç. Bundan sonra, farenin tıklandığını kontrol eder ve noktaları diziye kaydeder. Ondan sonra noktaları çizer.Ayrıca rengini beyaz & siyah'a ayarlar, çünkü varsayılan tersidir :) :)
Ve işte resim geliyor:

görüntü tanımını buraya girin


1
İster inanın ister inanmayın, sadece son zamanlarda öğrendiğim ve onu sevdiğim için Love2d kullanarak bir cevap göndermek için geldim, bu yüzden iyi çaba için +1! Neyse, bence biraz daha kısaltabilirsin: 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)endsonuç 169 bayt!
DimP

1
Buraya aynı sebepten geldim, bunu bilen başka insanlar olduğunu görmek güzel: D Teşekkür ederim :)
Lycea


1

glslsandbox 232 bayt

Eski posta ancak bu ilginç bulundu.
İşlem yapıldığından beri farklı bir şey yapmaya karar verdim.

Bu, fareye basılıp basılmadığını çizer, yani ne pydude istedi ama neredeyse.

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

Glslsandbox üzerinde deneyin


0

İşleme, 93 bayt, 91 bayt, boşluk sayılmazsa

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

1
PPCG'de, meydan okumada belirtilmemişse, boşluklar ve her şey normal olarak sayılır (seçilen kodlamada bayt olarak, varsayılan olarak UTF-8). Böylece 1. alan programı bozmadan kaldırılamaz, ancak ikinci alan güvenli bir şekilde kaldırılabildiğinden puanınız 92 bayttır.
dzaima

0

WxWidgets ile UCBlogo, 65 bayt

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

Açıklama (değişkene atanan kod buttonacther düğmeye tıklandığında yürütülür):

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

En azından, bunun işe yaradığını düşünüyorum. Belgelere göre olmalı , ancak görünüşe göre buttonactdeğişken sadece bir wxWidgets yapısında çalışıyor ve ben modern bir Linux'ta wcWidgets ile UCBLogo oluşturmak için uğraşıyorum (waddyamean gösterici kullanıp çeviremezsiniz int?).

WxWidgets içermeyen UCBlogo, 73 bayt

Amaçlanan efekti görmek için, bu uzun sürümü sonsuz bir döngü ile çalıştırabilirsiniz.

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

Ama bu ucblogobenim makinemde çöküyor ... Bir yarış koşulu gibi görünüyor.

UCBlogo, aslında makinemde çalışıyor, 80 bayt

setbg 7 setpc 0 ht pu
while[1=1][setpos mousepos if[button?][pd] fd 1 pu wait 1]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.