Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2010, 09:09   #1
Salvadore
 
Регистрация: 22.02.2010
Сообщений: 4
По умолчанию Из С++ в С

Доброго времени суток, в общем имееться простенькая игрушка, написанная на С++.
Подскажите возможно ли переделать ее в С и как это сделать ?

Вот код.


Level.cpp

Код:
#include "Level.h"

Level::Level(char* _pCharLevel)
{
	staticLevel = _pCharLevel;
	level = staticLevel;
}
Level::~Level(void)
{
}
void Level::Draw()
{
	WriteText((char*)level.data(), 0, 0, FOREGROUND_INTENSITY);
	level = staticLevel;
}

void Level::Update( char* _pText, int _offset )
{
	while(*_pText)
		level[_offset++] = *(_pText++);
}



Level.h

#ifndef _LEVEL_H_
#define _LEVEL_H_
#include "Console.h"
#include <string>
class Level:private Console
{
	std::string level;
	std::string staticLevel;
public:
	void Draw();
	void Update(char* _pText, int _offset);
	Level(char* _pCharLevel);
	~Level(void);
};
#endif


Scene.cpp

#include "Scene.h"
#include <math.h>
char _level[] ="\
                                               \n\
...............................................\n\
...............................................\n\
...............................................\n\
...............................................\n\
########...............................########\n\
########...............................########\n\
########...............................########\n\
########...............................########\n\
########...............................########\n\
########...............................########\n\
########...............................########\n\
########...............................########\n\
#######.................................#######\n\
######...................................######\n\
#####.....................................#####\n\
####.......................................####\n\
###.........................................###\n\
##...........................................##\n\
#.............................................#\n\
                                               ";
char wolf[] = "^@^";
Scene::Scene(void):level(_level)
{
	_eggInfo	egg_l;
	egg_l.x = 8 + (int)((double)rand() / (RAND_MAX + 1) * (31 - 1) + 1);
	egg_l.y = 0;
	egg_l.time = 250;
	egg.push_back(egg_l);

	egg_l.x = 8 + (int)((double)rand() / (RAND_MAX + 1) * (31 - 1) + 1);
	egg_l.y = 0;
	egg_l.time = 500;
	egg.push_back(egg_l);

	egg_l.x = 8 + (int)((double)rand() / (RAND_MAX + 1) * (31 - 1) + 1);
	egg_l.y = 0;
	egg_l.time = 750;
	egg.push_back(egg_l);
}
Scene::~Scene(void)
{
}

void Scene::Start()
{
	int xPos = 0;
	int be = 0;
	while (true)
	{
		//проверяем нажаты ли клавиши, и изменяем позицию волка
		if (GetAsyncKeyState(VK_LEFT) && xPos != 0)
			xPos--;
		if (GetAsyncKeyState(VK_RIGHT) && xPos < 48 - sizeof(wolf))
			xPos++;

		level.Update(wolf, 48 * 20 + xPos);

		int i = 0;
		std::vector<_eggInfo>::iterator ie = egg.begin();
		while (ie + i != egg.end())
		{
			//20 нижняя строка
			if (ie[i].y >= 20)
			{
				//проверяем споймал ли волк, если нет, то увеличиваем счетчик
				if ((ie[i].x != xPos) && (xPos + 1 != ie[i].x) && (xPos + 2 != ie[i].x))
					be++;
				//генерируем новые координаты для яйца
				ie[i].x = 8 + (int)((double)rand() / (RAND_MAX + 1) * (31 - 1) + 1);
				ie[i].y = 0;
			}
			//скорость спуска
			static int time = GetTickCount();
			if (GetTickCount() - ie[i].time > (i + 1) * 250 )
			{
				ie[i].time = GetTickCount();
				ie[i].y++;
			}
			//вобновляем сцену
			level.Update(ie[i].m, ie[i].y * 48 + ie[i].x);
			//переход на новое яйцо
			i++;
		}
		Sleep(2);
		//рисуем сцену
		level.Draw();
		//выходим если разбито три яйца
		if (be > 3)
		{
			level.Update("Game Over", 10 * 48 + 20);
			level.Draw();
			while (getch() != ' ');
			break;
		}
	}
}

Scene.h

Код:
#ifndef _SCENE_H_
#define _SCENE_H_
#include "Level.h"
#include <windows.h>
#include <string>
#include <vector>
class Scene
{
	Level level;
	struct _eggInfo
	{
		//позиция яйца по осям
		int x;
		int y;
		int time;
		//симвал яйца
		char* m;
		_eggInfo():m("0"){}
	};
	std::vector<_eggInfo> egg;
public:
	void Start();
	Scene(void);
	~Scene(void);
};
#endif

Последний раз редактировалось Salvadore; 23.06.2010 в 20:20.
Salvadore вне форума Ответить с цитированием
Старый 23.06.2010, 09:09   #2
Salvadore
 
Регистрация: 22.02.2010
Сообщений: 4
По умолчанию

Console.cpp

Код:
#include "Console.h"

Console::Console(void)
{
	 hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
}
Console::~Console(void)
{
	CloseHandle(hStdout);
}
void Console::WriteText( char* _pText, int _x, int _y, unsigned short _color)
{
	int len = lstrlen(_pText);
	register COORD cd;
	cd.X = _x;
	cd.Y = _y;
	DWORD cWritten;
	int i = 0;
	while (i != len)
	{

		if (_pText[i] == '\n')
		{
			cd.Y++;
			cd.X = _x;
			i++;
			continue;
		}
		WriteConsoleOutputCharacter(hStdout, _pText + i, 1, cd, &cWritten);
		cd.X++;
		i++;
	}

	i = 0;
	cd.X = _x;
	cd.Y = _y;
	while (i != len)
	{
		if (_pText[i] == '\n')
		{
			cd.Y++;
			cd.X = _x;
			i++;
			continue;
		}
		WriteConsoleOutputAttribute(hStdout, &_color, 1, cd, &cWritten);
		cd.X ++;
		i++;
	}
}
void Console::WriteRUSText( char* _pText, int _x, int _y, unsigned short _color )
{
	char* temChar = new char[260]();
	CharToOem(_pText, temChar);
	int len = lstrlen(temChar);
	register COORD cd;
	cd.X = _x;
	cd.Y = _y;
	DWORD cWritten;
	int i = 0;
	while (i != 0)
	{
		if (_pText[i] == '\n')
		{
			cd.Y++;
			i++;
		}
		WriteConsoleOutputCharacter(hStdout, temChar + i, 1, cd, &cWritten);
		i++;
	}
	i = 0;
	while (i++ != len)
	{
		WriteConsoleOutputAttribute(hStdout, &_color, 1, cd, &cWritten);
		cd.X ++;
		i++;
	}
	delete[] temChar;
}

void Console::Clear()
{
	COORD c;
	c.X = 0;
	c.Y = 0;
	CONSOLE_SCREEN_BUFFER_INFO bi;
	DWORD written;
	GetConsoleScreenBufferInfo(hStdout, &bi);
	FillConsoleOutputCharacter(hStdout, ' ', bi.dwSize.X * bi.dwSize.Y, c, &written);
	FillConsoleOutputAttribute(hStdout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE , bi.dwSize.X * bi.dwSize.Y, c, &written);
}

Console.h

Код:
#ifndef _CONSOLE_H_
#define _CONSOLE_H_
#include <windows.h>
#include <conio.h>

class Console
{
	HANDLE hStdout;
public:
	void WriteText( char* _pText, int _x, int _y, unsigned short _color);
	void WriteRUSText( char* _pText, int _x, int _y, unsigned short _color);
	void Clear();
	Console(void);
	~Console(void);
};
#endif

Последний раз редактировалось Salvadore; 23.06.2010 в 20:20.
Salvadore вне форума Ответить с цитированием
Старый 23.06.2010, 18:53   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Код кто оформлять будет?
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц