コード例 #1
0
ファイル: AStar.cpp プロジェクト: Ajention/codestore
AStar::AStar():
	m_numSurround(8)
{
	m_surround[0] = ASCOORD( 0,-1);
	m_surround[1] = ASCOORD( 0, 1);
	m_surround[2] = ASCOORD(-1, 0);
	m_surround[3] = ASCOORD( 1, 0);

	m_surround[4] = ASCOORD(-1,-1);
	m_surround[5] = ASCOORD( 1,-1);
	m_surround[6] = ASCOORD(-1, 1);
	m_surround[7] = ASCOORD( 1, 1);

	for(int i = 0 ; i<4 ; ++i)
		m_gAdd[i] = 10;

	for(int i = 4 ; i<8 ; ++i)
		m_gAdd[i] = 14;

	ClearObstacles();
}
コード例 #2
0
ファイル: Game.cpp プロジェクト: akkez/Snake
//инициализация и старт игры
void StartGame(int difficulty, int gamemode) {
	//очистка стен и их генерация
	ClearObstacles();
	switch (gamemode) {
		case 0: break; //пустое поле
		case 1: //коробка
			for (int i = 0; i < GAME_ROWS + 1; i++) {
				vObstacles[i][0] = 1;
				vObstacles[i][GAME_COLS] = 1;
			}
			for (int i = 0; i < GAME_COLS + 1; i++) {
				gObstacles[0][i] = 1;
				gObstacles[GAME_ROWS][i] = 1;
			}
			break;
		case 2: 
			/* лабиринт - генерация поля до тех пор, пока оно не станет пригодным для игры 
			   число генерируемых препятствий уменьшается на 1, 
			     если не удается подобрать подходящее поле для игры
			*/
			int OCount = 100;
			int OTick = 10;
			do {
				OTick--;
				if (OTick <= 0) {
					OTick = 10;
					OCount--;
				}
				ClearObstacles();
				for (int i = 0; i < OCount; i++) {
					vObstacles[rand() % GAME_ROWS][rand() % (GAME_COLS + 1)] = 1;
					gObstacles[rand() % (GAME_ROWS + 1)][rand() % GAME_COLS] = 1;
				}
				//расчищаем путь для змейки
				for (int i = 1; i <= 8; i++) {
					vObstacles[1][i] = 0;
				}
			} while (!ValidateGameField());
			printf("Obstacle count: %d\n", OCount);
			break;
	}

	isGameOver = false;
	isGamePaused = false;
	SnakeDirection = 1;
	NewSnakeDirection = 1;
	LivingTicks = 0;
	GamePoints = 0;
	GameBonusPoints = 0;
	LastBonusSpawn = 0;
	CurrentDifficulty = difficulty;
	CurrentGamemode = gamemode;

	//настройки игры в соответствии со сложностью
	switch (difficulty) {
		case 0: 
			BonusSpawnInterval = 4;
			BonusEffect = 3;
			BonusLive = 25;
			GameSpeed = 400;
			break;
		case 1: 
			BonusSpawnInterval = 5;
			BonusEffect = 2;
			BonusLive = 20;
			GameSpeed = 250;
			break;
		case 2: 
			BonusSpawnInterval = 7;
			BonusEffect = 1;
			BonusLive = 15;
			GameSpeed = 135;
			break;
		default:
			printf("Unknown difficulty %d\n", difficulty);
			break;
	}

	//выращивание змейки
	Head = (SnakeCell*)malloc(sizeof(SnakeCell));
	Head->x = 3;
	Head->y = 1;
	Head->prev = NULL;
	Head->fat = false;
	Head->visible = true;
	Head->next = (SnakeCell*)malloc(sizeof(SnakeCell));
	Head->next->x = 2;
	Head->next->y = 1;
	Head->next->fat = false;
	Head->next->visible = true;
	Head->next->prev = Head;
	Head->next->next = (SnakeCell*)malloc(sizeof(SnakeCell));
	Head->next->next->x = 1;
	Head->next->next->y = 1;
	Head->next->next->fat = false;
	Head->next->next->visible = true;
	Head->next->next->prev = Head->next;
	Head->next->next->next = NULL;

	//генерация первого яблока - оно не должно совпадать 
	//  ни с одним сегментом змеи по координатам
	bool goodApple;
	do {
		Apple.x = rand() % GAME_COLS;
		Apple.y = rand() % GAME_ROWS;
		goodApple = true;
		if (Apple.x == Head->x && Apple.y == Head->y) {
			goodApple = false;
		}
		if (Apple.x == Head->next->x && Apple.y == Head->next->y) {
			goodApple = false;
		}
		if (Apple.x == Head->next->next->x && Apple.y == Head->next->next->y) {
			goodApple = false;
		}
	} while (!goodApple);

	Bonus.x = 0;
	Bonus.y = 0;
	Bonus.living = 0;
	Bonus.isActive = false;

	//первый тик через GameSpeed мс
	glutTimerFunc(GameSpeed, onTick, W_GAME);
}