Code Newbie
News     Forums     Search     Members     Sign Up    

My Code Newbie
Username

Password

Articles/Snippets
ASP Classic
ASP.NET
C
C#
C++
HTML / CSS
Java
Javascript
Linux / BSD
Perl
PHP
Python
Ruby
SQL
VB 6
VB.NET

C.N. Friends
  Planet Rome

Link to Us!
Code Newbie
  Code Newbie
    forums
Old 06-27-2004, 02:34 AM   #1 (permalink)
Dodo
Registered User
 
Join Date: Jun 2004
Posts: 1
Dodo is on a distinguished road
My game

http://dodo5.netfirms.com/game.html .

does not work under win9x.

Code:
#include "main.h"
#include <vector>
using namespace std;
GAMEDATA GDATA;

ENTITY Player;
ENTITY Enemies[EN];
COORD zeroZero = {0, 0};

vector<ENTITY> globalBullet;
bool Collide(ENTITY test, int dir);

bool gameover = false;

int score;

int lifeCheck;

int time = GetTickCount();
int last_time;
int delay = 200;

int time2 = time;
int last_time2;
int delay2 = 25;


bool InitGame(){
	
	Player.posx = 5;
	Player.posy = 4;
	Player.health = 100;
	GDATA.hInput = GetStdHandle(STD_INPUT_HANDLE);
	GDATA.hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	GDATA.rect.Top = 2;
	GDATA.rect.Bottom = GDATA.rect.Top+50;
	GDATA.rect.Left = 0;
	GDATA.rect.Right = 80;
	SetConsoleMode(GDATA.hInput, ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT);
	SetConsoleCursorPosition(GDATA.hOutput,zeroZero);
	
	return true;
}

ENTITY Fire(ENTITY shooter,int dir, char name)
{
	shooter.name = name;
	if(dir == UP){shooter.dir = UP;}
	if(dir == DOWN){shooter.dir = DOWN; }
	PlaySound("laser.wav", NULL, SND_FILENAME | SND_ASYNC);
	shooter.alive = true;
	return shooter;
}

void MoveBullets(){
	
	
	for (int x = 0; x < globalBullet.size(); x++){
		
		if(globalBullet[x].posy == 0){
			globalBullet[x].alive = false;
			
			
		}
		if(globalBullet[x].posy == 49){
			globalBullet[x].alive = false;
			
			
		}
		if(globalBullet[x].alive == false){
			globalBullet[x].posx = NULL;
			globalBullet[x].posy = NULL;
			
		}
		
		int previndex = ((globalBullet[x].posy*WIDTH)+globalBullet[x].posx);
		GDATA.ScreenBuff[previndex].Char.AsciiChar = ' ';
		GDATA.ScreenBuff[previndex].Attributes = BACKGROUND_BLUE | FOREGROUND_BLUE;
		switch(globalBullet[x].dir){
			
		case UP:
			if(!Collide(globalBullet[x],UP)){
				globalBullet[x].posy--;
				
				break;
			}
			else{
				globalBullet[x].alive = false;
			}
			break;
			
		case DOWN:
			
			if(!Collide(globalBullet[x],DOWN)){
				globalBullet[x].posy++;
				break;
			}
			else{
				globalBullet[x].alive = false;
			}
			break;
		}
		
		
		
	}
	
	
	for (int i = 0; i < globalBullet.size(); i++){
		
		if(globalBullet[i].alive == true){
			
			int index = ((globalBullet[i].posy*WIDTH)+globalBullet[i].posx);
			if(globalBullet[i].alive == true){
				GDATA.ScreenBuff[index].Char.AsciiChar = '|';
				if(globalBullet[i].name != 'E'){
					GDATA.ScreenBuff[index].Attributes = BACKGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY;
				}
				else{
					GDATA.ScreenBuff[index].Attributes = BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
				}
			}
			else{
				GDATA.ScreenBuff[index].Char.AsciiChar = ' ';
				GDATA.ScreenBuff[index].Attributes = BACKGROUND_BLUE | FOREGROUND_BLUE;
			}
		}
		else if(globalBullet[i].alive == false){
			int index = ((globalBullet[i].posy*WIDTH)+globalBullet[i].posx);
			GDATA.ScreenBuff[index].Attributes = BACKGROUND_BLUE | FOREGROUND_BLUE;
			
		}
		
	}
	if(globalBullet.size() > 4096){ globalBullet.clear();}
	
}



bool Collide(ENTITY test, int dir){
	switch(dir){
		
	case UP:
		test.posy--;
		break;
		
	case DOWN:
		test.posy++;
		break;
		
	case LEFT:
		test.posx--;
		break;
		
	case RIGHT:
		test.posx++;
		break;
		
		
	}
	int index = ((test.posy*WIDTH)+ test.posx);
	if(GDATA.ScreenBuff[index].Char.AsciiChar == '#'){
		return true;
	}
	else{
		return false;	
	}
	
}


bool LoadMap()
{	
	ifstream file_in("map.txt");
	
	if(!file_in){
		cout << "---Could not load map---\n";
		system("PAUSE");
		return false;
	}
	
	
		  GDATA.width = WIDTH; 
		  GDATA.height = HEIGHT; 
		  
		  
		  if(GDATA.ScreenBuff == NULL)
		  {
			  file_in.close(); 
			  return false;
		  }
		  
		  
		  int x = 0;
		  int y = 0;
		  
		  char temp; 
		  
		  while(y != GDATA.height) 
		  {
			  file_in >> temp;
			  
			  switch(temp)
			  {
			  case '0': 
				  
				  GDATA.ScreenBuff[x + y * WIDTH].Char.AsciiChar = ' ';
				  GDATA.ScreenBuff[x + y * WIDTH].Attributes = BACKGROUND_BLUE;
				  break;
				  
			  case '1': 
				  
				  
				  GDATA.ScreenBuff[x + y * WIDTH].Char.AsciiChar = '#';
				  GDATA.ScreenBuff[x + y * WIDTH].Attributes = BACKGROUND_BLUE | FOREGROUND_GREEN;
				  break;		
				  
				  
			  default: 
				  
				  file_in.close();
				  return false;
			  }
			  
			  
			  if(++x == GDATA.width)
			  {
				  x = 0;
				  y++; 
			  }
			  
		  } 
		  file_in.close();
		  return true; 
		  
} 

void SpawnEnemies(){
	int index;
	for(int x = 0; x < EN; x++){
		do{
			Enemies[x].posx = rand()%79;
			Enemies[x].posy = rand()%49;
			index = (Enemies[x].posy*WIDTH)+Enemies[x].posx;
		}while(GDATA.ScreenBuff[index].Char.AsciiChar == '#');
		Enemies[x].name = 'E';
		Enemies[x].alive = true;
		Enemies[x].killed = false;
		
	}
	
}

void CheckInput(){
	DWORD Events = 0;		//nfi what this is for but who cares, we needs it
	
	if(WAIT_TIMEOUT == WaitForSingleObject(GDATA.hInput,0))
		return;													//so that the "enemies" keep moving even if you dont push a key
	ReadConsoleInput(GDATA.hInput, &GDATA.InputRecord, 1, &Events);	//waits for a key press
	int previndex = ((Player.posy*WIDTH)+ Player.posx);		//next part here is what leaves the trail...
	GDATA.ScreenBuff[previndex].Char.AsciiChar = ' ';
	GDATA.ScreenBuff[previndex].Attributes = BACKGROUND_BLUE |FOREGROUND_BLUE;
	
	if(GDATA.InputRecord.EventType == KEY_EVENT && GDATA.InputRecord.Event.KeyEvent.bKeyDown){ //so winnt doesnt do double moves
		switch(GDATA.InputRecord.Event.KeyEvent.wVirtualKeyCode){	//switch for keyboard input
			
			
			
		case VK_RIGHT:												//rest of this stuff is self explanitory
			FlushConsoleInputBuffer(GDATA.hInput);
			if(Collide(Player,RIGHT)){
				break;
			}
			Player.posx++;
			break;
			
			
		case VK_LEFT:												
			FlushConsoleInputBuffer(GDATA.hInput);
			if(Collide(Player,LEFT)){
				break;
			}
			Player.posx--;
			break;
			
		case VK_UP:												
			FlushConsoleInputBuffer(GDATA.hInput);
			if(Collide(Player,UP)){
				break;
			}
			Player.posy--;
			break;
			
		case VK_DOWN:												
			FlushConsoleInputBuffer(GDATA.hInput);
			if(Collide(Player,DOWN)){
				break;
			}
			Player.posy++;
			break;

		case VK_ESCAPE:
			gameover = true;
			break;

		case VK_SPACE:
			globalBullet.push_back(Fire(Player,UP,'P'));
		}
	}
	

	
	
	int index = ((Player.posy*WIDTH)+ Player.posx);			//this part here gets the place in the sbuffer array
	GDATA.ScreenBuff[index].Char.AsciiChar = '^';
	GDATA.ScreenBuff[index].Attributes = BACKGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY;
	
	
	return;
}


void MoveEnemies(){
	for(int x = 0; x < EN; x++){
		
		int previndex = ((Enemies[x].posy*WIDTH)+ Enemies[x].posx);
		
		
		if(GDATA.ScreenBuff[previndex].Attributes == FOREGROUND_BLUE){
			continue;
		}
		GDATA.ScreenBuff[previndex].Char.AsciiChar = ' ';
		GDATA.ScreenBuff[previndex].Attributes = BACKGROUND_BLUE |FOREGROUND_BLUE;
		
	}
	
	for(int y = 0; y < EN; y++){

		if(Enemies[y].alive == false){continue;}
		int num;
		num = rand()%4;
		
		switch(num){
		case RIGHT:												
			
			if(Collide(Enemies[y],RIGHT)){
				break;
			}
			Enemies[y].posx++;
			break;
			
			
		case LEFT:												
			
			if(Collide(Enemies[y],LEFT)){
				break;
			}
			Enemies[y].posx--;
			break;
			
		case UP:												
			
			if(Collide(Enemies[y],UP)){
				break;
			}
			Enemies[y].posy--;
			break;
			
		case DOWN:												
			
			if(Collide(Enemies[y],DOWN)){
				break;
			}
			Enemies[y].posy++;
			break;
		}


		int firerand = rand()%10;
		if(firerand == 5){
			if(Player.posy > Enemies[y].posy){
				if(!Collide(Enemies[y],DOWN)){
					globalBullet.push_back(Fire(Enemies[y],DOWN,'E'));
					
				}
			}
			if(Player.posy < Enemies[y].posy){
				if(!Collide(Enemies[y],UP)){
					globalBullet.push_back(Fire(Enemies[y],UP,'E'));
					
				}
			}
			
		}

	}
	for(int z = 0; z < EN; z++){
		if(Enemies[z].alive == false){continue;}
		int index = ((Enemies[z].posy*WIDTH)+ Enemies[z].posx);
	
		GDATA.ScreenBuff[index].Char.AsciiChar = char(135);
		GDATA.ScreenBuff[index].Attributes = BACKGROUND_BLUE |FOREGROUND_GREEN | FOREGROUND_INTENSITY;
		
	}
}	


void DrawScreen(){


	SetConsoleCursorPosition(GDATA.hOutput,zeroZero);									  //puts the cursor to 0,0
	cout << "Player health:   "<< Player.health << "   ";									//stuff here outputs info 
	cout << "\nEnemies dead:    " << lifeCheck  << "   ";
	cout << "   Score:          " << score;

	int index = ((Player.posy*WIDTH)+ Player.posx);			//put this here so player is always visible
	GDATA.ScreenBuff[index].Char.AsciiChar = '^';
	GDATA.ScreenBuff[index].Attributes = BACKGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY;
	COORD gridSize = {80, 50};	
	WriteConsoleOutput(GDATA.hOutput, GDATA.ScreenBuff, gridSize, zeroZero, &GDATA.rect);
	return;
}

void CheckLife(){
	
	
	for (int x = 0; x < EN; x++){
		for(int y = 0; y < globalBullet.size(); y++){
			
			if(globalBullet[y].posx == Player.posx && globalBullet[y].posy == Player.posy && globalBullet[y].name == 'E'){
				Player.health--;
			}
			if(globalBullet[y].name == 'E'){
				continue;
			}
			
			if(globalBullet[y].posx == Enemies[x].posx && globalBullet[y].posy == Enemies[x].posy && globalBullet[y].alive == true){
				if(Enemies[x].alive == true){
					PlaySound("explos.wav", NULL, SND_FILENAME | SND_ASYNC);
					score++;
				}
				Enemies[x].alive = false;
				
			}
			
			
		}
		
	}
	
	if(Player.health < 1){
		cout <<"YOU LOSE";
		system("PAUSE");
		gameover = true;
	}
	
	for (int C = 0; C < EN; C++){
		if(Enemies[C].alive == false){
			if(Enemies[C].killed == false){
				lifeCheck++;
				Enemies[C].killed = true;
			}
		}
		
	}
	if(lifeCheck == EN){
		cout << "Again...";
		lifeCheck = 0;
		SpawnEnemies();
	}
}

int main(){
	
	InitGame();
	if(!LoadMap()){
		cout << "---Could Not Load Map---";
	}
	SpawnEnemies();
	
	while(1){
	
		
		time = GetTickCount();
		if(time-last_time>delay){
			last_time = GetTickCount();
			MoveEnemies();
		}
		
		
		time2 = GetTickCount();
		if(time2-last_time2>delay2){
			last_time2 = GetTickCount();
					MoveBullets();
					CheckLife();
		}
		CheckInput();
		DrawScreen();
		
		if(gameover == true){return 0;}
		
	}
	
	
	
	return 0;
}
Code:
#ifndef GAME_H
#define GAME_H
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <mmsystem.h>
#include <fstream>

#define WIDTH 80
#define HEIGHT 50

#define EN 8

#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3

using namespace std;


typedef struct _GAMEDATA{
	


	CHAR_INFO ScreenBuff[4000];								//holds screenbuffer chars
	
	
	
	
	HANDLE hInput, hOutput;												//input and output handles
	INPUT_RECORD InputRecord;
	SMALL_RECT rect;
	bool gameover;
	int width;
	int height;
	
	
} GAMEDATA;


typedef struct _ENTITY{
	int posx;
	int posy;
	bool alive;
	char name;
	int dir;
	bool killed;
	int health;
	
}ENTITY;



#endif
.
Dodo is offline   Reply With Quote
Old 06-27-2004, 10:46 AM   #2 (permalink)
cheawick
Regular Contributor
 
cheawick's Avatar
 
Join Date: Dec 2003
Location: Mary Esther, FL
Posts: 188
cheawick is on a distinguished road
Ummm... What gives? Do you need help or is this a post for prospreity?
cheawick is offline   Reply With Quote
Old 06-27-2004, 10:48 AM   #3 (permalink)
cheawick
Regular Contributor
 
cheawick's Avatar
 
Join Date: Dec 2003
Location: Mary Esther, FL
Posts: 188
cheawick is on a distinguished road
Gah! I forgot to ask, what is the target platform, since you say it will not run on windows 9x.
cheawick is offline   Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Please HeLp Wid A game of 3 x 3 tic-tac-toe (noughts and crosses) in C++ Nightmare Standard C, C++ 1 08-11-2004 10:36 AM
game controlls? zergmuncher Java 4 05-12-2004 03:23 AM
Need help, C++ game patcollins Standard C, C++ 3 04-28-2004 03:43 AM
Word association game! Eyelfixit Lounge 53 07-12-2003 11:23 PM


All times are GMT -8. The time now is 07:36 PM.


Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.0.0 RC8





Copyright © 2000-2008, Milano Interactive
Web Hosting provided by Portal 360 Web Hosting