Форум программистов, компьютерный форум CyberForum.ru

перемещение фигурки по экрану в ограниченной области - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как компилировать программу в Microsoft Visual Studio 2012 Express for Desktop? http://www.cyberforum.ru/cpp-beginners/thread768183.html
Всем привет. Я — абсолютный новичок в С++. Немного программирую на языке MQL4. Там все относительно просто: имеется текстовый редактор MetaEditor, в котором можно набрать код программы (Имя.mq4), далее имеется кнопка "Компилировать" (либо клавиша F5), которая переводит Имя.mq4 в Имя.ex4. Так вот, решил заняться языком С++. Скачал и установил программу Microsoft Visual Studio 2012 Express for...
C++ Геодезическая задача #include<stdio.h> #include<math.h> #include<conio.h> #include<iostream.h> #include<fstream.h> void input(float *pr, float *ds, float *ks) { float p; int i,n=9; http://www.cyberforum.ru/cpp-beginners/thread768182.html
В двумерном числовом массиве все отрицательные элементы замените нулями C++
В двумерном числовом массиве все отрицательные элементы замените нулями.
C++ В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки
В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки.
C++ Даны две целочисленные квадратные матрицы 4-го порядка. Получить новую матрицу путем вычитания из элементов каждого столбца первой матрицы суммы элеме http://www.cyberforum.ru/cpp-beginners/thread768153.html
Даны две целочисленные квадратные матрицы 4-го порядка. Получить новую матрицу путем вычитания из элементов каждого столбца первой матрицы суммы элементов соответствующих строк второй матрицы.
C++ Дано 5 действительных чисел. Вычислить квадратный корень из модуля их добудку Дано 5 действительных чисел. Вычислить квадратный корень из модуля их добудку. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
27.01.2013, 16:38     перемещение фигурки по экрану в ограниченной области
Аццкий Прогер, вот смотри, есть отрисовка звёздочки, ест отрисовка рамки. Допустим, отрисовку рамки можно вынести в функцию f_otr()

C++
1
2
3
4
5
6
7
8
9
void f_otr(){
       for (int i=0; i<20; ++i){
           for (int j=0; j<50; ++j){
               if ((i==0) || (j==0) || (j==49) || (i==19)) {cout << "*";} else {cout << " ";}
           }
           cout << endl;
       }
getch();
}
и в цикле после очистки экрана всякий раз её вызывать. Возникает вопрос- перед отрисовкой звёздочки или после? И не так и не сяк. Вызовем перед отрисовкой звёздочки- получится сперва нарисовали рамку, звёздочка внизу очутилась. Вызовем после отрисовки звёздочки- тогда рамка окажется внизу звёдочки.

Выход: отрисовку звёздочки надо интегрировать в отрисовку рамки. Соединим две отрисовки в одну. Симбиоз тык скыть решений.

Не по теме:

Кстати, однажды некоторые штатские, не буду говорить кто, уже назвали подобный удачный, (кстати), симбиоз решений идиотизмом, ну чёрт с ними



Так вот. Точно также в цикле отрисовки рамки пробегаешься, также отрисовываешь пробелы или края рамки и, как только натыкаешься на координаты звёздочки, рисуешь звёздочку. Координаты можно передавать параметрами.
C++
1
2
3
4
5
6
7
8
9
10
11
#define shirina 50
#define visota 20
 
void f_otr (int top, int left) {
       for (int i=0; i<visota; ++i){
           for (int j=0; j<shirina; ++j){
               if ((i==0) || (j==0) || (j==shirina- 1) || (i==visota- 1)||((i==top) && (j==left))) {cout << "*";} else {cout << " ";}
           }
           cout << endl;
       }
}
А вот весь код

#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>
using namespace std;

#define shirina 50
#define visota 20

void f_otr (int top, int left) {
for (int i=0; i<visota; ++i){
for (int j=0; j<shirina; ++j){
if ((i==0) || (j==0) || (j==shirina- 1) || (i==visota- 1)||((i==top) && (j==left))) {cout << "*";} else {cout << " ";}
}
cout << endl;
}
}




#include <iostream>
using namespace std;


int main()
{
int a=1, top=10, left=20;
while ((a=getch())!=27)
{

if (a==224)
continue;
switch (a)
{
case 72:
top--;
break;
case 80:
top++;
break;
case 77:
left++;
break;
case 75:
left--;
break;

}


system ("cls");

//ВЫзываем функцию отрисовки всего и вся
f_otr (top, left);

}


return 0;
}

будем считать первую часть задачи решённой. Теперь на очереди- как сделать так, чтобы звёздочка не выходила за рамку
 
Текущее время: 16:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru