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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 15:44   #1
Prihlop
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 10
Печаль С++. помогите мыслью =)

создал простенький консольный двигатель.
укажите мне его недочеты, чтобы я смог написать рамку, внутри которой бы двигался объект

вот искодный код
Код:
#include <iostream.h>
#include <conio.h>
void ramkaniz();
void ramkaverx();
int gorizfunc (int);     //движение по горизонтали
int vertfunc (int);      //движение по вертикали
int x=10, y=11, z=0, x1, y1;
int main()
{
//cout << " введите направление (W A S D) " << endl;
  char ch='a';
  ////////////////////////////////////////////////////////////////////////////////
  while (ch != '0')
  {
  ch=getche();
  switch(ch)
  {
    case 'x': y++;      break;
    case 'w': y--;      break;
    case 'd': x++;      break;
    case 'a': x--;      break;
    case 'q': x--; y--; break;
    case 'e': x++; y--; break;
    case 'z': y++; x--; break;
    case 'c': x++; y++; break;
    case 's': y++;      break;
  }
  clrscr();
  cout << x << " " << y << " " << z<< " \"0\" -exit"<< endl;
  ramkaverx();
  vertfunc (y);
  gorizfunc (x);
  
  cout<< "0_0";
  ramkaniz();
  }
  ///////////////////////////////////////////////////////////
  cout << "EXIT";
  return 0;
  }
  // 80*23 размер поля
  // описание движение по горизонтали!
  // в зависимости от параметра " х " будет зависить положение объекта
  // должно быть так: i=1; i присваивается x
  int gorizfunc(int i)
  {
   for (i=0; i<=x; i++)
   cout << " ";
   if (x<0) x=0;  //ограничение поля
   if (x>=21) x=20;  //поле
  }

  int vertfunc(int j)
  {
   for ( j=0; j<=y; j++)
   cout << endl;
   if (y>=21) y=20;  //ограничения поля
   if (y<0)  y=1;   //поле
  }

  void ramkaverx()
  {
  cout << "+";
  for (int i=0; i<=21; i++)
  cout << "-";
  cout << "+";
  }

  void ramkaniz()
  {
  cout << "+";
  for (int i=0; i<=21; i++)
  cout << "-";
  cout << "+";
  }

Последний раз редактировалось Stilet; 28.07.2009 в 16:09.
Prihlop вне форума Ответить с цитированием
Старый 28.07.2009, 16:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
укажите мне его недочеты
Что это за прикол с -1 строкой? Либо на нее вообще не стоит перескакивать либо перескакивая не слезать с Х координаты вправо. И кстати выход по 0 плохой - малопонятный. Лучше по Энтеру или Эскейпу.

А вообще зачем это сделано?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2009, 16:26   #3
Prihlop
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 10
По умолчанию

хотелось сделать передвижение с помощью кнопок внутри рамки
а потом если все это получится сделать лабиринт!
Prihlop вне форума Ответить с цитированием
Старый 29.07.2009, 10:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а потом если все это получится сделать лабиринт!
Хм... могу предложить следующую идею - Ты рисуешь на экране стены лабиринта псевдографикой т.е. символами "|" и прочими. Далее при нажимании кнопки передвижения проверяешь есть ли такой симол в координате куда делается шаг или нет. Если нет то шаг сделать можно, иначе нельзя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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