git repos / blockattack-game

blame: source/code/BallManager.hpp

normal view · raw

d450da8b sago007 2017-03-25 17:03 1
/*
d450da8b sago007 2017-03-25 17:03 2
===========================================================================
d450da8b sago007 2017-03-25 17:03 3
blockattack - Block Attack - Rise of the Blocks
d450da8b sago007 2017-03-25 17:03 4
Copyright (C) 2005-2017 Poul Sander
d450da8b sago007 2017-03-25 17:03 5
d450da8b sago007 2017-03-25 17:03 6
This program is free software: you can redistribute it and/or modify
d450da8b sago007 2017-03-25 17:03 7
it under the terms of the GNU General Public License as published by
d450da8b sago007 2017-03-25 17:03 8
the Free Software Foundation, either version 2 of the License, or
d450da8b sago007 2017-03-25 17:03 9
(at your option) any later version.
d450da8b sago007 2017-03-25 17:03 10
d450da8b sago007 2017-03-25 17:03 11
This program is distributed in the hope that it will be useful,
d450da8b sago007 2017-03-25 17:03 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
d450da8b sago007 2017-03-25 17:03 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d450da8b sago007 2017-03-25 17:03 14
GNU General Public License for more details.
d450da8b sago007 2017-03-25 17:03 15
d450da8b sago007 2017-03-25 17:03 16
You should have received a copy of the GNU General Public License
d450da8b sago007 2017-03-25 17:03 17
along with this program.  If not, see http://www.gnu.org/licenses/
d450da8b sago007 2017-03-25 17:03 18
d450da8b sago007 2017-03-25 17:03 19
Source information and contacts persons can be found at
d450da8b sago007 2017-03-25 17:03 20
http://www.blockattack.net
d450da8b sago007 2017-03-25 17:03 21
===========================================================================
d450da8b sago007 2017-03-25 17:03 22
*/
d450da8b sago007 2017-03-25 17:03 23
d450da8b sago007 2017-03-25 17:03 24
#ifndef BALLMANAGER_HPP
d450da8b sago007 2017-03-25 17:03 25
#define BALLMANAGER_HPP
d450da8b sago007 2017-03-25 17:03 26
f5d6c281 sago007 2017-03-25 17:08 27
#include <array>
d450da8b sago007 2017-03-25 17:03 28
d450da8b sago007 2017-03-25 17:03 29
extern GlobalData globalData;
d450da8b sago007 2017-03-25 17:03 30
d450da8b sago007 2017-03-25 17:03 31
//other ball constants:
d450da8b sago007 2017-03-25 17:03 32
const double gravity = 200.8; //acceleration
d450da8b sago007 2017-03-25 17:03 33
const double startVelocityY = 50.0;
d450da8b sago007 2017-03-25 17:03 34
const double VelocityX = 50.0;
d450da8b sago007 2017-03-25 17:03 35
const int ballSize = 16;
d450da8b sago007 2017-03-25 17:03 36
const double minVelocity = 200.0;
d450da8b sago007 2017-03-25 17:03 37
d450da8b sago007 2017-03-25 17:03 38
//The small things that are faaling when you clear something
d450da8b sago007 2017-03-25 17:03 39
class ABall {
d450da8b sago007 2017-03-25 17:03 40
private:
d450da8b sago007 2017-03-25 17:03 41
	double x = 0.0;
d450da8b sago007 2017-03-25 17:03 42
	double y = 0.0;
d450da8b sago007 2017-03-25 17:03 43
	double velocityY = 0.0;
d450da8b sago007 2017-03-25 17:03 44
	double velocityX = 0.0;
d450da8b sago007 2017-03-25 17:03 45
	int color = 0;
d450da8b sago007 2017-03-25 17:03 46
	unsigned long int lastTime = 0;
d450da8b sago007 2017-03-25 17:03 47
public:
d450da8b sago007 2017-03-25 17:03 48
	bool inUse = false;
d450da8b sago007 2017-03-25 17:03 49
d450da8b sago007 2017-03-25 17:03 50
	ABall() {
d450da8b sago007 2017-03-25 17:03 51
	}
d450da8b sago007 2017-03-25 17:03 52
d450da8b sago007 2017-03-25 17:03 53
	//constructor:
d450da8b sago007 2017-03-25 17:03 54
	ABall(int X, int Y, bool right, int coulor) {
d450da8b sago007 2017-03-25 17:03 55
		double tal = 1.0+((double)rand()/((double)RAND_MAX));
d450da8b sago007 2017-03-25 17:03 56
		velocityY = -tal*startVelocityY;
d450da8b sago007 2017-03-25 17:03 57
		lastTime = SDL_GetTicks();
d450da8b sago007 2017-03-25 17:03 58
		x = (double)X;
d450da8b sago007 2017-03-25 17:03 59
		y = (double)Y;
d450da8b sago007 2017-03-25 17:03 60
		color = coulor;
d450da8b sago007 2017-03-25 17:03 61
		if (right) {
d450da8b sago007 2017-03-25 17:03 62
			velocityX = tal*VelocityX;
d450da8b sago007 2017-03-25 17:03 63
		}
d450da8b sago007 2017-03-25 17:03 64
		else {
d450da8b sago007 2017-03-25 17:03 65
			velocityX = -tal*VelocityX;
d450da8b sago007 2017-03-25 17:03 66
		}
d450da8b sago007 2017-03-25 17:03 67
	}  //constructor
d450da8b sago007 2017-03-25 17:03 68
d450da8b sago007 2017-03-25 17:03 69
	void update() {
d450da8b sago007 2017-03-25 17:03 70
		double timePassed = (((double)(SDL_GetTicks()-lastTime))/1000.0);  //time passed in seconds
d450da8b sago007 2017-03-25 17:03 71
		x = x+timePassed*velocityX;
d450da8b sago007 2017-03-25 17:03 72
		y = y+timePassed*velocityY;
d450da8b sago007 2017-03-25 17:03 73
		velocityY = velocityY + gravity*timePassed;
d450da8b sago007 2017-03-25 17:03 74
		if (y<1.0) {
d450da8b sago007 2017-03-25 17:03 75
			velocityY=10.0;
d450da8b sago007 2017-03-25 17:03 76
		}
d450da8b sago007 2017-03-25 17:03 77
		if ((velocityY>minVelocity) && (y>(globalData.ysize-ballSize)) && (y<globalData.ysize)) {
d450da8b sago007 2017-03-25 17:03 78
			velocityY = -0.70*velocityY;
d450da8b sago007 2017-03-25 17:03 79
			y = globalData.ysize-ballSize;
d450da8b sago007 2017-03-25 17:03 80
		}
d450da8b sago007 2017-03-25 17:03 81
		lastTime = SDL_GetTicks();
d450da8b sago007 2017-03-25 17:03 82
	}
d450da8b sago007 2017-03-25 17:03 83
d450da8b sago007 2017-03-25 17:03 84
	int getX() {
d450da8b sago007 2017-03-25 17:03 85
		return (int)x;
d450da8b sago007 2017-03-25 17:03 86
	}
d450da8b sago007 2017-03-25 17:03 87
d450da8b sago007 2017-03-25 17:03 88
	int getY() {
d450da8b sago007 2017-03-25 17:03 89
		return (int)y;
d450da8b sago007 2017-03-25 17:03 90
	}
d450da8b sago007 2017-03-25 17:03 91
d450da8b sago007 2017-03-25 17:03 92
	int getColor() {
d450da8b sago007 2017-03-25 17:03 93
		return color;
d450da8b sago007 2017-03-25 17:03 94
	}
d450da8b sago007 2017-03-25 17:03 95
};  //aBall
d450da8b sago007 2017-03-25 17:03 96
d450da8b sago007 2017-03-25 17:03 97
d450da8b sago007 2017-03-25 17:03 98
class BallManager {
f5d6c281 sago007 2017-03-25 17:08 99
	static const int maxNumberOfBalls = 6*12*2*2;
d450da8b sago007 2017-03-25 17:03 100
public:
f5d6c281 sago007 2017-03-25 17:08 101
	std::array<ABall, maxNumberOfBalls> ballArray;
d450da8b sago007 2017-03-25 17:03 102
d450da8b sago007 2017-03-25 17:03 103
	BallManager() {
d450da8b sago007 2017-03-25 17:03 104
	}
d450da8b sago007 2017-03-25 17:03 105
d450da8b sago007 2017-03-25 17:03 106
	//Adds a ball to the screen at given coordiantes, traveling right or not with color
d450da8b sago007 2017-03-25 17:03 107
	int addBall(int x, int y,bool right,int color) {
f5d6c281 sago007 2017-03-25 17:08 108
		size_t ballNumber = 0;
d450da8b sago007 2017-03-25 17:03 109
		//Find a free ball
f5d6c281 sago007 2017-03-25 17:08 110
		while (ballNumber<ballArray.size() && ballArray[ballNumber].inUse) {
d450da8b sago007 2017-03-25 17:03 111
			ballNumber++;
d450da8b sago007 2017-03-25 17:03 112
		}
d450da8b sago007 2017-03-25 17:03 113
		//Could not find a free ball, return -1
f5d6c281 sago007 2017-03-25 17:08 114
		if (ballNumber==ballArray.size()) {
d450da8b sago007 2017-03-25 17:03 115
			return -1;
d450da8b sago007 2017-03-25 17:03 116
		}
d450da8b sago007 2017-03-25 17:03 117
		ballArray[ballNumber] = ABall(x,y,right,color);
d450da8b sago007 2017-03-25 17:03 118
		ballArray[ballNumber].inUse = true;
d450da8b sago007 2017-03-25 17:03 119
		return 1;
d450da8b sago007 2017-03-25 17:03 120
	}  //addBall
d450da8b sago007 2017-03-25 17:03 121
d450da8b sago007 2017-03-25 17:03 122
	void update() {
f5d6c281 sago007 2017-03-25 17:08 123
		for (size_t i = 0; i<ballArray.size(); i++) {
d450da8b sago007 2017-03-25 17:03 124
d450da8b sago007 2017-03-25 17:03 125
			if (ballArray[i].inUse) {
d450da8b sago007 2017-03-25 17:03 126
				ballArray[i].update();
d450da8b sago007 2017-03-25 17:03 127
				if (ballArray[i].getY()>globalData.ysize+100 || ballArray[i].getX()>globalData.xsize || ballArray[i].getX()<-ballSize) {
d450da8b sago007 2017-03-25 17:03 128
					ballArray[i].inUse = false;
d450da8b sago007 2017-03-25 17:03 129
				}
d450da8b sago007 2017-03-25 17:03 130
			}
d450da8b sago007 2017-03-25 17:03 131
		}
d450da8b sago007 2017-03-25 17:03 132
	} //update
d450da8b sago007 2017-03-25 17:03 133
d450da8b sago007 2017-03-25 17:03 134
d450da8b sago007 2017-03-25 17:03 135
}; //theBallManager
d450da8b sago007 2017-03-25 17:03 136
d450da8b sago007 2017-03-25 17:03 137
#endif /* BALLMANAGER_HPP */
d450da8b sago007 2017-03-25 17:03 138
1970-01-01 00:00 139