From e323d566e88a32ce8f66c8d1ecc935d76c4d819b Mon Sep 17 00:00:00 2001 From: Julia Ogris Date: Tue, 12 Nov 2024 11:04:05 +1100 Subject: [PATCH] playsite: Add two more samples Add two more samples, one for graphing mathematical functions one for a frogger style game as described in https://lab.evy.dev#game Keep them in a single commit to avoid updating snapshots twice. --- .../modal-chromium-docker.png | Bin 64241 -> 68323 bytes frontend/play/samples/games/frogger.evy | 84 +++++ frontend/play/samples/interact/graph.evy | 322 ++++++++++++++++++ frontend/play/samples/samples.json | 4 +- 4 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 frontend/play/samples/games/frogger.evy create mode 100644 frontend/play/samples/interact/graph.evy diff --git a/e2e/play/test.js-snapshots/modal-chromium-docker.png b/e2e/play/test.js-snapshots/modal-chromium-docker.png index 7e3a386d04ef915009983dcbb78616d59cbb6652..dd570dcf9cb6e1ac807827d44cbc77178a2534bb 100644 GIT binary patch delta 31139 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 delta 26982 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 S>mF!e)P5V=J$Y6hSN{VnwX=c% diff --git a/frontend/play/samples/games/frogger.evy b/frontend/play/samples/games/frogger.evy new file mode 100644 index 00000000..e5d85bc5 --- /dev/null +++ b/frontend/play/samples/games/frogger.evy @@ -0,0 +1,84 @@ +// globals +level := 0 + +// position of πŸ‘Ύ +x := 50 +y := 0 + +// x-position of arrows +gold := 0 +orange := 50 +red := 0 + +on animate + updateLevel + updatePositions + draw + checkCollision +end + +// updateLevel increments level global and prints it +// every time we start at the bottom (again). +func updateLevel + if y < 0.1 + level = level + 1 + print "Level" level + end +end + +// updatePositions updates πŸ‘Ύ and arrow position globals +func updatePositions + y = (y + 0.1) % 100 + gold = (gold + 0.3) % 110 + orange = 100 - (100 - orange + 0.5) % 120 + red = (red + 0.7) % 130 +end + +func draw + clear + drawText "πŸ‘Ύ" x y "" + drawText "β–Άβ–Ά" gold 30 "gold" + drawText "β—€β—€" orange 50 "orange" + drawText "β–Άβ–Ά" red 70 "orangered" +end + +func drawText s:string x:num y:num hue:string + color hue + move x y + text s +end + +// checkCollision ends game with "Game over" message if +// πŸ‘Ύ collides with arrows. +func checkCollision + if (abs x-gold) < 6 and (abs y-30) < 4.5 + print "🟑 Game over." + exit 0 + else if (abs x-orange) < 6 and (abs y-50) < 4.5 + print "🟠 Game over." + exit 0 + else if (abs x-red) < 6 and (abs y-70) < 4.5 + print "πŸ”΄ Game over." + exit 0 + end +end + +// on key moves πŸ‘Ύ left/right for arrow keys and h/l +on key k:string + // introduce next gen to vi keys + if k == "ArrowLeft" or k == "h" + x = (x + 99) % 100 + else if k == "ArrowRight" or k == "l" + x = (x + 1) % 100 + end +end + +// on down moves πŸ‘Ύ left/right for mouse/touch events +// near left and right edge. +on down xd:num _:num + if xd < 20 + x = (x + 99) % 100 + else if xd > 80 + x = (x + 1) % 100 + end +end diff --git a/frontend/play/samples/interact/graph.evy b/frontend/play/samples/interact/graph.evy new file mode 100644 index 00000000..9e5975be --- /dev/null +++ b/frontend/play/samples/interact/graph.evy @@ -0,0 +1,322 @@ +// Interactive plotting with zoom and pan. + +HOME_XMIN := -1.1 +HOME_XMAX := 5.9 +HOME_YMIN := -3.5 +HOME_YMAX := 30 +xMin:num +xMax:num + +// The plot function is called to plot a mathematical function +// on the zoomable graph paper. +// Change this to plot different functions. +func plot + color "red" + step := (xMax - xMin) / 100 + stop := xMax + step + y := sin xMin + gmove xMin y + for x := range xMin stop step + y = sin x + gline x y + end +end + +// ---------------------βœ‚------------------------- +// generic zoomable graphing paper, setup and even handlers + +yMin:num +yMax:num +xExtend:num +yExtend:num +xScale:num +yXcale:num +xTick:num +yTick:num +originHidden:bool + +isDrag := false +xDrag := 0 +yDrag := 0 + +// initialize +zoomHome + +func zoomHome + homeXScale := 100 / (HOME_XMAX - HOME_XMIN) + homeYXcale := 100 / (HOME_YMAX - HOME_YMIN) + update HOME_XMIN HOME_YMIN homeXScale homeYXcale + draw +end + +func draw + clear + drawGraphPaper + plot + drawButtons +end + +func update xMin1:num yMin1:num xScale1:num yXcale1:num + xMin = xMin1 + yMin = yMin1 + xScale = xScale1 + yXcale = yXcale1 + // derived + xExtend = 100 / xScale + yExtend = 100 / yXcale + xMax = xMin + xExtend + yMax = yMin + yExtend + xTick = calcTick xExtend + yTick = calcTick yExtend + originHidden = xMin > 0 or xMax < 0 or yMin > 0 or yMax < 0 +end + +func setDragState d:bool x:num y:num + isDrag = d + xDrag = x + yDrag = y +end + +func drag x:num y:num + if isDrag + update xMin+(xDrag - x)/xScale yMin+(yDrag - y)/yXcale xScale yXcale + setDragState true x y + draw + end +end + +func zoomIn + zoom 2 +end + +func zoomOut + zoom 0.5 +end + +func zoom f:num + xd := xExtend * (f - 1) / (2 * f) + yd := yExtend * (f - 1) / (2 * f) + update xMin+xd yMin+yd xScale*f yXcale*f +end + +func drawGraphPaper + drawGrid xTick/5 yTick/5 0.05 "gainsboro" + drawGrid xTick yTick 0.1 "dimgrey" + drawAxes +end + +func drawGrid xdist:num ydist:num w:num hue:string + width w + color hue + start := roundUp xMin xdist + stop := xMax + xdist + for x := range start stop xdist + gv x yMin yMax + end + start = roundUp yMin ydist + stop = yMax + ydist + for y := range start stop ydist + gh xMin xMax y + end +end + +func drawAxes + width 0.2 + color (hsl 0 0 20) + drawAxesLines + drawXLabels + drawYLabels +end + +func drawAxesLines + gh xMin xMax 0 // x-Axis + gv 0 yMin yMax // y-Axis + if !originHidden + font {baseline:"alphabetic" align:"left" size:2} + gtextnumf 0.05*xTick 0.05*yTick 0 "%v" + end +end + +func drawXLabels + y := yMin // labels on very bottom if x-axis not visible + if yMin <= 0 and yMax > 0 + y = 0 // x-axis visible + end + font {baseline:"alphabetic" align:"center" size:2} + start := roundUp xMin xTick + stop := xMax + xTick + tl := 0.025 * yTick + for x := range start stop xTick + gv x y-tl y+tl + // don't double label origin + if (abs x) > xTick / 2 or originHidden + gtextnum x y+2*tl x xExtend + end + end +end + +func drawYLabels + font {baseline:"middle" align:"left" size:2} + x := xMin // labels on very left if y-axis not visible + if xMin <= 0 and xMax > 0 + x = 0 // y-axis visible + end + start := roundUp yMin yTick + stop := yMax + yTick + tl := 0.025 * xTick + for y := range start stop yTick + gh x-tl x+tl y + // don't double label origin + if (abs y) > yTick / 2 or originHidden + gtextnum x+2*tl y y yExtend + end + end +end + +func drawButtons + fill "gainsboro" + stroke "darkgrey" + width 0.3 + + move 93 93 + rect 6 6 + + move 93 85 + rect 6 6 + + move 93 79 + rect 6 6 + + // labels + color "grey" + font {baseline:"alphabetic" align:"left" size:3} + + move 94.1 94.6 + text "🏠" + + font {baseline:"alphabetic" align:"left" size:6} + move 94.2 86.1 + text "+" + move 94.2 80.1 + text "-" +end + +on down x:num y:num + if inHomeButton x y + zoomHome + else if inZoomInButton x y + zoomIn + else if inZoomOutButton x y + zoomOut + else + setDragState true x y + end +end + +on move x:num y:num + drag x y +end + +on up + setDragState false 0 0 + draw +end + +func inHomeButton:bool x:num y:num + return x >= 93 and x <= 99 and y >= 93 and y <= 99 +end + +func inZoomInButton:bool x:num y:num + return x >= 93 and x <= 99 and y >= 85 and y <= 91 +end + +func inZoomOutButton:bool x:num y:num + return x >= 93 and x <= 99 and y >= 79 and y <= 85 +end + +func calcTick:num extend:num + d := log10 extend/10 + f := d - (floor d) + if f > 0.15 and f < 0.42 + return 2 * (pow 10 (round d)) + else if f >= 0.42 and f < 0.5 + return 5 * (pow 10 (round d)) + else if f >= 0.5 and f < 0.78 + return 0.5 * (pow 10 (round d)) + end + return pow 10 (round d) +end + +func gmove x:num y:num + move (ex x) (ey y) +end + +func gline x:num y:num + line (ex x) (ey y) +end + +// vertical line +func gv x:num y1:num y2:num + gmove x y1 + gline x y2 +end + +// horizontal line +func gh x1:num x2:num y:num + gmove x1 y + gline x2 y +end + +func gtextnum x:num y:num n:num extend:num + p := 0 + lg := floor (log10 extend/10) + if lg < 0 + p = abs (lg) + end + fstr := sprintf "%%.%0.ff" p + gtextnumf x y n fstr +end + +func gtextnumf x:num y:num n:num fstr:string + gmove x y + text (sprintf fstr n) +end + +func roundUp:num n:num multiple:num + r := (abs n) % multiple + if r == 0 + return n + end + if n > 0 + return n + multiple - r + end + return -(-n + multiple - r) +end + +func log10:num n:num + return (log n) / (log 10) +end + +// ex is the evy x coordinate (0, 100) for a given +// graphing x coordinate graphX (xMin, xMin+extend). +func ex:num graphX:num + return xScale * (graphX - xMin) +end + +// ey is the evy y coordinate (0, 100) for a given +// graphing y coordinate graphY (yMin, yMin+extend). +func ey:num graphY:num + return yXcale * (graphY - yMin) +end + +// gx is the grpahing x coordinate (xMin, xMin+extend) +// for a gvien evy x coordinate evyX (0, 100) +func gx:num evyX:num + return xMin + evyX / xScale +end + +// gy is the grpahing y coordinate (yMin, yMin+extend) +// for a gvien evy y coordinate evyY(0, 100) +func gy:num evyY:num + return yMin + evyY / yXcale +end diff --git a/frontend/play/samples/samples.json b/frontend/play/samples/samples.json index eb6a2609..8dea12ee 100644 --- a/frontend/play/samples/samples.json +++ b/frontend/play/samples/samples.json @@ -47,7 +47,8 @@ { "id": "ellipse", "title": "Watermelon Ellipse" }, { "id": "draw", "title": "Draw" }, { "id": "coords", "title": "Coordinates" }, - { "id": "life", "title": "Game of Life" } + { "id": "life", "title": "Game of Life" }, + { "id": "graph", "title": "Zoomable Graph" } ] }, { @@ -58,6 +59,7 @@ { "id": "rand", "title": "Guess my Number" }, { "id": "hanoi", "title": "Towers of Hanoi" }, { "id": "tictactoe", "title": "Tic Tac Toe" }, + { "id": "frogger", "title": "Alien Frogger" }, { "id": "tictactoetext", "title": "Text Tic Tac Toe", "unlisted": true } ] }