Page 1 of 7
Posted: Sat Oct 02, 2004 6:06 pm
by Falco Girgis
Oh lord, when the hell did we start doing this:
Code: Select all
int Function()
{
/*this method is an eminating monstrosity*/
}
Well, I refuse to conform to your distasteful coding method!
Posted: Sat Oct 02, 2004 6:25 pm
by Falco Girgis
Aside from your french braces being so monstrous, I commend you. That was nice.
I'm going to port your Blood Generator now...
Posted: Sat Oct 02, 2004 7:03 pm
by JS Lemming
Actually, when I first coded it, I used the "Good" style. But when I looked at my finished code, it looked cramped for some reason... By placing the brace after the command, it lines it up with the ending brace. That way, if I don't know what a certain brace closes because the code is too long, i can just count the tabs, scroll up and see which command started at that many tabs.
Also, who here is set up to compile such SDL programs besides Falco and me? We can help you set up if you need it.
Posted: Sat Oct 02, 2004 7:06 pm
by Falco Girgis
Yeah, okay. I know what you mean. My theory is that this:
generally looks much better when you've got LOTS of notes.
This, is better for everything else:
Code: Select all
int Function() {
//utter respectability!
}
I implore you to use the latter method with NEStix. Yeah, who else can compile this awesomeness?
Posted: Sun Oct 03, 2004 1:17 pm
by MarauderIIC
Mmm, that looks so much easier to set up than OpenGL. 'Cause you have to set up a window to draw in w/ OpenGL. Which means using Windows specific functions. Just 'cause OpenGL doesn't handle that stuff.
Posted: Sun Oct 03, 2004 2:37 pm
by Don Pwnious
umm.. mine is not working properly
its says that there is no host application??
Posted: Mon Oct 04, 2004 8:17 pm
by JS Lemming
Heh, I got the EASIER key input stuff to work. Now you can call the keydown or keyhit i made anywhere in your program.
Controls:
Arrow Keys: move box
Space Bar: Flashes a blue background
Escape: Quits
Code: Select all
//demo use of easier key input by JS Lemming
//requires static linkage to:
//sdl.lib, sdlmain.lib
//requires dynamic linkage to:
//sdl.dll
//include SDL stuff
#include "sdl.h"
//include ability to exit program
#include <stdlib.h>
//These are the T/F flags that will be used to determine if a
//key is being held down by the user. If true, the key is down... false its not.
bool f_Up;
bool f_Down;
bool f_Left;
bool f_Right;
bool f_Space;
bool f_Escape;
//Function KeyDown(KeyFlag) - checks whether the arg passed to it is true,
//thus returning true. Why have this function at all? For consistancy sakes
//of the KeyHit function.
bool KeyDown(bool KeyFlag) {
return KeyFlag;
}
//Function KeyHit(KeyFlag) - checks whether the arg passed to it is true.
//Then setting the flag to false, and returning true.
bool KeyHit(bool& KeyFlag) {
if(KeyFlag == true)
{
KeyFlag = false;
return true;
}
return false;
}
//Box class
class Box
{
public:
int x, y;
};
//screen dimensions
const int SCREEN_WIDTH=640;
const int SCREEN_HEIGHT=480;
//display surface
SDL_Surface* g_pDisplaySurface;
//event structure
SDL_Event g_Event;
//rectangle
SDL_Rect g_Rect;
//color components
Uint8 g_Red, g_Green, g_Blue;
//color value
Uint32 g_Color;
//main function
int main(int argc, char* argv[])
{
//initialize SDL
if (SDL_Init(SDL_INIT_VIDEO)==-1)
{
//error initializing SDL
//report the error
fprintf(stderr,"Could not initialize SDL!\n");
//end the program
exit(1);
}
else
{
//SDL initialized
//report success
fprintf(stdout,"SDL initialized properly!\n");
//set up to uninitialize SDL at exit
atexit(SDL_Quit);
}
//hide mouse
SDL_ShowCursor(SDL_DISABLE);
//create windowed environment
g_pDisplaySurface = SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,24,SDL_ANYFORMAT|SDL_FULLSCREEN);
//error check
if (g_pDisplaySurface == NULL)
{
//report error
fprintf(stderr,"Could not set up display surface!\n");
//exit the program
exit(1);
}
//Create instance of class box
Box box1;
box1.x = 140;
box1.y = 130;
//main game loop
while(1)
{
//look for an event
if(SDL_PollEvent( &g_Event ) == true)
{
//if user closes out of window, exit loop
if(g_Event.type==SDL_QUIT)
break;
//if ESC key
if(g_Event.key.keysym.sym == SDLK_ESCAPE )
{
// if ESC was pressed, quit the program.
SDL_Event quit;
quit.type = SDL_QUIT;
SDL_PushEvent( &quit );
}
//check key input
switch( g_Event.type )
{
//if a key is pressed
case SDL_KEYDOWN:
switch( g_Event.key.keysym.sym )
{
case SDLK_UP:
f_Up = true;
break;
case SDLK_DOWN:
f_Down = true;
break;
case SDLK_LEFT:
f_Left = true;
break;
case SDLK_RIGHT:
f_Right = true;
break;
case SDLK_SPACE:
f_Space = true;
break;
case SDLK_ESCAPE:
f_Escape = true;
break;
}
break;
//a key is released
case SDL_KEYUP:
switch( g_Event.key.keysym.sym )
{
case SDLK_UP:
f_Up = false;
break;
case SDLK_DOWN:
f_Down = false;
break;
case SDLK_LEFT:
f_Left = false;
break;
case SDLK_RIGHT:
f_Right = false;
break;
case SDLK_SPACE:
f_Space = false;
break;
case SDLK_ESCAPE:
f_Escape = false;
break;
}
break;
default:
break;
}
}
//clear the screen with blue if keyhit space bar, else black
if( KeyHit(f_Space) ) {
SDL_FillRect(g_pDisplaySurface, NULL, SDL_MapRGB( g_pDisplaySurface->format, 0, 0, 255 ));
} else {
SDL_FillRect(g_pDisplaySurface, NULL, SDL_MapRGB( g_pDisplaySurface->format, 0, 0, 0 ));
}
//update the box via user input
if( KeyDown(f_Up) )
box1.y = box1.y - 2;
if( KeyDown(f_Down) )
box1.y = box1.y + 2;
if( KeyDown(f_Left) )
box1.x = box1.x - 2;
if( KeyDown(f_Right) )
box1.x = box1.x + 2;
//create the rectangle
g_Rect.x = box1.x;
g_Rect.y = box1.y;
g_Rect.w = 60;
g_Rect.h = 60;
//set the color
g_Red=0;
g_Green=200;
g_Blue=0;
g_Color=SDL_MapRGB(g_pDisplaySurface->format,g_Red,g_Green,g_Blue);
//fill the rectangle
SDL_FillRect(g_pDisplaySurface,&g_Rect,g_Color);
//update the screen
SDL_UpdateRect(g_pDisplaySurface,0,0,0,0);
}
//normal termination
fprintf(stdout,"Terminating normally.\n");
//return to OS
return(0);
}
Posted: Mon Oct 04, 2004 11:03 pm
by MarauderIIC
How about bool keys[256] ? Then you can access characters by their ASCII codes. And make the code a lot more general.
Code: Select all
bool keys[256];
bool oldkeys[256];
#define RIGHT_ARROW (whatever the code is. too lazy atm)
#define LEFT_ARROW (whatever the code is. too lazy atm)
#define UP_ARROW ditto
#define DOWN_ARROW ditto
// ...
case SDL_KEYDOWN:
keys[g_Event.key.keysym.sym] = true;
break;
case SDL_KEYUP:
keys[g_Event.key.keysym.sym] = false;
oldkeys[g_Event.key.keysym.sym] = false;
break;
// ....
/* ... */
if (keys['a'] && !oldkeys['a']) {
// do something (initial press)
oldkeys['a'] = keys['a']; //or oldkeys['a'] = true
}
if (keys['b']) {
// do something (Can be held)
}
//jump, but only if they have jumped less than twice
//and only on the initial keypress (holding will not make you doublejump
//immediately)
if (keys[UP_ARROW] && !oldkeys[UP_ARROW] && player->jumpCount() < 2)
{
// jump
player->jumpCountAdd(1);
}
else if (keys[DOWN_ARROW] && !player->isJumping())
{
// crouch
}
Posted: Tue Oct 05, 2004 9:26 pm
by Guest
. . . . . .
Posted: Wed Oct 06, 2004 7:28 am
by JS Lemming
Arce wrote:. . . . . .
Problems?
Posted: Wed Oct 06, 2004 1:55 pm
by Falco Girgis
He's either bloated, constipated, or he's come to the painful realization that C/++ is PWNing blitz.
Posted: Wed Oct 06, 2004 3:05 pm
by Don Pwnious
Super Sonic wrote:He's either bloated, constipated, or he's come to the painful realization that C/++ is PWNing blitz.
he he he
:guffaw:
Posted: Wed Oct 06, 2004 3:57 pm
by JS Lemming
Thanks to my Data Structures for Game Programmers book. I can know use linked lists with relative easy. Download the nice linked lists header file here.
http://www.thechaosrift.com/pc/Temp/DLinkedList.h
(be sure to use "Save As")
Using that mug, i came up with a simple bullet like demo. To demonstrate iterateing through a list and updating the items and such. You need the "DLinkedList.h" file above in the same folder to compile.
Controlls:
Up\Down = move box
Space = shoot
Right = Super Rapid Monkey shoot
Esc = exit
Code: Select all
//demo use of linked lists (shooting) by JS Lemming
//requires static linkage to:
//sdl.lib, sdlmain.lib
//requires dynamic linkage to:
//sdl.dll
//include SDL stuff
#include "sdl.h"
//include ability to exit program
#include <stdlib.h>
//include Double Linked Lists stuff
#include "DLinkedList.h"
//These are the T/F flags that will be used to determine if a
//key is being held down by the user. If true, the key is down... false its not.
bool f_Up;
bool f_Down;
bool f_Left;
bool f_Right;
bool f_Space;
bool f_Escape;
//Function KeyDown(KeyFlag) - checks whether the arg passed to it is true,
//thus returning true. Why have this function at all? For consistancy sakes
//of the KeyHit function.
bool KeyDown(bool KeyFlag) {
return KeyFlag;
}
//Function KeyHit(KeyFlag) - checks whether the arg passed to it is true.
//Then setting the flag to false, and returning true.
bool KeyHit(bool& KeyFlag) {
if(KeyFlag == true)
{
KeyFlag = false;
return true;
}
return false;
}
//Bullet class
class Bullet
{
public:
int x, y;
int xvel;
};
//Player class
class Player
{
public:
int y;
DLinkedList<Bullet> m_bullets;
};
//Create instance of class player
Player dude;
//create iterator used to access bullets
DLinkedList<Bullet> g_itr;
//screen dimensions
const int SCREEN_WIDTH=640;
const int SCREEN_HEIGHT=480;
//display surface
SDL_Surface* g_pDisplaySurface;
//event structure
SDL_Event g_Event;
//rectangle
SDL_Rect g_Rect;
//color components
Uint8 g_Red, g_Green, g_Blue;
//color value
Uint32 g_Color;
//Function CreateBullet(x,y,xvel) - adds a bullet to the list o'bullets
void CreateBullet(int x, int y, int xvel)
{
//create the bullet
Bullet bullet;
bullet.x = x;
bullet.y = y;
bullet.xvel = xvel;
//add it to the list
dude.m_bullets.Append( bullet );
}
//Function UpdateBullet() - iterates through all bullets and
//adjusts and draws them
void UpdateBullet()
{
DListIterator<Bullet> itr = dude.m_bullets.GetIterator();
for( itr.Start(); itr.Valid(); itr.Forth() )
{
itr.Item().x = itr.Item().x + itr.Item().xvel;
//make it bounce back if it hit the right wall
if(itr.Item().x > 640) {
itr.Item().x = 640;
itr.Item().xvel = -itr.Item().xvel;
}
//create the rectangle
g_Rect.x = itr.Item().x;
g_Rect.y = itr.Item().y;
g_Rect.w = 5;
g_Rect.h = 2;
//set the color
g_Red = 255;
g_Green = 0;
g_Blue = 0;
g_Color=SDL_MapRGB(g_pDisplaySurface->format,g_Red,g_Green,g_Blue);
//fill the rectangle
SDL_FillRect(g_pDisplaySurface,&g_Rect,g_Color);
//delete it if it goes to far left
if(itr.Item().x < 10) {
dude.m_bullets.Remove( itr );
}
}
}
//main function
int main(int argc, char* argv[])
{
//initialize SDL
if (SDL_Init(SDL_INIT_VIDEO)==-1)
{
//error initializing SDL
//report the error
fprintf(stderr,"Could not initialize SDL!\n");
//end the program
exit(1);
}
else
{
//SDL initialized
//report success
fprintf(stdout,"SDL initialized properly!\n");
//set up to uninitialize SDL at exit
atexit(SDL_Quit);
}
//hide mouse
SDL_ShowCursor(SDL_DISABLE);
//create windowed environment
g_pDisplaySurface = SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,16,SDL_ANYFORMAT|SDL_FULLSCREEN);
//error check
if (g_pDisplaySurface == NULL)
{
//report error
fprintf(stderr,"Could not set up display surface!\n");
//exit the program
exit(1);
}
//create init bullet
CreateBullet(0, 0, 0);
//set some stuff
// g_itr = dude.m_bullets.GetIterator();
dude.y = 230;
//main game loop
while(1)
{
//look for an event
if(SDL_PollEvent( &g_Event ) == true)
{
//if user closes out of window, exit loop
if(g_Event.type==SDL_QUIT)
break;
//if ESC key
if(g_Event.key.keysym.sym == SDLK_ESCAPE )
{
// if ESC was pressed, quit the program.
SDL_Event quit;
quit.type = SDL_QUIT;
SDL_PushEvent( &quit );
}
//check key input
switch( g_Event.type )
{
//if a key is pressed
case SDL_KEYDOWN:
switch( g_Event.key.keysym.sym )
{
case SDLK_UP:
f_Up = true;
break;
case SDLK_DOWN:
f_Down = true;
break;
case SDLK_LEFT:
f_Left = true;
break;
case SDLK_RIGHT:
f_Right = true;
break;
case SDLK_SPACE:
f_Space = true;
break;
case SDLK_ESCAPE:
f_Escape = true;
break;
}
break;
//a key is released
case SDL_KEYUP:
switch( g_Event.key.keysym.sym )
{
case SDLK_UP:
f_Up = false;
break;
case SDLK_DOWN:
f_Down = false;
break;
case SDLK_LEFT:
f_Left = false;
break;
case SDLK_RIGHT:
f_Right = false;
break;
case SDLK_SPACE:
f_Space = false;
break;
case SDLK_ESCAPE:
f_Escape = false;
break;
}
break;
default:
break;
}
}
//clear the screen with blue if keyhit space bar, else black
SDL_FillRect(g_pDisplaySurface, NULL, SDL_MapRGB( g_pDisplaySurface->format, 0, 0, 0 ));
// if( KeyHit(f_Space) ) {
//update the box via user input
if( KeyDown(f_Up) )
dude.y = dude.y - 2;
if( KeyDown(f_Down) )
dude.y = dude.y + 2;
if( KeyDown(f_Right) )
CreateBullet(100, dude.y+5, 4);
if( KeyHit(f_Space) )
CreateBullet(100, dude.y+5, 4);
UpdateBullet();
//create the rectangle
g_Rect.x = 40;
g_Rect.y = dude.y;
g_Rect.w = 60;
g_Rect.h = 10;
//set the color
g_Red = 0;
g_Green = 200;
g_Blue = 0;
g_Color=SDL_MapRGB(g_pDisplaySurface->format,g_Red,g_Green,g_Blue);
//fill the rectangle
SDL_FillRect(g_pDisplaySurface,&g_Rect,g_Color);
//update the screen
SDL_UpdateRect(g_pDisplaySurface,0,0,0,0);
}
//normal termination
fprintf(stdout,"Terminating normally.\n");
//return to OS
return(0);
}
Posted: Wed Oct 06, 2004 10:31 pm
by MarauderIIC
VETORS! VEEECTOOORRSS are standardized linked lists. Use!!1
Posted: Thu Oct 07, 2004 6:00 am
by Falco Girgis
After school, I'm going to bust out my 2 C++ books. I'm going to read every page with the word "vector" on it. Then I'll be able to say "vectorsss!" with Mar. Or at least nod in agreement!