start splitting game logic into Game class
This commit is contained in:
parent
c9fde558e7
commit
8398a09cf1
2
Makefile
2
Makefile
@ -3,7 +3,7 @@ DC := gdc
|
|||||||
TARGET := game
|
TARGET := game
|
||||||
SOURCES := $(shell find src -iname '*.d')
|
SOURCES := $(shell find src -iname '*.d')
|
||||||
OBJECTS := $(patsubst %.d,%.o,$(SOURCES))
|
OBJECTS := $(patsubst %.d,%.o,$(SOURCES))
|
||||||
DFLAGS := -I/usr/local/include/d
|
DFLAGS := -I/usr/local/include/d -Isrc
|
||||||
LDFLAGS := -lDerelictSDL -lDerelictGL -lDerelictGLU -lDerelictUtil -ldl -lGL -lGLU
|
LDFLAGS := -lDerelictSDL -lDerelictGL -lDerelictGLU -lDerelictUtil -ldl -lGL -lGLU
|
||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGET)
|
||||||
|
185
src/game.d
185
src/game.d
@ -1,168 +1,37 @@
|
|||||||
import std.stdio;
|
static enum uint TICK_MS = 50;
|
||||||
import derelict.sdl.sdl;
|
|
||||||
import derelict.opengl.gl;
|
|
||||||
import derelict.opengl.glu;
|
|
||||||
|
|
||||||
enum int WIDTH = 800;
|
enum
|
||||||
enum int HEIGHT = 600;
|
{
|
||||||
enum uint SDL_TICKS_PER_GAME_TICK = 1000u / 20u;
|
MOVE_LEFT,
|
||||||
|
MOVE_RIGHT,
|
||||||
class Player
|
MOVE_UP,
|
||||||
|
MOVE_DOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Player
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MoveEvent
|
||||||
|
{
|
||||||
|
ubyte type;
|
||||||
|
bool stop;
|
||||||
uint tick;
|
uint tick;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Inputs
|
class Game
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool left;
|
void change_player()
|
||||||
bool right;
|
{
|
||||||
bool up;
|
}
|
||||||
bool down;
|
void handle_move_event(ref MoveEvent me)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Player[] get_players() { return m_players; }
|
||||||
|
protected:
|
||||||
|
uint m_tick;
|
||||||
|
Player[2] m_players;
|
||||||
};
|
};
|
||||||
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
glClearColor (0.0, 0.0, 0.0, 0.0);
|
|
||||||
glShadeModel(GL_SMOOTH);
|
|
||||||
glViewport(0, 0, WIDTH, HEIGHT);
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadIdentity();
|
|
||||||
glOrtho(0, WIDTH, 0, HEIGHT, 1.0, -1.0);
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glLoadIdentity();
|
|
||||||
}
|
|
||||||
|
|
||||||
void display(Player p1, Player p2)
|
|
||||||
{
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
glPushMatrix();
|
|
||||||
glTranslatef(p1.x, p1.y, 0);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
glColor3f(1, 0, 0);
|
|
||||||
glVertex3f(10, 20, 0.0);
|
|
||||||
glVertex3f(-10, 20, 0.0);
|
|
||||||
glVertex3f(-10, -20, 0.0);
|
|
||||||
glVertex3f(10, -20, 0.0);
|
|
||||||
glEnd();
|
|
||||||
glPopMatrix();
|
|
||||||
glPushMatrix();
|
|
||||||
glTranslatef(p2.x, p2.y, 0);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
glColor3f(0, 0, 1);
|
|
||||||
glVertex3f(10, 20, 0.0);
|
|
||||||
glVertex3f(-10, 20, 0.0);
|
|
||||||
glVertex3f(-10, -20, 0.0);
|
|
||||||
glVertex3f(10, -20, 0.0);
|
|
||||||
glEnd();
|
|
||||||
glPopMatrix();
|
|
||||||
SDL_GL_SwapBuffers();
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(char[][] args)
|
|
||||||
{
|
|
||||||
DerelictSDL.load();
|
|
||||||
DerelictGL.load();
|
|
||||||
DerelictGLU.load();
|
|
||||||
|
|
||||||
Player p1 = new Player();
|
|
||||||
Player p2 = new Player();
|
|
||||||
p1.x = WIDTH / 2 - 100;
|
|
||||||
p1.y = HEIGHT / 2;
|
|
||||||
p2.x = WIDTH / 2 + 100;
|
|
||||||
p2.y = HEIGHT / 2;
|
|
||||||
int pcontrol = 0;
|
|
||||||
Player players[] = [p1, p2];
|
|
||||||
|
|
||||||
if (SDL_Init(SDL_INIT_EVERYTHING))
|
|
||||||
{
|
|
||||||
writefln("Failed to initialize SDL!");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
|
||||||
|
|
||||||
SDL_Surface *screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_OPENGL);
|
|
||||||
if (screen == null)
|
|
||||||
{
|
|
||||||
printf("Failed to set video mode!\n");
|
|
||||||
SDL_Quit();
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint last_sdl_tick;
|
|
||||||
init();
|
|
||||||
SDL_Event event;
|
|
||||||
Inputs current_inputs = new Inputs();
|
|
||||||
bool exit = false;
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if (SDL_GetTicks() >= (last_sdl_tick + SDL_TICKS_PER_GAME_TICK))
|
|
||||||
{
|
|
||||||
players[pcontrol].tick++;
|
|
||||||
last_sdl_tick += SDL_TICKS_PER_GAME_TICK;
|
|
||||||
}
|
|
||||||
if (SDL_PollEvent(&event))
|
|
||||||
{
|
|
||||||
switch (event.type)
|
|
||||||
{
|
|
||||||
case SDL_QUIT:
|
|
||||||
exit = true;
|
|
||||||
break;
|
|
||||||
case SDL_KEYDOWN:
|
|
||||||
switch (event.key.keysym.sym)
|
|
||||||
{
|
|
||||||
case SDLK_ESCAPE:
|
|
||||||
exit = true;
|
|
||||||
break;
|
|
||||||
case SDLK_a:
|
|
||||||
current_inputs.left = true;
|
|
||||||
break;
|
|
||||||
case SDLK_d:
|
|
||||||
current_inputs.right = true;
|
|
||||||
break;
|
|
||||||
case SDLK_w:
|
|
||||||
current_inputs.up = true;
|
|
||||||
break;
|
|
||||||
case SDLK_s:
|
|
||||||
current_inputs.down = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SDL_KEYUP:
|
|
||||||
switch (event.key.keysym.sym)
|
|
||||||
{
|
|
||||||
case SDLK_a:
|
|
||||||
current_inputs.left = false;
|
|
||||||
break;
|
|
||||||
case SDLK_d:
|
|
||||||
current_inputs.right = false;
|
|
||||||
break;
|
|
||||||
case SDLK_w:
|
|
||||||
current_inputs.up = false;
|
|
||||||
break;
|
|
||||||
case SDLK_s:
|
|
||||||
current_inputs.down = false;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (exit)
|
|
||||||
break;
|
|
||||||
display(p1, p2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Quit();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
135
src/main.d
Normal file
135
src/main.d
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
import std.stdio;
|
||||||
|
import derelict.sdl.sdl;
|
||||||
|
import derelict.opengl.gl;
|
||||||
|
import derelict.opengl.glu;
|
||||||
|
|
||||||
|
import game;
|
||||||
|
|
||||||
|
enum int WIDTH = 800;
|
||||||
|
enum int HEIGHT = 600;
|
||||||
|
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
glViewport(0, 0, WIDTH, HEIGHT);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glOrtho(0, WIDTH, 0, HEIGHT, 1.0, -1.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
|
void display(Game g)
|
||||||
|
{
|
||||||
|
Player[] players = g.get_players();
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(players[0].x, players[0].y, 0);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glColor3f(1, 0, 0);
|
||||||
|
glVertex3f(10, 20, 0.0);
|
||||||
|
glVertex3f(-10, 20, 0.0);
|
||||||
|
glVertex3f(-10, -20, 0.0);
|
||||||
|
glVertex3f(10, -20, 0.0);
|
||||||
|
glEnd();
|
||||||
|
glPopMatrix();
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(players[1].x, players[1].y, 0);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glColor3f(0, 0, 1);
|
||||||
|
glVertex3f(10, 20, 0.0);
|
||||||
|
glVertex3f(-10, 20, 0.0);
|
||||||
|
glVertex3f(-10, -20, 0.0);
|
||||||
|
glVertex3f(10, -20, 0.0);
|
||||||
|
glEnd();
|
||||||
|
glPopMatrix();
|
||||||
|
SDL_GL_SwapBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(char[][] args)
|
||||||
|
{
|
||||||
|
DerelictSDL.load();
|
||||||
|
DerelictGL.load();
|
||||||
|
DerelictGLU.load();
|
||||||
|
|
||||||
|
if (SDL_Init(SDL_INIT_EVERYTHING))
|
||||||
|
{
|
||||||
|
writefln("Failed to initialize SDL!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
|
||||||
|
SDL_Surface *screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_OPENGL);
|
||||||
|
if (screen == null)
|
||||||
|
{
|
||||||
|
printf("Failed to set video mode!\n");
|
||||||
|
SDL_Quit();
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
init();
|
||||||
|
SDL_Event event;
|
||||||
|
bool exit = false;
|
||||||
|
Game game = new Game();
|
||||||
|
game.get_players()[0].x = WIDTH / 2 - 100;
|
||||||
|
game.get_players()[0].y = HEIGHT / 2;
|
||||||
|
game.get_players()[1].x = WIDTH / 2 + 100;
|
||||||
|
game.get_players()[1].y = HEIGHT / 2;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (SDL_PollEvent(&event))
|
||||||
|
{
|
||||||
|
switch (event.type)
|
||||||
|
{
|
||||||
|
case SDL_QUIT:
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
case SDL_KEYDOWN:
|
||||||
|
switch (event.key.keysym.sym)
|
||||||
|
{
|
||||||
|
case SDLK_ESCAPE:
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
case SDLK_a:
|
||||||
|
break;
|
||||||
|
case SDLK_d:
|
||||||
|
break;
|
||||||
|
case SDLK_w:
|
||||||
|
break;
|
||||||
|
case SDLK_s:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SDL_KEYUP:
|
||||||
|
switch (event.key.keysym.sym)
|
||||||
|
{
|
||||||
|
case SDLK_a:
|
||||||
|
break;
|
||||||
|
case SDLK_d:
|
||||||
|
break;
|
||||||
|
case SDLK_w:
|
||||||
|
break;
|
||||||
|
case SDLK_s:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (exit)
|
||||||
|
break;
|
||||||
|
display(game);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Quit();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user