Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:io';
- import 'dart:math';
- import 'dart:async';
- import 'dart:collection';
- class Pong {
- var TICK_TIME = const Duration(milliseconds: 17);
- var TICK_DOWN = 60 * 3;
- var WAIT_DOWN = 60;
- var BASE_SPEED = 1.5;
- var PADDLE_WIDTH = 10;
- var PADDLE_HEIGHT = 50;
- var BALL_SIZE = 10;
- var SCREEN_HEIGHT = 400;
- var SCREEN_WIDTH = 600;
- var BUMP_ACCELERATION = 0.05;
- // screen height = 400;
- // screen width = 600;
- var self = new Map();
- var bean = new Map();
- var gameTimer;
- var gameRandom;
- setupLevel () {
- var randomAngle = (gameRandom.nextBool() ? 1 : -1) * (PI / 4 + gameRandom.nextDouble() * PI / 2);
- var vx = sin(randomAngle) * BASE_SPEED;
- var vy = cos(randomAngle) * BASE_SPEED;
- bean['ball'] = {'px': 300, 'py': 200, 'vx': vx, 'vy': vy};
- bean['tickDown'] = TICK_DOWN;
- }
- gameTick(timer) {
- // do the updating
- if (bean['waitDown'] != 0) {
- bean['waitDown'] = bean['waitDown'] - 1;
- if (bean['waitDown'] == 0) {
- setupLevel();
- };
- }
- else if (bean['tickDown'] != 0) {
- bean['tickDown'] = bean['tickDown'] - 1;
- }
- else {
- var bx = bean['ball']['px'];
- var by = bean['ball']['py'];
- var vx = bean['ball']['vx'];
- var vy = bean['ball']['vy'];
- by += vy;
- if (by <= 0) {
- by *= -1;
- vy = -vy + BUMP_ACCELERATION;
- }
- else if (by >= SCREEN_HEIGHT) {
- var dy = by - SCREEN_HEIGHT;
- by = SCREEN_HEIGHT - dy;
- vy = -vy + -BUMP_ACCELERATION;
- }
- var plpx = bean['playerLeft']['px'] + PADDLE_WIDTH / 2;
- var plpy = bean['playerLeft']['py'] - PADDLE_HEIGHT / 2;
- var prpx = bean['playerRight']['px'] - PADDLE_WIDTH / 2;
- var prpy = bean['playerRight']['py'] - PADDLE_HEIGHT / 2;
- var bty = by - BALL_SIZE / 2;
- var bby = by + BALL_SIZE / 2;
- if ((vx > 0) && ((bx < prpx) && (bx + vx > prpx)) &&
- ((bby > prpy) && (bty < prpy + PADDLE_HEIGHT))) {
- vx = -vx - BUMP_ACCELERATION;
- }
- else if ((vx < 0) && ((bx > plpx) && (bx + vx < plpx)) &&
- ((bby > plpy) && (bty < plpy + PADDLE_HEIGHT))) {
- vx = -vx + BUMP_ACCELERATION;
- }
- bx += vx;
- bean['ball']['px'] = bx;
- bean['ball']['py'] = by;
- bean['ball']['vx'] = vx;
- bean['ball']['vy'] = vy;
- if (bx < 0) {
- // set a score
- bean['playerRight']['score'] += 1;
- bean['waitDown'] = WAIT_DOWN;
- }
- else if (bx > SCREEN_WIDTH) {
- // set a score;
- bean['playerLeft']['score'] += 1;
- bean['waitDown'] = WAIT_DOWN;
- }
- }
- self['socketLeft'].add(bean.toString());
- self['socketRight'].add(bean.toString());
- }
- Pong(socketLeft, socketRight) {
- gameRandom = new Random();
- self['socketLeft'] = socketLeft;
- self['socketRight'] = socketRight;
- setupLevel();
- bean['waitDown'] = 0;
- bean['playerLeft'] = {'px': 20, 'py': 200, 'score': 0};
- bean['playerRight'] = {'px': 580, 'py': 200, 'score': 0};
- socketLeft.listen((e) {
- bean['playerLeft']['py'] = double.parse(e).round();
- });
- socketRight.listen((e) {
- bean['playerRight']['py'] = double.parse(e).round();
- });
- gameTimer = new Timer.periodic(TICK_TIME, gameTick);
- }
- }
- main() async {
- try {
- var server = await HttpServer.bind('192.168.1.108', 4040);
- var socketList = [];
- await for (HttpRequest req in server) {
- if (req.uri.path == '/ws') {
- var socket = await WebSocketTransformer.upgrade(req);
- socketList.add(socket);
- if (socketList.length == 2) {
- var pongGame = new Pong(socketList[0], socketList[1]);
- socketList.length = 0;
- };
- }
- }
- }
- catch (e) {
- print(e);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement