123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import "random" for Random
- class GrayscaleImage {
- construct new(width, height, depth) {
- _width = width
- _height = height
- _depth = depth
- _image = []
- for (y in 0...height) {
- _image.add(List.filled(width, 0))
- }
- }
- pixel(x, y, shade) {
- _image[y][x] = shade
- }
- // «rectangle»
- rectangle(x, y, width, height, shade) {
- // the two horizontal lines
- for (dx in 0..width) {
- pixel(x + dx, y, shade)
- pixel(x + dx, y + height, shade)
- }
- // the two vertical lines
- for (dy in 0..height) {
- pixel(x, y + dy, shade)
- pixel(x + width, y + dy, shade)
- }
- }
- // «end»
- showPGM() {
- System.print("P2") // the PGM header
- System.print("%(_width) %(_height)")
- System.print(_depth) // the maximum value which will appear
- for (y in 0..._height) {
- for (x in 0..._width) {
- System.write("%(_image[y][x]) ")
- }
- System.print()
- }
- }
- }
- var rand = Random.new()
- var width = 24
- var height = 24
- var depth = 8
- // «main»
- var image = GrayscaleImage.new(width, height, depth)
- // create up to 6 rectangles
- for (i in 0..rand.int(3, 6)) {
- // choose the color from the depth
- var color = rand.int(2, 8)
- // choose top-left point randomly
- var x = rand.int(0, width-3)
- var y = rand.int(0, height-3)
- // choose width and height from remaining
- var w = rand.int(x+2, width) - x
- var h = rand.int(y+2, height) - y
- // draw the rectangle
- image.rectangle(x, y, w, h, color)
- }
- image.showPGM()
- // «end»
|