Вспомнилась одна программа, которая рисует символ на компьютере TI99/4A. К сожалению, исходник я так и не нашел в интернетах, но решил попробовать повторить рисунок. Вечером накидал код на PureBasic, но символ вышел не по центру, и отложил работу до утра. Сегодня воспроизвел рисунок:
If InitSprite() And OpenWindow(0,0,0,640,400,"yinyang",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,400,0,0,0)
StartDrawing(ScreenOutput())
For x=0 To 320
For y=0 To 200
cl=$ff0000
xx=x-160
yy=y-100
If Sqr(xx*xx+yy*yy)<100
If x>160
cl=0
Else
cl=$FFFFFF
EndIf
yy+50
If Sqr(xx*xx+yy*yy)<50
cl=$FFFFff
EndIf
yy-100
If Sqr(xx*xx+yy*yy)<50
cl=0
EndIf
yy+100
If Sqr(xx*xx+yy*yy)<15
cl=0
EndIf
yy-100
If Sqr(xx*xx+yy*yy)<15
cl=$FFFFFF
EndIf
;--End radius
EndIf
Box(x*2,y*2,2,2,cl)
Next y
Next x
StopDrawing()
FlipBuffers()
Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
StartDrawing(ScreenOutput())
For x=0 To 320
For y=0 To 200
cl=$ff0000
xx=x-160
yy=y-100
If Sqr(xx*xx+yy*yy)<100
If x>160
cl=0
Else
cl=$FFFFFF
EndIf
yy+50
If Sqr(xx*xx+yy*yy)<50
cl=$FFFFff
EndIf
yy-100
If Sqr(xx*xx+yy*yy)<50
cl=0
EndIf
yy+100
If Sqr(xx*xx+yy*yy)<15
cl=0
EndIf
yy-100
If Sqr(xx*xx+yy*yy)<15
cl=$FFFFFF
EndIf
;--End radius
EndIf
Box(x*2,y*2,2,2,cl)
Next y
Next x
StopDrawing()
FlipBuffers()
Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
Но мне показалось мало, и я засел за код msdos. После пары пассов вышло 128б. Публиковать буду после Демодуляции 2023.
Дополнение. Теперь анимация
an=0
flg=1
If InitSprite() And OpenWindow(0,0,0,640,480,"3D",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
Repeat
StartDrawing(ScreenOutput())
If flg
Box(0,0,640,480,$ff0000)
flg=0
EndIf
;DrawingMode(#PB_2DDrawing_Outlined )
;Circle(320,100,100,$FFFFFF)
x0.f=320+50*Cos(an*#PI/180)
y0.f=100+50*Sin(an*#PI/180)
DrawingMode(#PB_2DDrawing_Default )
Circle(Int(x0),Int(y0),50,$FFFFFF)
Circle(Int(x0),Int(y0),15,0)
x1.f=320+50*Cos((180+an)*#PI/180)
y1.f=100+50*Sin((180+an)*#PI/180)
Circle(Int(x1),Int(y1),50,0)
Circle(Int(x1),Int(y1),15,$FFFFFF)
DrawingMode(#PB_2DDrawing_Outlined )
; Circle(320,100,100,$FFFFFF)
an=(an+2)%360
;Debug an
StopDrawing()
FlipBuffers()
;Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
flg=1
If InitSprite() And OpenWindow(0,0,0,640,480,"3D",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
Repeat
StartDrawing(ScreenOutput())
If flg
Box(0,0,640,480,$ff0000)
flg=0
EndIf
;DrawingMode(#PB_2DDrawing_Outlined )
;Circle(320,100,100,$FFFFFF)
x0.f=320+50*Cos(an*#PI/180)
y0.f=100+50*Sin(an*#PI/180)
DrawingMode(#PB_2DDrawing_Default )
Circle(Int(x0),Int(y0),50,$FFFFFF)
Circle(Int(x0),Int(y0),15,0)
x1.f=320+50*Cos((180+an)*#PI/180)
y1.f=100+50*Sin((180+an)*#PI/180)
Circle(Int(x1),Int(y1),50,0)
Circle(Int(x1),Int(y1),15,$FFFFFF)
DrawingMode(#PB_2DDrawing_Outlined )
; Circle(320,100,100,$FFFFFF)
an=(an+2)%360
;Debug an
StopDrawing()
FlipBuffers()
;Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
Комментарии
Отправить комментарий