Thursday, December 9, 2010

My first 2D game in C++ using Direct3D

This is my first 2D game. It`s written in C++ using DirectX9 (Direct3D and DirectInput). This is a very simple Snake game. At the beginning the snake is only 1 square long and when it "eats" the target it`s length is encreased by 1 square. The snake can have a maximum of 20 squares long (each square is 20px), after it reaches this maximum length the snake is moving faster and faster. If the head of the snake hit`s it`s tail the game is over:
And here is the source-code:
#include <Windows.h>
#include <WindowsX.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <dinput.h>
#include <ctime>

#pragma comment(lib,"d3d9.lib");
#pragma comment(lib,"d3dx9.lib");
#pragma comment(lib,"dinput8.lib");
#pragma comment(lib,"dxguid.lib");

LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;
LPDIRECT3DVERTEXBUFFER9 buffer=NULL;
LPDIRECTINPUT8 dinput;
LPDIRECTINPUTDEVICE8 keyboard;
BYTE buttons[256];
ID3DXFont *m_font;

LRESULT CALLBACK WindowProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam);
void initialized3d(HWND hWnd);
void renderframe(void);
void cleand3d(void);
void graphics(void);
void initializedinput(HINSTANCE hInstance,
HWND hWnd);
void getkey(void);
void cleandinput(void);

struct VERTEX {
FLOAT X, Y, Z, RHW;
DWORD COLOR;
};

#define FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){
WNDCLASSEX windowclass;
ZeroMemory(&windowclass,sizeof(WNDCLASSEX));

windowclass.cbSize = sizeof(WNDCLASSEX);
windowclass.style = CS_HREDRAW | CS_VREDRAW;
windowclass.lpfnWndProc = WindowProc;
windowclass.hInstance = hInstance;
windowclass.hCursor = LoadCursor(NULL,IDC_ARROW);
windowclass.hbrBackground = (HBRUSH)COLOR_WINDOW;
windowclass.lpszClassName = L"WindowClass";

RegisterClassEx(&windowclass);
HWND hWnd = CreateWindowEx(NULL,
L"WindowClass",
L"Snake - www.codingmix.com",
WS_OVERLAPPEDWINDOW,
600,
200,
636,
478,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,
nCmdShow);
initialized3d(hWnd);
initializedinput(hInstance,
hWnd);
MSG message;
while(TRUE){
while(PeekMessage(&message,
NULL,
0,
0,
PM_REMOVE)){
TranslateMessage(&message);
DispatchMessage(&message);
}
if(message.message == WM_QUIT){
break;
}
getkey();
graphics();
renderframe();
}
cleand3d();
cleandinput();
}

void initialized3d(HWND hWnd){
d3d = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));

d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hWnd;

d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&d3ddev);
D3DXCreateFont(d3ddev,
50,
0,
FW_BOLD,
0,
FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
TEXT("Arial"),
&m_font );
}

void initializedinput(HINSTANCE hInstance,
HWND hWnd){
DirectInput8Create(hInstance,
DIRECTINPUT_VERSION,
IID_IDirectInput8,
(void**)&dinput,
NULL);
dinput->CreateDevice(GUID_SysKeyboard,
&keyboard,
NULL);
keyboard->SetDataFormat(&c_dfDIKeyboard);
keyboard->SetCooperativeLevel(hWnd,
DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
}

int verticesnr = 132;
int trianglesnr = 44;
bool left = false;
bool right = false;
bool up = true;
bool down = false;
float posy = 220.0f;
float posx = 280.0f;
bool target = false;
float random1;
float random2;
float newpos[][2] = {
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
{-20.0f, -20.0f},
};
int squares = 0;
bool gameover = false;
int col1 = 0;
int col2 = 255;
int currentframe = 0;
int speed = 30;
void graphics(void){
static int framenr = 0;
framenr++;
if(framenr % speed == 0 && !gameover){
if(squares > 0){
for(int i=squares-1;i>0;i--){
newpos[i][0] = newpos[i-1][0];
newpos[i][1] = newpos[i-1][1];
}
newpos[0][0] = posx;
newpos[0][1] = posy;
}
if(up){
posy -= 20.0f;
}
else if(down){
posy += 20.0f;
}
else if(left){
posx -= 20.0f;
}
else{
posx += 20.0f;
}
for(int i=0;i<=squares;i++){
for(int y=0;y<=squares;y++){
if(newpos[i][0] == newpos[y][0] && newpos[i][1] == newpos[y][1] && i != y){
gameover = true;
}
}
if(posx == newpos[i][0] && posy == newpos[i][1]){
gameover = true;
}
}
if(posx == random1 && posy == random2){
target = false;
if(squares > 19 && squares > 0){
speed--;
}
else{
if(squares == 0){
newpos[0][0] = posx;
newpos[0][1] = posy;
}
else{
newpos[squares][0] = newpos[squares-1][0];
newpos[squares][1] = newpos[squares-1][1];
}
squares++;
}
}
for(int i=0;i<squares;i++){
if(newpos[i][0] > 600){
newpos[i][0]-=620;
}
else if(newpos[i][0] < 0){
newpos[i][0]+=620;
}
else if(newpos[i][1] > 420){
newpos[i][1]-=440;
}
else if(newpos[i][1] < 0){
newpos[i][1]+=440;
}
}
if(posx > 600){
posx-=620;
}
else if(posx < 0){
posx+=620;
}
else if(posy > 420){
posy-=440;
}
else if(posy < 0){
posy+=440;
}
currentframe = 0;
}
else if(framenr % 20 == 0 && gameover){
if(col1 == 255){
col1 = 0;
col2 = 255;
}
else{
col1 = 255;
col2 = 0;
}
}
if(buttons[DIK_LEFT] & 0x80 && right == false && currentframe == 0){
left = true;
up = false;
down = false;
currentframe = 1;
}
else if(buttons[DIK_RIGHT] & 0x80 && left == false && currentframe == 0){
right = true;
up = false;
down = false;
currentframe = 1;
}
else if(buttons[DIK_UP] & 0x80 && down == false && currentframe == 0){
up = true;
left = false;
right = false;
currentframe = 1;
}
else if(buttons[DIK_DOWN] & 0x80 && up == false && currentframe == 0){
down = true;
left = false;
right = false;
currentframe = 1;
}
if(!target){
srand((unsigned)time(0));
random1 = (rand() % 30) * 20.0f;
random2 = (rand() % 22) * 20.0f;
target = true;
}
VERTEX vertices[] = {
//Target
{random1 + 10.0f, random2, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{random1 + 20.0f, random2 + 10.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{random1, random2 + 10.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{random1, random2 + 10.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{random1 + 20.0f, random2 + 10.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{random1 + 10.0f, random2 + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
//Head
{posx , posy, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{posx + 20.0f, posy, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{posx, posy + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{posx, posy + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{posx + 20.0f, posy, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{posx + 20.0f, posy + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 1
{newpos[0][0] , newpos[0][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[0][0] + 20.0f, newpos[0][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[0][0], newpos[0][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[0][0], newpos[0][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[0][0] + 20.0f, newpos[0][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[0][0] + 20.0f, newpos[0][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 2
{newpos[1][0] , newpos[1][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[1][0] + 20.0f, newpos[1][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[1][0], newpos[1][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[1][0], newpos[1][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[1][0] + 20.0f, newpos[1][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[1][0] + 20.0f, newpos[1][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 3
{newpos[2][0] , newpos[2][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[2][0] + 20.0f, newpos[2][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[2][0], newpos[2][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[2][0], newpos[2][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[2][0] + 20.0f, newpos[2][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[2][0] + 20.0f, newpos[2][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 4
{newpos[3][0] , newpos[3][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[3][0] + 20.0f, newpos[3][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[3][0], newpos[3][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[3][0], newpos[3][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[3][0] + 20.0f, newpos[3][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[3][0] + 20.0f, newpos[3][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 5
{newpos[4][0] , newpos[4][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[4][0] + 20.0f, newpos[4][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[4][0], newpos[4][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[4][0], newpos[4][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[4][0] + 20.0f, newpos[4][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[4][0] + 20.0f, newpos[4][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 6
{newpos[5][0] , newpos[5][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[5][0] + 20.0f, newpos[5][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[5][0], newpos[5][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[5][0], newpos[5][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[5][0] + 20.0f, newpos[5][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[5][0] + 20.0f, newpos[5][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 7
{newpos[6][0] , newpos[6][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[6][0] + 20.0f, newpos[6][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[6][0], newpos[6][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[6][0], newpos[6][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[6][0] + 20.0f, newpos[6][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[6][0] + 20.0f, newpos[6][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 8
{newpos[7][0] , newpos[7][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[7][0] + 20.0f, newpos[7][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[7][0], newpos[7][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[7][0], newpos[7][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[7][0] + 20.0f, newpos[7][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[7][0] + 20.0f, newpos[7][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 9
{newpos[8][0] , newpos[8][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[8][0] + 20.0f, newpos[8][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[8][0], newpos[8][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[8][0], newpos[8][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[8][0] + 20.0f, newpos[8][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[8][0] + 20.0f, newpos[8][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 10
{newpos[9][0] , newpos[9][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[9][0] + 20.0f, newpos[9][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[9][0], newpos[9][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[9][0], newpos[9][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[9][0] + 20.0f, newpos[9][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[9][0] + 20.0f, newpos[9][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 11
{newpos[10][0] , newpos[10][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[10][0] + 20.0f, newpos[10][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[10][0], newpos[10][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[10][0], newpos[10][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[10][0] + 20.0f, newpos[10][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[10][0] + 20.0f, newpos[10][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 12
{newpos[11][0] , newpos[11][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[11][0] + 20.0f, newpos[11][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[11][0], newpos[11][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[11][0], newpos[11][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[11][0] + 20.0f, newpos[11][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[11][0] + 20.0f, newpos[11][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 13
{newpos[12][0] , newpos[12][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[12][0] + 20.0f, newpos[12][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[12][0], newpos[12][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[12][0], newpos[12][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[12][0] + 20.0f, newpos[12][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[12][0] + 20.0f, newpos[12][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 14
{newpos[13][0] , newpos[13][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[13][0] + 20.0f, newpos[13][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[13][0], newpos[13][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[13][0], newpos[13][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[13][0] + 20.0f, newpos[13][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[13][0] + 20.0f, newpos[13][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 15
{newpos[14][0] , newpos[14][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[14][0] + 20.0f, newpos[14][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[14][0], newpos[14][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[14][0], newpos[14][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[14][0] + 20.0f, newpos[14][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[14][0] + 20.0f, newpos[14][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 16
{newpos[15][0] , newpos[15][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[15][0] + 20.0f, newpos[15][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[15][0], newpos[15][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[15][0], newpos[15][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[15][0] + 20.0f, newpos[15][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[15][0] + 20.0f, newpos[15][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 17
{newpos[16][0] , newpos[16][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[16][0] + 20.0f, newpos[16][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[16][0], newpos[16][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[16][0], newpos[16][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[16][0] + 20.0f, newpos[16][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[16][0] + 20.0f, newpos[16][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 18
{newpos[17][0] , newpos[17][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[17][0] + 20.0f, newpos[17][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[17][0], newpos[17][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[17][0], newpos[17][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[17][0] + 20.0f, newpos[17][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[17][0] + 20.0f, newpos[17][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 19
{newpos[18][0] , newpos[18][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[18][0] + 20.0f, newpos[18][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[18][0], newpos[18][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[18][0], newpos[18][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[18][0] + 20.0f, newpos[18][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[18][0] + 20.0f, newpos[18][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
//Square 20
{newpos[19][0] , newpos[19][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[19][0] + 20.0f, newpos[19][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[19][0], newpos[19][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[19][0], newpos[19][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[19][0] + 20.0f, newpos[19][1], 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
{newpos[19][0] + 20.0f, newpos[19][1] + 20.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(col1, col2, 0),},
};
d3ddev->CreateVertexBuffer(verticesnr*sizeof(VERTEX),
0,
FVF,
D3DPOOL_MANAGED,
&buffer,
NULL);
VOID* pVoid;
buffer->Lock(0,
0,
(void**)&pVoid,
0);
memcpy(pVoid,
vertices,
sizeof(vertices));
buffer->Unlock();
}

void getkey(void){
keyboard->Acquire();
keyboard->GetDeviceState(256,
(LPVOID)buttons);
}

void renderframe(void){
d3ddev->Clear(0,
NULL,
D3DCLEAR_TARGET,
D3DCOLOR_XRGB(255,222,173),
1.0f,
0);
d3ddev->BeginScene();

D3DCOLOR fontColor = D3DCOLOR_ARGB(255,255,0,0);
RECT rct;
rct.left=200;
rct.right=480;
rct.top=150;
rct.bottom=rct.top+50;
if(gameover){
m_font->DrawText(NULL,
(LPCWSTR)L"Game over",
-1,
&rct,
0,
fontColor);
}
d3ddev->SetFVF(FVF);
d3ddev->SetStreamSource(0,
buffer,
0,
sizeof(VERTEX));
d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST,
0,
trianglesnr);
d3ddev->EndScene();
d3ddev->Present(NULL,
NULL,
NULL,
NULL);
}

void cleand3d(void){
buffer->Release();
d3ddev->Release();
d3d->Release();
m_font->Release();
}

void cleandinput(void){
keyboard->Unacquire();
dinput->Release();
}

LRESULT CALLBACK WindowProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam){
if(message == WM_DESTROY){
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,
message,
wParam,
lParam);
}
You can ask anything about how it works but I`m just a beginner in DirectX programming...

8 comments:

Anonymous said...

WHen starting to debug this code in Visual C++, its give me an error ... out of date and dont debug later.
Where is the problem?

Csabi said...

The error is with your compiler, you need all the libraries and the additional libraries

What is the exact error ?

Anonymous said...

where can we get the libraries?

Csabi said...

from DirectX SDK

Anonymous said...

Holy hell that's a lot of code. I still can't even manage to start up Directx9. Errors are endless, and I've tried every thing.

Csabi said...

It`s because you need to add the libraries and additional libraries

Anonymous said...

How about some comments or code explanation?

video-hosting said...

Congrt8s to successful 2D game but it's very much time taking code, so is any other option to reduce that??

Post a Comment

 
Powered by Blogger