coursework-1/main.c

167 lines
2.8 KiB
C

#include "glUI.h"
void resize(int width, int height)
{
glutReshapeWindow(WINDOW_WIDTH, WINDOW_HEIGHT);
}
void renderScene(void)
{
glClearColor(1, 1, 1, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.43, 0.17, 0.64);
switch (ScreenState)
{
case STATE_MAIN_MENU:
drawMenu(MButtons);
break;
case STATE_ABOUT:
drawAbout();
break;
case STATE_PLAY:
drawGame(GAME_2P);
break;
case STATE_PLAY_AI:
drawGame(GAME_AI);
break;
case STATE_SETTINGS:
DrawSettings();
break;
default:
break;
}
if (ScreenState == STATE_MAIN_MENU)
{
drawMenu(MButtons);
}
glutSwapBuffers();
}
void mousePressed(int button, int state, int x, int y)
{
float xClip = ((x + 0.5f) / WINDOW_WIDTH) * 2.0f - 1.0f;
float yClip = 1.0f - ((y + 0.5f) / WINDOW_HEIGHT) * 2.0f;
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
printf("%f %f\n", xClip, yClip);
switch (ScreenState)
{
case STATE_MAIN_MENU:
mainMenuClickHandler(xClip, yClip);
break;
case STATE_SETTINGS:
settingsClickHandler(xClip, yClip);
break;
default:
break;
}
}
}
void keyboardPressed(unsigned char key, int x, int y)
{
if (key == 27) // if ESC
{
ScreenState = STATE_MAIN_MENU;
}
printf("KEY: %d\n", key);
if (key == 32) // if spacebar
{
if (ScreenState == GAME_2P)
{
GMakeMove(&game, game.mapSelX, game.mapSelY, game.fieldSelX, game.fieldSelY, game.turn);
}
else if (ScreenState == GAME_AI)
{
if (game.turn == SettingFirst) // don't let the player to make turn if it's AI turn
{
GMakeMove(&game, game.mapSelX, game.mapSelY, game.fieldSelX, game.fieldSelY, game.turn);
}
else
{
AIMakeMove(&game);
}
}
}
}
void SpecialInput(int key, int x, int y)
{
if (game.winner == 0)
{
switch(key)
{
case GLUT_KEY_UP:
printf("UP\n");
GameSel(&game, DIRECTION_UP);
break;
case GLUT_KEY_DOWN:
printf("DOWN\n");
GameSel(&game, DIRECTION_DOWN);
break;
case GLUT_KEY_LEFT:
printf("LEFT\n");
GameSel(&game, DIRECTION_LEFT);
break;
case GLUT_KEY_RIGHT:
printf("RIGHT\n");
GameSel(&game, DIRECTION_RIGHT);
break;
default:
break;
}
}
}
int main(int argc, char **argv)
{
ScreenState = STATE_MAIN_MENU;
SettingFirst = FIRST_CROSS;
SettingDifLevel = MEDIUM;
AI_DEPTH = AI_DEPTH_MEDIUM;
AI_NAIVE_MODE = AI_NAIVE;
initMenuButton(0.6, 0.95, 0.0, 0.85, &moveBtn);
initMenuButton(0.6, 0.8, 0.0, 0.7, &difBtn);
// инициализация
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
glutCreateWindow("Advanced Tic Tac Toe");
glutMouseFunc(mousePressed);
glutKeyboardFunc(keyboardPressed);
glutSpecialFunc(SpecialInput);
glutReshapeFunc(resize);
glutDisplayFunc(renderScene);
printf("Start!\n");
glutMainLoop();
return 0;
}