int ball, bar, score, life; int keydown, ballpause, gameoverPause; float ballvx, ballvy, ballsize; float barvy, baray, barsize; void UpdateBall() { if (ballpause > 0) { ballpause--; return; } float x = GetX() + ballvx; float y = GetY() + ballvy; if (y < 50) { y = 50; ballvy = -ballvy; } else if (y > 550-ballsize) { y = 550-ballsize; ballvy = -ballvy; } if (x > 750-ballsize) { x = 750-ballsize; ballvx = -ballvx; Rotate(ballvx*50); } if (x>80 && x<80+barsize/3) { Begin(bar); float top = GetY()-ballsize; float down = GetY()+barsize; End(); if (y>top && y 40) ballvx = 40; ballvy = (y-(top+down)/2)*2/barsize*ballvx; Rotate(ballvx*50); Begin(score); Number(GetNumber()+10); End(); } } if (x < 50) { x = 600; y = 300; ballvx = fabs(ballvx) * 0.5; if (ballvx < 10) ballvx = 10; ballvy = rand() % 20 - 10; Rotate(ballvx*50); ballpause = 50; Begin(life); if (GetNumber() == 0) { Begin(ball); Show(0); End(); Begin(bar); Color(0.5,0.5,0.5); End(); gameoverPause = 150; } else Number(GetNumber()-1); End(); } Position(x, y); } void UpdateBar() { if (keydown==BUTTONKEY_PAD_UP || keydown==BUTTONKEY_JOY1_UP) baray = -2.5; else if (keydown==BUTTONKEY_PAD_DOWN || keydown==BUTTONKEY_JOY1_DOWN) baray = 2.5; else if (keydown != 0) baray = 0; barvy = barvy + baray; if (barvy > 0) { barvy = barvy - 0.5; if (barvy < 0) barvy = 0; else if (barvy > 10) barvy = 10; } else if (barvy < 0) { barvy = barvy + 0.5; if (barvy > 0) barvy = 0; else if (barvy < -10) barvy = -10; } float y = GetY() + barvy; if (y < 50) y = 50; else if (y > 550-barsize) y = 550-barsize; Position(GetX(), y); } int PongMainLoop_OnInput(int key) { keydown = key; return 1; } void PongMainLoop_OnAnimate(int frame) { if (gameoverPause > 0) { gameoverPause--; if (gameoverPause == 0) { Begin(ball); Show(1); End(); Begin(bar); Color(1,1,1); End(); Begin(score); Number(0); End(); Begin(life); Number(2); End(); ballvx = 10; ballvy = rand() % 20 - 10; barvy = baray = 0; keydown = 0; } else { NextFrame(0.02); return; } } Begin(bar); UpdateBar(); End(); Begin(ball); UpdateBall(); End(); keydown = 0; NextFrame(0.02); } int NewPong() { int id = NewUI(); Begin(id); Begin(NewUI()); Size(800, 600); Color(0.5,1,1); Image("title_small"); Repeat(4, 3); Scroll(-0.1, 0.05); End(); Begin(NewUI()); Position(50, 50); Size(700, 500); Gradient(0.4,0.3,0.8,1, 0,0,0,1, 2); BorderSize(2, 2); BorderColor(1,1,1); End(); barsize = 200; Begin(bar=NewUI()); Position(80, 250); Color(1,1,1); Size(barsize/3, barsize); Image("lightbar"); End(); ballvx = 10; ballvy = rand() % 20 - 10; ballsize = 40; ballpause = 50; Begin(ball=NewUI()); Position(600, 300); Color(1,1,1); Size(ballsize, ballsize); Image("icon_weapon50"); Rotate(ballvx*50); Blend(BLEND_MODE_ADD); End(); Begin(score=NewUI()); Position(740, 50); TextColor(1,1,1); TextSize(30); Font(1); TextFlag(TEXT_ALIGN_RIGHT); ShowNumber(0); End(); Begin(life=NewUI()); Position(50, 50); TextColor(1,1,1); TextSize(30); Font(1); ShowNumber(0); TextOffset(60, 0); Number(2); Color(1,1,1); Image("title_small"); Size(60, 30); End(); Begin(NewUI("PongMainLoop")); PlayAnimation(); End(); End(); return id; }