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

Передвижение графических объектов на языке С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определение количества символов в тексте http://www.cyberforum.ru/cpp-beginners/thread860044.html
Во входном файле text.txt содержится текст на английском языке. Требуется написать программу, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество таких букв.Если искомых букв несколько, то программа должна вывести ту из них,которая идет раньше по алфавиту. Проблема в объявлении цикла проверки. ЧЯДНТ? #include "stdafx.h"...
C++ Подсчет букв "и" во введенной строке помогите составить программу. http://www.cyberforum.ru/cpp-beginners/thread860031.html
C++ В С++ может ли argv быть двухмерным массивом?
int main(int argc, char *argv) { argv = tolower(argv); argv = tolower(argv); Вот что это означает? Когда у argv с двумя аргументами?
как вернуть массив и как неявно получить атрибут объекта C++
хочу спросить как из функции вернуть массив int g(void){ int a; //как-то его заполнить return a; } массив не хочет возвращять
C++ Дан набор символов, среди которых есть двоеточие ‘:’. Определить, сколько символов ему предшествует http://www.cyberforum.ru/cpp-beginners/thread860014.html
Дан набор символов, среди которых есть двоеточие ‘:’. Определить, сколько символов ему предшествует Дан набор символов, среди которых есть двоеточие ‘:’. Определить, сколько символов ему предш Помогите с программкой....пожалуйста...
C++ Некомпилиться в VC 2010 (работа с OpenGL) Пишу курсач по вот этой видюшке http://www.youtube.com/watch?v=TC2F78eE3CQ и не могу понять, в чем у меня ошибка в файле 1.срр, т.к. не раз проверял и вроде все норм сделал. Подскажите, что не так? подробнее

Показать сообщение отдельно
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
10.05.2013, 02:42     Передвижение графических объектов на языке С++
Не стал реализовывать полноценный паттерн command, ограничился одной командой. Да и не шибко-то он тут нужен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include <iostream>
#include <iomanip>
 
/* 
 * В выпуклый четырёхугольник ABCD можно вписать окружность тогда и
 * только тогда, когда суммы его противоположных сторон равны. 
 * По условию окружность вписана в прямоугольник.
 * Прямоугольник, в котором суммы противоположных сторон равны,
 * есть квадрат.
 */
 
struct Point {
  Point() :x(0), y(0) {}
  Point(double x, double y) : x(x), y(y) {}
  double x, y;
};
 
std::ostream &operator<<(std::ostream &stream, const Point &p) {
  return stream << "Point{" <<
    std::fixed << std::setprecision(2) <<
    "x=" << p.x << "," <<
    "y=" << p.y << "}";
}
 
class Surface;
 
class Drawable {
 public:
  virtual void draw(Surface &surface) = 0;
};
 
/*
 * Этот класс должен отрисовывать примитивы
 */
class Surface {
 public:
  void draw(Drawable &object) {
    object.draw(*this);
  }
  void drawLine(const Point &a, const Point &b) {
    // тут должен быть код, отрисовывающий линию
    std::cout << "Line{a=" << a << ",b=" << b << "}" << std::endl;
  }
  void drawCircle(const Point &center, double radius) {
    // тут должен быть код, отрисовывающий оркужность
    std::cout << "Circle{center=" << center << ",radius=" << radius <<
      "}" << std::endl;    
  }
  void clear() {
    // тут должен быть код, очищающий поверхность
    std::cout << "Surface cleared." << std::endl;
  }
};
 
class Placeable {
 public:
  Placeable() : point() {}
  Placeable(double x, double y) : point(x, y) {}
  double getX() const { return point.x; }
  double getY() const { return point.y; }
  void setX(double x) { this->point.x = x; }
  void setY(double y) { this->point.y = y; }
 private:
  Point point;
};
 
class Square : public Drawable, public Placeable {
 public:
  Square(double x, double y, double side) : Placeable(x, y), side(side) {}
  double getSide() const { return side; }
  void setSide(double side) { this->side = side; }
  virtual void draw(Surface &surface) {
    surface.drawLine(Point(getX(), getY()), Point(getX() + side, getY()));
    surface.drawLine(Point(getX(), getY()), Point(getX(), getY() + side));
    surface.drawLine(Point(getX() + side, getY()), Point(getX() + side,
      getY() + side));
    surface.drawLine(Point(getX(), getY() + side), Point(getX() + side,
      getY() + side));
  }
 private:
  double side;
};
 
class Circle : public Drawable, public Placeable {
 public:
  Circle(double x, double y, double radius) : Placeable(x, y),
    radius(radius) {}
  double getRadius() const { return radius; }
  void setRadius(double radius) { this->radius = radius; }
  virtual void draw(Surface &surface) {
    surface.drawCircle(Point(getX(), getY()), radius);
  }
 private:
  double x, y, radius;
};
 
class Scene {
 public:
  Scene(size_t capacity) : capacity(capacity), size(0),
    drawables(new Drawable*[capacity]) {}
  virtual ~Scene() {
    delete [] drawables;
  }
  Drawable **add(Drawable *drawable) {
    drawables[size++] = drawable;
    return drawables + size;
  }
  Drawable *operator[](size_t position) {
    return drawables[position];
  }
  const Drawable *operator[](size_t position) const {
    return drawables[position];
  }
  size_t getSize() const {
    return size;
  }
  
  void draw(Surface &surface) {
    surface.clear();
    for (size_t i = 0; i < size; ++i) {
      surface.draw(*(drawables[i]));
    }
  }
 private:
  Scene(const Scene&);
  Scene &operator=(const Scene&);
  size_t capacity;
  size_t size;
  Drawable **drawables;
};
 
class Command {
 public:
  virtual void execute() = 0;
};
 
class ShiftPlaceableCommand : public Command {
 public:
  ShiftPlaceableCommand(Placeable &placeable, double shiftX, double shiftY)
    : placeable(placeable), shiftX(shiftX), shiftY(shiftY) {}
  virtual void execute() {
    placeable.setX(placeable.getX() + shiftX);
    placeable.setY(placeable.getY() + shiftY);
  }
 private:
  Placeable &placeable;
  double shiftX, shiftY;
};
 
Circle getInscribedCircle(const Square &square) {
  double halfSide = square.getSide() / 2.0;
  return Circle(square.getX() + halfSide,
    square.getY() + halfSide, halfSide);
}
 
int main(int argc, char *argv[]) {
  Surface surface;
  Scene scene(2);
 
  Square square(1, 1, 2);
  Circle circle = getInscribedCircle(square);
 
  scene.add(&square);
  scene.add(&circle);
 
  ShiftPlaceableCommand shiftCircle(circle, 1.03, 1.03);
  ShiftPlaceableCommand shiftSquare(square, 1.03, 1.03);
 
  for (int i = 0; i < 100; ++i) {
    shiftCircle.execute();
    shiftSquare.execute();
    scene.draw(surface);
  }
  
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru