Game logic done
This commit is contained in:
parent
b9360cee57
commit
4b5662791f
@ -48,7 +48,8 @@ set(SRCS
|
|||||||
"src/Main.cpp"
|
"src/Main.cpp"
|
||||||
"src/Model.cpp"
|
"src/Model.cpp"
|
||||||
"src/Shader.cpp"
|
"src/Shader.cpp"
|
||||||
"src/System.cpp")
|
"src/System.cpp"
|
||||||
|
"src/GameLogic.cpp")
|
||||||
|
|
||||||
# Define C++ compiler flags
|
# Define C++ compiler flags
|
||||||
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -Wextra -Wpedantic -Wfatal-errors -Werror -pedantic-errors -fno-elide-constructors")
|
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -Wextra -Wpedantic -Wfatal-errors -Werror -pedantic-errors -fno-elide-constructors")
|
||||||
|
@ -77,6 +77,39 @@ System::System() : running(true) {
|
|||||||
asset_mngr.loadModel(
|
asset_mngr.loadModel(
|
||||||
"../assets/models/sphere.obj",
|
"../assets/models/sphere.obj",
|
||||||
"sphere");
|
"sphere");
|
||||||
|
for(int i=0;i<3;i++){
|
||||||
|
for(int j=0;j<3;j++){
|
||||||
|
board[i][j]=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xturn=true;
|
||||||
|
tempx=1;
|
||||||
|
tempy=1;
|
||||||
|
}
|
||||||
|
int System::CheckWin(){
|
||||||
|
for(int i=0;i<3;i++){
|
||||||
|
if(board[0][i]==board[1][i] && board[0][i]==board[2][i]){
|
||||||
|
if(board[0][i]!=0){
|
||||||
|
return board[0][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0;i<3;i++){
|
||||||
|
if(board[i][0]==board[i][1] && board[i][0]==board[i][2]){
|
||||||
|
if(board[i][0]!=0){
|
||||||
|
return board[i][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(board[1][1]!=0){
|
||||||
|
if(board[0][0]==board[1][1] && board[1][1]==board[2][2]){
|
||||||
|
return board[1][1];
|
||||||
|
}
|
||||||
|
if(board[0][2]==board[1][1] && board[1][1]==board[2][0]){
|
||||||
|
return board[1][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
System::~System() {
|
System::~System() {
|
||||||
@ -118,6 +151,15 @@ void System::run() {
|
|||||||
asset_mngr.getModel("board")->setColor(1,0,0);
|
asset_mngr.getModel("board")->setColor(1,0,0);
|
||||||
asset_mngr.getModel("board")->draw(shaders.at("default"));
|
asset_mngr.getModel("board")->draw(shaders.at("default"));
|
||||||
|
|
||||||
|
asset_mngr.getModel("cube")->setColor(0,1,0);
|
||||||
|
asset_mngr.getModel("cube")->draw(shaders.at("default"));
|
||||||
|
for(unsigned int i = 0; i < 3; ++i)
|
||||||
|
{
|
||||||
|
for(unsigned int j = 0; j < 3; ++j)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SDL_GL_SwapWindow(window);
|
SDL_GL_SwapWindow(window);
|
||||||
|
|
||||||
if(SDL_GetTicks() - lastTime < 1000 / FPS)
|
if(SDL_GetTicks() - lastTime < 1000 / FPS)
|
||||||
@ -129,6 +171,41 @@ void System::run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void System::handleKey(SDL_Keysym key){
|
||||||
|
switch(key.sym)
|
||||||
|
{
|
||||||
|
case SDLK_UP:
|
||||||
|
tempy = (tempy + 1) % 3;
|
||||||
|
break;
|
||||||
|
case SDLK_DOWN:
|
||||||
|
tempy = (tempy - 1) % 3;
|
||||||
|
break;
|
||||||
|
case SDLK_RIGHT:
|
||||||
|
tempx = (tempx + 1) % 3;
|
||||||
|
break;
|
||||||
|
case SDLK_LEFT:
|
||||||
|
tempx = (tempx - 1) % 3;
|
||||||
|
break;
|
||||||
|
case SDLK_SPACE:
|
||||||
|
if(board[tempx][tempy]!=0){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
board[tempx][tempy]=xturn?1:2;
|
||||||
|
tempx=1;
|
||||||
|
tempy=1;
|
||||||
|
xturn=!xturn;
|
||||||
|
int winner=CheckWin();
|
||||||
|
if(winner==1){
|
||||||
|
logger->write("Player 1 wins!");
|
||||||
|
running=false;
|
||||||
|
}
|
||||||
|
if(winner==2){
|
||||||
|
logger->write("Player 2 wins");
|
||||||
|
running=false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
void System::syncInputs() {
|
void System::syncInputs() {
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
while(SDL_PollEvent(&e))
|
while(SDL_PollEvent(&e))
|
||||||
@ -138,6 +215,9 @@ void System::syncInputs() {
|
|||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
running = false;
|
running = false;
|
||||||
break;
|
break;
|
||||||
|
case SDL_KEYDOWN:
|
||||||
|
handleKey(e.key.keysym);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include "Camera.hpp"
|
#include "Camera.hpp"
|
||||||
|
#include "GameLogic.hpp"
|
||||||
class System {
|
class System {
|
||||||
public:
|
public:
|
||||||
System();
|
System();
|
||||||
@ -37,10 +38,17 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void syncInputs();
|
void syncInputs();
|
||||||
|
int board[3][3];
|
||||||
|
bool xturn;
|
||||||
|
int tempx;
|
||||||
|
int tempy;
|
||||||
AssetManager asset_mngr;
|
AssetManager asset_mngr;
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
SDL_GLContext glcontext;
|
SDL_GLContext glcontext;
|
||||||
std::map<std::string, Shader> shaders;
|
std::map<std::string, Shader> shaders;
|
||||||
Camera cam;
|
Camera cam;
|
||||||
bool running;
|
bool running;
|
||||||
|
GameLogic board_ctrl;
|
||||||
|
int CheckWin();
|
||||||
|
void handleKey(SDL_Keysym key);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user