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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2008, 12:23   #1
EfiopianDIMON
 
Регистрация: 03.06.2008
Сообщений: 8
По умолчанию Описание прямоугольник в поле (сетке)

Необходимо описать прямоугольник (4*1) в сетке 20*20. Без сетки все проходит замечательно: прямоугольник перемещается, разварачивается. Ввод координат с клавиатуры также положителен. А вот попытка описать прямоугольник в сетке с помощью _getch() увенчалась в съедании строн квадратиков и в не отображении char (219). Как избежать разрывания и заствить прямоугольник ходить по своим клеткам? Подскажите, пожалуйста!

Код:
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
int a=20,b=20,num=0;
char play[20][20];

struct Restangle
{
	int row;
	int col;
};

void print(COORD coord,Restangle &side)
{
	for(int i=0;i<=side.row;i++)
	{	
		SetConsoleCursorPosition(h,coord);
		for(int j=0;j<=side.col;j++)
		{
			cout<<play[i][j];
		}
		coord.Y++;
	}
}
void User(COORD coord)
{	
	cout<<" 0 1 2 3 4 5 6 7 8 9"<<endl;
    	for(int i=0;i<=a;i++)
	{ 
		for(int j=0;j<=b;j++)
		{ 
			if (j==i&&j==0)
			cout<<char(218);
			else if(i==a&&j==0)
				cout<<char(192);
			else if(i==0&&j==b)
				cout<<char(191);
			else if(i==a&&j==b)
				cout<<char(217);
			else if(i%2!=0&&j%2==0)
				cout<<char(179);
			else if(i%2==0&&i!=0&&i!=a&&j%2==0&&j!=0&&j!=b)
				cout<<char(197);
			else if(i%2==0&&i!=0&&i!=a&&j==0)
				cout<<char(195);
			else if(i%2==0&&i!=0&&i!=a&&j==b)
				cout<<char(180);
			else if(i%2==0&&j%2!=0)
				cout<<char(196);
			else if(i==0&&j%2==0&&j!=0&&j!=b)
				cout<<char(194);
			else if(i==a&&j%2==0&&j!=0&&j!=b)
				cout<<char(193);
			else 
			{	
				cout<<play[i/2][j/2];	
			}
		}
		cout<<"\n";
	 }
}

void put_user(char man,COORD coord,Restangle &side)
{	
	int tmp;
	side.row=8;
	side.col=1;
enum keys{ Esc=27, Up=72,Down=80,Left=75,Rigth=77,Turn=116};

	while(true)
	{

	SetConsoleCursorPosition(h,coord);
	print(coord,side);
	cout<<"\n";
	int key=_getch();
	if(key==224||key==0)
	key=_getch();
		switch(key)
		{
			case Esc:exit(0);
			case Left : coord.X>0 ? coord.X-- : coord.X=20; break;
			case Rigth : coord.X<20 ? coord.X++ : coord.X=0; break;
			case Up : coord.Y>0 ? coord.Y-- : coord.Y=20; break;
			case Down : coord.Y<20 ? coord.Y++ : coord.Y=0; break;
			case Turn : tmp=side.row,side.row=side.col,side.col=tmp; break;
		}
	}
		play[coord.X][coord.Y]=man;
}
void main()
{	
	char man;
	Restangle side;
	man=char(219);
	COORD coord;
	coord.X=1;
	coord.Y=1;
	while(true)
	{
		SetConsoleCursorPosition(h,coord);
		system("cls");
		User(coord);
		put_user(man,coord,side);
		system("cls");
		User(coord);
	}
 }
EfiopianDIMON вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глюк(описание внутри) Stellvertreter Общие вопросы C/C++ 6 16.10.2008 19:31
TListView (привязка значков к сетке) Fireleo Общие вопросы Delphi 2 04.08.2008 14:52
сколькими способами можно разрезать прямоугольник на n-ное количество частей? 4ingiz Общие вопросы Delphi 2 31.01.2008 06:40
Работа баз данных Paradox в сетке Killer_djon БД в Delphi 2 20.12.2007 20:24