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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 22:04   #1
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию Движение фигур из псевдографики в консоле

Нужно сделать программку в С++ (в консоли) где фигуры будут из символов будут двигаться по диагонали или по прямой и отталкиваться от стен. Я фигуры нарисовал, но как заставить их двигаться не представляю. Всё перепробовал, что в голову пришло.

Вот код:

Код:
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;


void W_curspoz(int x,int y)
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
COORD cor={x,y};
SetConsoleCursorPosition(hConsole,cor);
}
class figura
{ 
public:
void show(int x,int y) const; 
};

class star:public figura 
{ 
public:
void show(int x,int y,int l)
{

for (int i=0;i<=l;i++)
{
W_curspoz(x+i,y);cout<<'*';
W_curspoz(x-i,y);cout<<'*';
W_curspoz(x,y+i);cout<<'*';
W_curspoz(x,y-i);cout<<'*';
W_curspoz(x+i,y+i);cout<<'*';
W_curspoz(x+i,y-i);cout<<'*';
W_curspoz(x-i,y+i);cout<<'*';
W_curspoz(x-i,y-i);cout<<'*';
}

}
};
class square:public figura 
{ 
public:
void show(int x,int y,int l)
{

for (int i=0;i<=l;i++) 
{
W_curspoz(x+i,y);cout<<'=';
W_curspoz(x,y+i);cout<<'=';
W_curspoz(x+l,y+i);cout<<'=';
W_curspoz(x+i,y+l);cout<<'=';
}

}
};

int main()
{

star ALFA;ALFA.show(10,8,3); 
star BETTA;BETTA.show(30,10,6); 
square BIG_SQUARE;BIG_SQUARE.show(40,10,6); 
square SMALL_SQUARE; SMALL_SQUARE.show(70,1,3); 
square SQUARE; SQUARE.show(15,20,4); 

getch();
return 0;
}
Spider406 вне форума Ответить с цитированием
Старый 07.06.2010, 23:23   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Рисуем - очищаем экран - передвигаем - рисуем заново.
То бишь все делаем в цикле, clrscr или что-нибудь подобное чистит экран. (Можно чистить просто заливая пробелами, \b тоже может быть полезна)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 07.06.2010, 23:29   #3
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию

спс. попробую.
Spider406 вне форума Ответить с цитированием
Старый 07.06.2010, 23:29   #4
curIy
 
Регистрация: 07.06.2010
Сообщений: 3
По умолчанию

чистить ещё удобно функцией: system("cls");
хедер по-моему <stdio.h> или <stdlib.h>.
проверял на codepad.org там прокатило с <stdio.h>
curIy вне форума Ответить с цитированием
Старый 08.06.2010, 00:03   #5
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию

stdio.h вроде
спс тоже
Spider406 вне форума Ответить с цитированием
Старый 08.06.2010, 18:04   #6
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию

вроде работает более-менее, спасибо))
Spider406 вне форума Ответить с цитированием
Старый 08.06.2010, 18:49   #7
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию

Снова проблема. Я вроде реализовал движение квадратов. Но рисует программа почему то не несколько квадратов, а только один.
Код:
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;


void W_curspoz(int x,int y) //ooieoey iiceoeiie?oao eo?ni?
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
COORD cor={x,y};
SetConsoleCursorPosition(hConsole,cor);
}
class figura
{ 
public:
void show(int x,int y) const; 
};

class star:public figura 
{ 
public:
void show(int x,int y,int l)
{

for (int i=0;i<=l;i++)
{
W_curspoz(x+i,y);cout<<'*';
W_curspoz(x-i,y);cout<<'*';
W_curspoz(x,y+i);cout<<'*';
W_curspoz(x,y-i);cout<<'*';
W_curspoz(x+i,y+i);cout<<'*';
W_curspoz(x+i,y-i);cout<<'*';
W_curspoz(x-i,y+i);cout<<'*';
W_curspoz(x-i,y-i);cout<<'*';
}

}
};
class square:public figura 
{ 
public:
void show(int x,int y,int l)
{
int qw=0;
while(qw!=2){

for (int i=0;i<=l;i++)
{
W_curspoz(x+i,y);cout<<'=';
W_curspoz(x,y+i);cout<<'=';
W_curspoz(x+l,y+i);cout<<'=';
W_curspoz(x+i,y+l);cout<<'=';
}

if (x<1)qw=1;
if (x>77-l)qw=0;
if (qw==1)x++;
if (qw==0)x--;
system("cls");

}
}
};



int main()
{


square SQUARE; SQUARE.show(15,20,4); 
square SQUARE2; SQUARE2.show(20,40,8); 

getch();
return 0;
}
Spider406 вне форума Ответить с цитированием
Старый 12.06.2010, 00:30   #8
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию

просьба помочь, очень нужно
Spider406 вне форума Ответить с цитированием
Старый 12.06.2010, 07:16   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Там же вроде вечный цикл получается...
Нужно стирать экран, рисовать все фигуры, потом менять их положение и всё заново, до тех пор пока пользователь не нажмёт кнопку...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 12.06.2010, 22:35   #10
Spider406
 
Регистрация: 07.06.2010
Сообщений: 8
По умолчанию

цикл вечный, это да. Но мне так и нужно. Да и это не принципиально. Просто не представляю как это реализовать: менять положение каждой фигуры и все рисовать одновременно.
Spider406 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в консоле VC++ MadHead86 Общие вопросы C/C++ 2 14.09.2012 15:48
html код в консоле Cpluser Общие вопросы C/C++ 6 29.04.2010 11:25
Псевдографика в консоле Spice Общие вопросы .NET 2 23.12.2008 13:41
BMP2TXT интерпритатор псевдографики. execom Софт 16 17.02.2008 12:28