Block-Slider
Model was written in NetLogo 6.2.2
•
Viewed 136 times
•
Downloaded 25 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
globals [ ;; mouse-state variables click? down-patch up-patch ;; display variable pixel ;; set to fraction of patch = 1 pixel, i.e. 1 / patch-size ] breed [ blocks block ] blocks-own [ state ;; "sliding" or anything else start ;; where block came from destination ;; where block is going travel-time;; how long it takes to get there arrival-time ;; arrival-time - timer used to slide blocks ] to startup setup end to-report color-from-who report 15 + 10 * (who mod 13) end to setup clear-all set pixel 1 / patch-size ask patches [ sprout-blocks 1 [ set color color-from-who set pcolor color + 2 ;; pale border around square set shape "square" ;; a funky square, set heading 90 * random 4 ;; display purposes only, for that funky look ] ] ;; remove one block ask one-of blocks [ set pcolor black die ] set click? false reset-ticks end ;; use reporters to wrap tests in meaningful names. ;; this is what we mean by "self-documenting code" to-report mouse-went-down? report (mouse-down? and not click?) end to-report mouse-went-up? report (not mouse-down? and click?) end to-report mouse-clicked? report (is-patch? down-patch and up-patch = down-patch) end to do-click-action ;; if a turtle that is next to an empty patch is clicked, ;; start sliding that turtle if ( any? (blocks-on up-patch) with [ state != "sliding" ] ) [ ;; get this block let this-block one-of blocks-on up-patch ;; gather empty patches let empty-patches [ neighbors4 with [ pcolor != gray and not any? turtles-here ] ] of this-block ;; any if any? empty-patches [ let empty-patch one-of empty-patches ask this-block [ set state "sliding" ask my-links [ die ] set destination empty-patch set start patch-here set travel-time slide-duration set arrival-time timer + (travel-time * .001) ask destination [ set pcolor black + .1 ] ask start [ set pcolor black ] ] ] ] end to go-animation ask blocks with [ state = "sliding" ] [ ifelse ( timer >= arrival-time ) [ ;; arrived set state "waiting" move-to destination ;; visuals set pcolor color + 2 create-links-with ( (turtles-on neighbors4 ) with [ color = [ color ] of myself ]) [ set shape "plain" set color [ color ] of myself - 2 set thickness min (list 1 (5 * pixel) ) ] ] [ let ratio (arrival-time - timer) / ( travel-time * .001) set xcor [ pxcor ] of start * ratio + [ pxcor ] of destination * (1 - ratio) set ycor [ pycor ] of start * ratio + [ pycor ] of destination * (1 - ratio) ] ] end to do-mouse-down set click? true set down-patch patch mouse-xcor mouse-ycor set up-patch nobody end to do-mouse-up set click? false set up-patch patch mouse-xcor mouse-ycor if mouse-clicked? [ do-click-action ] set down-patch nobody set up-patch nobody end to go ( ifelse ( mouse-went-down? ) [ do-mouse-down ] ( mouse-went-up? ) [ do-mouse-up ] ) go-animation end
There are 2 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Block-Slider.png | preview | Preview for 'Block-Slider' | over 2 years ago, by James Steiner | Download |
This model does not have any ancestors.
This model does not have any descendants.