Own-Programming-Language-Tu.../examples/game/agar.own

74 lines
1.8 KiB
Scala
Raw Permalink Normal View History

2023-09-09 15:52:32 +03:00
use canvas, math, std
w = 800 h = 600
w2 = w/2 h2 = h/2
window("agar.io own clone", w, h)
// поле
fieldWidth = 5000
fieldHeight = 3000
fieldX = rand(fieldWidth) - w2
fieldY = rand(fieldHeight) - h2
// еда
NUM_FOOD = 350
food = newarray(4, NUM_FOOD)
2016-02-14 21:24:06 +02:00
for i = 0, i < NUM_FOOD, i++ {
food[0][i] = rand(fieldWidth)
food[1][i] = rand(fieldHeight)
food[2][i] = 6 + rand(2)
food[3][i] = rand(#ffffff)
}
// игрок
playerSize = 8
playerColor = rand(#ffffff)
run = 1
while run {
mouse = mousehover()
angle = atan2(mouse[1] - h2, mouse[0] - w2)
2016-02-14 21:24:06 +02:00
fieldX += cos(angle) * 50/playerSize
fieldY += sin(angle) * 50/playerSize
if (fieldX < -w2) fieldX = -w2
else if (fieldX > fieldWidth - w2 - 1) fieldX = fieldWidth - w2 - 1
if (fieldY < -h2) fieldY = -h2
else if (fieldY > fieldHeight - h2 - 1) fieldY = fieldHeight - h2 - 1
// очистка экрана
color(#ffffff)
frect(0, 0, w, h)
// граница
color(#333333)
rect(-fieldX, -fieldY, fieldWidth, fieldHeight)
2016-02-14 21:24:06 +02:00
for i = 0, i < NUM_FOOD, i++ {
dx = food[0][i] - fieldX - w2
dy = food[1][i] - fieldY - h2
rad = food[2][i] + playerSize
if ( (dx*dx + dy*dy) < (rad*rad) ) {
// есть столкновение
2016-02-14 21:24:06 +02:00
playerSize++
food[0][i] = rand(w)
food[1][i] = rand(h)
food[2][i] = 6 + rand(2)
food[3][i] = rand(#ffffff)
}
// отрисовка еды
color(food[3][i])
circle(food[0][i] - fieldX, food[1][i] - fieldY, food[2][i])
}
// отрисовка игрока
color(playerColor)
circle(w2, h2, playerSize)
color(0)
2016-02-20 10:12:26 +02:00
drawstring(playerSize, w2-7, h2+4)
repaint()
sleep(20)
}
def circle(cx, cy, rad) foval(cx-rad, cy-rad, 2*rad, 2*rad)