You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

680 lines
14 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. #include "game.hpp"
  2. namespace betacore
  3. {
  4. Game::Game()
  5. {
  6. printf("%d\t%d\n", this->MONITOR_WIDTH,this->MONITOR_HEIGHT);
  7. if (init())
  8. {
  9. printf("Error loading init\n");
  10. return;
  11. }
  12. // SDL_DisplayMode DM;
  13. // SDL_GetCurrentDisplayMode(0, &DM);
  14. this->MONITOR_HEIGHT=1080;
  15. this->MONITOR_WIDTH=1920;
  16. SDL_Event event;
  17. while (this->KEEP_ALIVE)
  18. {
  19. //Handle Events
  20. this->events(event);
  21. this->paint();
  22. }
  23. close();
  24. }
  25. Game::~Game() {
  26. }
  27. int Game::init()
  28. {
  29. int result = 0;
  30. //Initialize SDL
  31. if (SDL_Init(SDL_INIT_VIDEO) < 0)
  32. {
  33. printf("Problem loading SLD Error: %s\n", SDL_GetError());
  34. }
  35. else
  36. {
  37. //OPEN GL VERSION 2.X
  38. SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
  39. //OPEN GL VERSION ^.1
  40. SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
  41. //Create window
  42. int videoFlags = SDL_WINDOW_OPENGL;
  43. //videoFlags |= SDL_WINDOW_FULLSCREEN;
  44. videoFlags |= SDL_WINDOW_SHOWN;
  45. videoFlags |= SDL_WINDOW_RESIZABLE;
  46. //videoFlags |= SDL_WINDOW_BORDERLESS;
  47. // videoFlags |= SDL_WINDOW_INPUT_GRABBED;
  48. this->WINDOW = SDL_CreateWindow(
  49. this->TITLE,
  50. SDL_WINDOWPOS_CENTERED,
  51. SDL_WINDOWPOS_CENTERED,
  52. this->SCREEN_WIDTH,
  53. this->SCREEN_HEIGHT,
  54. videoFlags);
  55. if (WINDOW == NULL)
  56. {
  57. printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
  58. result = -1;
  59. }
  60. else
  61. {
  62. glContext = SDL_GL_CreateContext(WINDOW);
  63. if (glContext == NULL)
  64. {
  65. printf("Unable to crate Open GL Context: %s\n", SDL_GetError());
  66. result = -2;
  67. }
  68. else
  69. {
  70. //Try Vsync
  71. if (SDL_GL_SetSwapInterval(1) < 0)
  72. {
  73. printf("Vsync error:%s\n", SDL_GetError());
  74. }
  75. if (initGL())
  76. {
  77. printf("Problem working with OpenGL");
  78. }
  79. }
  80. }
  81. }
  82. return result;
  83. }
  84. int Game::initGL()
  85. {
  86. int result = 0;
  87. glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // This Will Clear The Background Color To Black
  88. glClearDepth(1.0); // Enables Clearing Of The Depth Buffer
  89. glDepthFunc(GL_LESS);
  90. glEnable(GL_DEPTH_TEST); // Enables Depth Testing
  91. glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
  92. glMatrixMode(GL_PROJECTION);
  93. /* Really Nice Perspective Calculations */
  94. glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  95. glLoadIdentity();
  96. GLenum error = glGetError();
  97. if (error != GL_NO_ERROR)
  98. {
  99. printf("OpenGL Error %s\n", gluErrorString(error));
  100. result = -1;
  101. return result;
  102. }
  103. glMatrixMode(GL_MODELVIEW);
  104. // Set up the view port
  105. glViewport(0, 0, this->SCREEN_WIDTH, this->SCREEN_HEIGHT);
  106. glMatrixMode(GL_PROJECTION);
  107. glLoadIdentity();
  108. gluPerspective(
  109. 45.0f,
  110. (GLfloat)this->SCREEN_WIDTH / (GLfloat)this->SCREEN_HEIGHT,
  111. 0.1f,
  112. 100.0f);
  113. glMatrixMode(GL_MODELVIEW);
  114. return result;
  115. }
  116. void Game::close()
  117. {
  118. SDL_DestroyWindow(this->WINDOW);
  119. WINDOW = NULL;
  120. SDL_Quit();
  121. }
  122. void Game::grid()
  123. {
  124. glPushMatrix();
  125. //glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE,gray);
  126. //glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
  127. //glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 64);
  128. glTranslatef(0.0f, 0.0f, 0.0f);
  129. glLineWidth(2.5);
  130. glColor3f(1.0, 1.0, 1.0);
  131. /*grid*/
  132. float GRIDE_SIZE = 100;
  133. //X
  134. glBegin(GL_LINES);
  135. glVertex2f(-GRIDE_SIZE, 0);
  136. glVertex2f(GRIDE_SIZE, 0);
  137. glEnd();
  138. //Y
  139. glBegin(GL_LINES);
  140. glVertex2f(0, -GRIDE_SIZE);
  141. glVertex2f(0, GRIDE_SIZE);
  142. glEnd();
  143. //Z
  144. glBegin(GL_LINES);
  145. glVertex3f(0, 0, -GRIDE_SIZE);
  146. glVertex3f(0, 0, GRIDE_SIZE);
  147. glEnd();
  148. //X ticks
  149. float TICK_SIZE = .5;
  150. for (float f = -GRIDE_SIZE; f <= GRIDE_SIZE; f += 1)
  151. {
  152. //X
  153. glBegin(GL_LINES);
  154. glVertex3f(f, -TICK_SIZE, 0);
  155. glVertex3f(f, TICK_SIZE, 0);
  156. glEnd();
  157. //Y
  158. glBegin(GL_LINES);
  159. glVertex2f(-TICK_SIZE, f);
  160. glVertex2f(TICK_SIZE, f);
  161. glEnd();
  162. //Z
  163. glBegin(GL_LINES);
  164. glVertex3f(0, -TICK_SIZE, f);
  165. glVertex3f(0, TICK_SIZE, f);
  166. glEnd();
  167. }
  168. glPopMatrix();
  169. }
  170. void Game::triangle()
  171. {
  172. this->triangle(true);
  173. }
  174. void Game::triangle(bool filled)
  175. {
  176. glColor3f(1.0f, 0.0f, 0.0f);
  177. if (filled)
  178. glBegin(GL_POLYGON); // start drawing a polygon
  179. else
  180. glBegin(GL_LINE_LOOP);
  181. glColor3f(1.0f, 0.0f, 0.0f); // Set The Color To Red
  182. glVertex3f(0.0f, 1.0f, 0.0f); // Top
  183. glVertex3f(1.0f, -1.0f, 0.0f); // Bottom Right
  184. glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
  185. glEnd(); // we're done with the polygon (smooth color interpolation)
  186. }
  187. void Game::square()
  188. {
  189. this->square(true);
  190. }
  191. void Game::square(bool filled)
  192. {
  193. glColor3f(0.0f, 0.0f, 1.0f);
  194. if (filled)
  195. glBegin(GL_QUADS); // start drawing a polygon (4 sided)
  196. else
  197. glBegin(GL_LINE_LOOP);
  198. glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
  199. glVertex3f(1.0f, 1.0f, 0.0f); // Top Right
  200. glVertex3f(1.0f, -1.0f, 0.0f); // Bottom Right
  201. glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
  202. glEnd(); // done with the polygon
  203. }
  204. void Game::box()
  205. {
  206. glColor3f(1.0f, 1.0f, 1.0f);
  207. glBegin(GL_LINE_LOOP);
  208. glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
  209. glVertex3f(1.0f, 1.0f, 0.0f); // Top Right
  210. glVertex3f(1.0f, -1.0f, 0.0f); // Bottom Right
  211. glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
  212. glEnd();
  213. }
  214. void Game::rectangle()
  215. {
  216. glColor3f(1.0f, 1.0f, 1.0f);
  217. glBegin(GL_LINE_LOOP);
  218. glVertex3f(-2.5f, 1.0f, 0.0f); // Top Left
  219. glVertex3f(2.5f, 1.0f, 0.0f); // Top Right
  220. glVertex3f(2.5f, -1.0f, 0.0f); // Bottom Right
  221. glVertex3f(-2.5f, -1.0f, 0.0f); // Bottom Left
  222. glEnd();
  223. }
  224. void Game::cross(bool filled){
  225. double width = 0.15;
  226. if (filled)
  227. glBegin(GL_QUADS);
  228. else
  229. glBegin(GL_LINE_LOOP);
  230. glVertex3f(-0.5f, width, 0.0f); // Top Left
  231. glVertex3f(0.5f, width, 0.0f); // Top Right
  232. glVertex3f(0.5f, -width, 0.0f); // Bottom Right
  233. glVertex3f(-0.5f, -width, 0.0f); // Bottom Left
  234. glEnd();
  235. glPushMatrix();
  236. glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
  237. if (filled)
  238. glBegin(GL_QUADS);
  239. else
  240. glBegin(GL_LINE_LOOP);
  241. glVertex3f(-0.5f, width, 0.0f); // Top Left
  242. glVertex3f(0.5f, width, 0.0f); // Top Right
  243. glVertex3f(0.5f, -width, 0.0f); // Bottom Right
  244. glVertex3f(-0.5f, -width, 0.0f); // Bottom Left
  245. glEnd();
  246. glPopMatrix();
  247. }
  248. void Game::compass()
  249. {
  250. glPushMatrix();
  251. glTranslatef(-1.5f, 0.0f, 0.0f);
  252. glColor3f(1.0f, 1.0f, 1.0f);
  253. this->cross(false);
  254. //MINI TRIANGLE
  255. glPushMatrix();
  256. glScalef(0.12f, 0.12f, 0.0f);
  257. glTranslatef(0.0f, 2.6f, 0.0f);
  258. this->triangle(this->KEY_UP_ARROW_ACTIVE);
  259. glPopMatrix();
  260. // MINI SQUARE
  261. glPushMatrix();
  262. glScalef(0.12f, 0.12f, 0.0f);
  263. glTranslatef(0.0f, -2.6f, 0.0f);
  264. this->square(this->KEY_DOWN_ARROW_ACTIVE);
  265. glPopMatrix();
  266. // MINI PENTAGON
  267. glPushMatrix();
  268. glScalef(0.12f, 0.12f, 0.0f);
  269. glTranslatef(-2.56f, 0.0f, 0.0f);
  270. this->pentagon(this->KEY_LEFT_ARROW_ACTIVE);
  271. glPopMatrix();
  272. // MINI CIRCLE
  273. glPushMatrix();
  274. glScalef(0.12f, 0.12f, 0.0f);
  275. glTranslatef(2.56f, 0.0f, 0.0f);
  276. glColor3f(0.0f, 1.0f, 0.0f);
  277. this->circle(this->KEY_RIGHT_ARROW_ACTIVE);
  278. glPopMatrix();
  279. glPushMatrix();
  280. glScalef(0.35f, 0.35f, 0.0f);
  281. glTranslatef(7.0f, 0.0f, 0.0f);
  282. glColor3f(0.0f, 1.0f, 1.0f);
  283. this->circle(this->KEY_SPACE_ACTIVE);
  284. glPopMatrix();
  285. glPushMatrix();
  286. glScalef(0.35f, 0.35f, 0.0f);
  287. glTranslatef(10.0f, 0.0f, 0.0f);
  288. glColor3f(1.0f, 1.0f, 0.0f);
  289. this->circle(this->KEY_RETURN_ACTIVE);
  290. glPopMatrix();
  291. glPopMatrix();
  292. }
  293. void Game::circle()
  294. {
  295. this->circle(true);
  296. }
  297. void Game::circle(bool filled)
  298. {
  299. //glBegin(GL_LINE_LOOP);
  300. // for (int i = 0; i <= 300; i++)
  301. // {
  302. // double angle = 2 * PI * i / 300;
  303. // double x = cos(angle);
  304. // double y = sin(angle);
  305. // glVertex2d(x, y);
  306. // }
  307. // glEnd();
  308. double radius = 1;
  309. if (filled)
  310. glBegin(GL_POLYGON);
  311. else
  312. glBegin(GL_LINE_LOOP);
  313. double angle1 = 0.0;
  314. glVertex2d(radius * cos(0.0), radius * sin(0.0));
  315. static const int circle_points = 100;
  316. static const float angle = 2.0f * 3.1416f / circle_points;
  317. int i;
  318. for (i = 0; i < circle_points; i++)
  319. {
  320. glVertex2d(radius * cos(angle1), radius * sin(angle1));
  321. angle1 += angle;
  322. }
  323. glEnd();
  324. }
  325. void Game::pentagon()
  326. {
  327. this->pentagon(true);
  328. }
  329. void Game::pentagon(bool filled)
  330. {
  331. glRotatef(-54.0f, 0.0f, 0.0f, 1.0f);
  332. glColor3f(1.0f, 0.0f, 1.0f);
  333. float angleIncrement = 360.0f / 5.0f;
  334. angleIncrement *= PI / 180.0f;
  335. if ( filled)
  336. glBegin(GL_TRIANGLE_FAN);
  337. else
  338. glBegin(GL_LINE_LOOP);
  339. float angle = 0.0f;
  340. double radius = 1;
  341. for (int k = 0; k < 100; ++k)
  342. {
  343. glVertex3f(radius * cos(angle), radius * sin(angle), 0.0f);
  344. angle += angleIncrement;
  345. }
  346. glEnd();
  347. }
  348. void Game::user_screen()
  349. {
  350. glPushMatrix();
  351. glTranslatef(-1.5f, -1.0f, -6.0f);
  352. this->box();
  353. //this->box();
  354. //glTranslatef(-1.5f, 0.0f, -6.0f); // Move Left 1.5 Units And Into The Screen 6.0
  355. glTranslatef(-1.5f, -1.0f, -6.0f);
  356. // draw a triangle (in smooth coloring mode)
  357. switch (USER_CURRENT)
  358. {
  359. case TRIANGLE:
  360. this->triangle();
  361. break;
  362. case CIRCLE:
  363. glColor3f(0.0f, 1.0f, 0.0f);
  364. this->circle();
  365. break;
  366. case SQUARE:
  367. this->square();
  368. break;
  369. case PENTAGON:
  370. this->pentagon();
  371. break;
  372. }
  373. // glTranslatef(3.0f, 0.0f, 0.0f); // Move Right 3 Units
  374. // // draw a square (quadrilateral)
  375. // glColor3f(0.5f, 0.5f, 1.0f); // set color to a blue shade.
  376. glPopMatrix();
  377. }
  378. void Game::guest_screen()
  379. {
  380. glPushMatrix();
  381. glTranslatef(1.5f, -1.0f, -6.0f);
  382. this->box();
  383. glTranslatef(1.5f, -1.0f, -6.0f);
  384. // draw a triangle (in smooth coloring mode)
  385. switch (GUST_CURRENT)
  386. {
  387. case TRIANGLE:
  388. this->triangle();
  389. break;
  390. case CIRCLE:
  391. glColor3f(0.0f, 1.0f, 0.0f);
  392. this->circle();
  393. break;
  394. case SQUARE:
  395. this->square();
  396. break;
  397. case PENTAGON:
  398. this->pentagon();
  399. break;
  400. case UNKOWN:
  401. float gray = 105.0 / 255.0;
  402. glColor3f(gray,gray,gray);
  403. glPushMatrix();
  404. glRotatef(-45.0f, 0.0f, 0.0f, 1.0f);
  405. glScalef(2.0f, 2.0f, 0.0f);
  406. this->cross(true);
  407. glPopMatrix();
  408. break;
  409. }
  410. glPopMatrix();
  411. }
  412. void Game::top_screen()
  413. {
  414. glPushMatrix();
  415. glTranslatef(-0.0f, 1.25f, -6.0f);
  416. this->rectangle();
  417. this->compass();
  418. glPopMatrix();
  419. }
  420. void Game::paint()
  421. {
  422. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
  423. glMatrixMode(GL_MODELVIEW);
  424. glLoadIdentity();
  425. if (this->SHOW_GRID)
  426. {
  427. this->grid();
  428. }
  429. this->top_screen();
  430. this->user_screen();
  431. this->guest_screen();
  432. SDL_GL_SwapWindow(this->WINDOW);
  433. }
  434. void Game::resize(int width, int height)
  435. {
  436. glViewport(0, 0, width, height); // Reset The USER_CURRENT Viewport And Perspective Transformation
  437. glMatrixMode(GL_PROJECTION);
  438. glLoadIdentity();
  439. gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
  440. glMatrixMode(GL_MODELVIEW);
  441. }
  442. /**
  443. * key down
  444. * SDL_Keycode key_code
  445. */
  446. void Game::key_down(SDL_Keycode key_code)
  447. {
  448. switch (key_code)
  449. {
  450. case SDLK_ESCAPE:
  451. case SDLK_q:
  452. printf("Escape\n");
  453. this->KEEP_ALIVE = false;
  454. break;
  455. case SDLK_UP:
  456. printf("UP Key Pressed\n");
  457. this->on_key_up_arrow();
  458. this->KEY_UP_ARROW_ACTIVE = true;
  459. break;
  460. case SDLK_DOWN:
  461. printf("Down Key Pressed\n");
  462. this->on_key_down_arrow();
  463. this->KEY_DOWN_ARROW_ACTIVE = true;
  464. break;
  465. case SDLK_LEFT:
  466. printf("Left Key Pressed\n");
  467. this->on_key_left_arrow();
  468. this->KEY_LEFT_ARROW_ACTIVE = true;
  469. break;
  470. case SDLK_RIGHT:
  471. printf("Right Key Pressed\n");
  472. this->on_key_right_arrow();
  473. this->KEY_RIGHT_ARROW_ACTIVE = true;
  474. break;
  475. case SDLK_g:
  476. this->SHOW_GRID = !SHOW_GRID;
  477. break;
  478. case SDLK_SPACE:
  479. this->KEY_SPACE_ACTIVE = true;
  480. break;
  481. case SDLK_RETURN:
  482. this->KEY_RETURN_ACTIVE = true;
  483. break;
  484. case SDLK_F11:
  485. if(FULL_SCREEN){
  486. SDL_SetWindowPosition(this->WINDOW, 100, 100);
  487. SDL_RestoreWindow(this->WINDOW);
  488. //SDL_SetWindowResizable(this->WINDOW, SDL_TRUE);
  489. //SDL_SetWindowBordered(this->WINDOW, 1);
  490. SDL_SetWindowSize(this->WINDOW,SCREEN_WIDTH, SCREEN_HEIGHT);
  491. //SDL_SetWindowFullscreen(this->WINDOW,SDL_WINDOW_FULLSCREEN );
  492. }
  493. else {
  494. SDL_SetWindowPosition(this->WINDOW, 0, 0);
  495. //SDL_SetWindowResizable(this->WINDOW, SDL_FALSE);
  496. //SDL_SetWindowBordered(this->WINDOW, 0);
  497. SDL_SetWindowSize(this->WINDOW,MONITOR_WIDTH, MONITOR_HEIGHT);
  498. //SDL_SetWindowFullscreen(this->WINDOW,0 );
  499. }
  500. this->FULL_SCREEN = !this->FULL_SCREEN;
  501. SDL_ShowCursor(this->FULL_SCREEN);
  502. break;
  503. default:
  504. //Do nothing
  505. break;
  506. }
  507. }
  508. /**
  509. * key down
  510. * SDL_Keycode key_code
  511. */
  512. void Game::key_up(SDL_Keycode key_code)
  513. {
  514. switch (key_code)
  515. {
  516. case SDLK_UP:
  517. this->KEY_UP_ARROW_ACTIVE = false;
  518. break;
  519. case SDLK_DOWN:
  520. this->KEY_DOWN_ARROW_ACTIVE = false;
  521. break;
  522. case SDLK_LEFT:
  523. this->KEY_LEFT_ARROW_ACTIVE = false;
  524. break;
  525. case SDLK_RIGHT:
  526. this->KEY_RIGHT_ARROW_ACTIVE = false;
  527. break;
  528. case SDLK_SPACE:
  529. this->KEY_SPACE_ACTIVE = false;
  530. break;
  531. case SDLK_RETURN:
  532. this->KEY_RETURN_ACTIVE = false;
  533. break;
  534. case SDLK_F11:
  535. // SDL_DisplayMode dm;
  536. // SDL_RestoreWindow(this->WINDOW); //Incase it's maximized...
  537. // SDL_SetWindowSize(this->WINDOW, dm.w, dm.h + 10);
  538. // SDL_SetWindowPosition(this->WINDOW, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
  539. default:
  540. //Do nothing
  541. break;
  542. }
  543. }
  544. void Game::events(SDL_Event &event)
  545. {
  546. while (SDL_PollEvent(&event) != 0)
  547. {
  548. //https://wiki.libsdl.org/SDL_EventType
  549. switch (event.type)
  550. {
  551. case SDL_WINDOWEVENT:
  552. switch (event.window.event)
  553. {
  554. case SDL_WINDOWEVENT_RESIZED:
  555. //resize();
  556. break;
  557. case SDL_WINDOWEVENT_SIZE_CHANGED:
  558. this->resize(event.window.data1, event.window.data2);
  559. break;
  560. }
  561. break;
  562. //user-requested quit
  563. case SDL_QUIT:
  564. this->KEEP_ALIVE = false;
  565. break;
  566. //Mouse events
  567. case SDL_MOUSEBUTTONDOWN:
  568. case SDL_MOUSEMOTION:
  569. case SDL_MOUSEBUTTONUP:
  570. case SDL_MOUSEWHEEL:
  571. break;
  572. //Keyboard Events
  573. case SDL_KEYDOWN:
  574. this->key_down(event.key.keysym.sym);
  575. break;
  576. case SDL_KEYUP:
  577. this->key_up(event.key.keysym.sym);
  578. break;
  579. } //end switch(event.type)
  580. } //end-while
  581. }
  582. void Game::on_key_up_arrow()
  583. {
  584. // Toggle triangle
  585. this->USER_CURRENT = TRIANGLE;
  586. }
  587. void Game::on_key_down_arrow()
  588. {
  589. this->USER_CURRENT = SQUARE;
  590. }
  591. void Game::on_key_left_arrow()
  592. {
  593. this->USER_CURRENT = PENTAGON;
  594. }
  595. void Game::on_key_right_arrow()
  596. {
  597. this->USER_CURRENT = CIRCLE;
  598. }
  599. void Game::on_key_space()
  600. {
  601. }
  602. void Game::on_key_enter()
  603. {
  604. }
  605. } // namespace betacore
  606. int main(int argc, char *argv[])
  607. {
  608. betacore::Game game;
  609. return 0;
  610. }