Advertisement
Guest User

testarossa

a guest
Oct 20th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. import 'dart:io';
  2. import 'dart:math';
  3. import 'dart:async';
  4. import 'dart:collection';
  5.  
  6. class Pong {
  7. var TICK_TIME = const Duration(milliseconds: 17);
  8. var TICK_DOWN = 60 * 3;
  9. var WAIT_DOWN = 60;
  10.  
  11. var BASE_SPEED = 1.5;
  12.  
  13. var PADDLE_WIDTH = 10;
  14. var PADDLE_HEIGHT = 50;
  15.  
  16. var BALL_SIZE = 10;
  17.  
  18. var SCREEN_HEIGHT = 400;
  19. var SCREEN_WIDTH = 600;
  20.  
  21. var BUMP_ACCELERATION = 0.05;
  22.  
  23. // screen height = 400;
  24. // screen width = 600;
  25. var self = new Map();
  26. var bean = new Map();
  27.  
  28. var gameTimer;
  29. var gameRandom;
  30.  
  31. setupLevel () {
  32. var randomAngle = (gameRandom.nextBool() ? 1 : -1) * (PI / 4 + gameRandom.nextDouble() * PI / 2);
  33.  
  34. var vx = sin(randomAngle) * BASE_SPEED;
  35. var vy = cos(randomAngle) * BASE_SPEED;
  36.  
  37. bean['ball'] = {'px': 300, 'py': 200, 'vx': vx, 'vy': vy};
  38.  
  39. bean['tickDown'] = TICK_DOWN;
  40. }
  41.  
  42. gameTick(timer) {
  43. // do the updating
  44. if (bean['waitDown'] != 0) {
  45. bean['waitDown'] = bean['waitDown'] - 1;
  46.  
  47. if (bean['waitDown'] == 0) {
  48. setupLevel();
  49. };
  50. }
  51. else if (bean['tickDown'] != 0) {
  52. bean['tickDown'] = bean['tickDown'] - 1;
  53. }
  54. else {
  55. var bx = bean['ball']['px'];
  56. var by = bean['ball']['py'];
  57.  
  58. var vx = bean['ball']['vx'];
  59. var vy = bean['ball']['vy'];
  60.  
  61. by += vy;
  62.  
  63. if (by <= 0) {
  64. by *= -1;
  65.  
  66. vy = -vy + BUMP_ACCELERATION;
  67. }
  68. else if (by >= SCREEN_HEIGHT) {
  69. var dy = by - SCREEN_HEIGHT;
  70.  
  71. by = SCREEN_HEIGHT - dy;
  72. vy = -vy + -BUMP_ACCELERATION;
  73. }
  74.  
  75. var plpx = bean['playerLeft']['px'] + PADDLE_WIDTH / 2;
  76. var plpy = bean['playerLeft']['py'] - PADDLE_HEIGHT / 2;
  77.  
  78. var prpx = bean['playerRight']['px'] - PADDLE_WIDTH / 2;
  79. var prpy = bean['playerRight']['py'] - PADDLE_HEIGHT / 2;
  80.  
  81. var bty = by - BALL_SIZE / 2;
  82. var bby = by + BALL_SIZE / 2;
  83.  
  84. if ((vx > 0) && ((bx < prpx) && (bx + vx > prpx)) &&
  85. ((bby > prpy) && (bty < prpy + PADDLE_HEIGHT))) {
  86.  
  87. vx = -vx - BUMP_ACCELERATION;
  88. }
  89. else if ((vx < 0) && ((bx > plpx) && (bx + vx < plpx)) &&
  90. ((bby > plpy) && (bty < plpy + PADDLE_HEIGHT))) {
  91.  
  92. vx = -vx + BUMP_ACCELERATION;
  93. }
  94.  
  95. bx += vx;
  96.  
  97. bean['ball']['px'] = bx;
  98. bean['ball']['py'] = by;
  99.  
  100. bean['ball']['vx'] = vx;
  101. bean['ball']['vy'] = vy;
  102.  
  103. if (bx < 0) {
  104. // set a score
  105. bean['playerRight']['score'] += 1;
  106.  
  107. bean['waitDown'] = WAIT_DOWN;
  108. }
  109. else if (bx > SCREEN_WIDTH) {
  110. // set a score;
  111. bean['playerLeft']['score'] += 1;
  112.  
  113. bean['waitDown'] = WAIT_DOWN;
  114. }
  115. }
  116.  
  117. self['socketLeft'].add(bean.toString());
  118. self['socketRight'].add(bean.toString());
  119. }
  120.  
  121. Pong(socketLeft, socketRight) {
  122. gameRandom = new Random();
  123.  
  124. self['socketLeft'] = socketLeft;
  125. self['socketRight'] = socketRight;
  126.  
  127. setupLevel();
  128.  
  129. bean['waitDown'] = 0;
  130. bean['playerLeft'] = {'px': 20, 'py': 200, 'score': 0};
  131. bean['playerRight'] = {'px': 580, 'py': 200, 'score': 0};
  132.  
  133.  
  134. socketLeft.listen((e) {
  135. bean['playerLeft']['py'] = double.parse(e).round();
  136. });
  137. socketRight.listen((e) {
  138. bean['playerRight']['py'] = double.parse(e).round();
  139. });
  140.  
  141. gameTimer = new Timer.periodic(TICK_TIME, gameTick);
  142. }
  143. }
  144.  
  145. main() async {
  146. try {
  147. var server = await HttpServer.bind('192.168.1.108', 4040);
  148. var socketList = [];
  149.  
  150. await for (HttpRequest req in server) {
  151. if (req.uri.path == '/ws') {
  152. var socket = await WebSocketTransformer.upgrade(req);
  153.  
  154. socketList.add(socket);
  155.  
  156. if (socketList.length == 2) {
  157. var pongGame = new Pong(socketList[0], socketList[1]);
  158.  
  159. socketList.length = 0;
  160. };
  161. }
  162. }
  163. }
  164. catch (e) {
  165. print(e);
  166. }
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement