Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
1

Дальнейшее изучение С++

11.02.2012, 11:09. Показов 3972. Ответов 50
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот хотел у вас спросить, что дальше можно почитать после Бьярне Страуструп Программирование: принципы и практика использования C++, и после Р.Лафоре ООП в С++, планирую купить по WinApi и что то еще хотел у вас спросить что можно еще купить почитать
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2012, 11:09
Ответы с готовыми решениями:

C++ и дальнейшее его пременение
Товарищи! С трудом дается, но дается С++, есть ли смысл покончить мукам конец? Я учусь на...

Указатель на массив и его дальнейшее пользование
Всем доброго денька. Я тут, в общем, пытаюсь вернуть из функции массив, чтобы потом, где-нибудь в...

Дальнейшее изучение
Доброго времени суток! Последнее время мучает такой вопрос: что изучать дальше? Дело в том, что...

Пересоздание массива в функции и дальнейшее его использование в main
Почему, когда я вызываю std::cout << _list в функции, то вывод идет нормальный, а когда в main, то...

50
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
11.02.2012, 13:29  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от IFree Host Посмотреть сообщение
А теперь понятно! Вот видишь что значит без практики быть.
Написать можно что угодно.
Я сейчас тетрис пишу.
Вот недавно башни ханоя написал, но правда как демку
а что ты применял? я ваше не знаю как графическим интерфейсом пользоваться, в книги не проходили
0
Заблокирован
11.02.2012, 13:32 22
Написал вот такой простой графический класс, а дальше все твоя фантазия

Если на самом деле все понял что прочел значит поймешь что к чему
а если не понял занимайся практикой


ConsolenGrafik.h

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
//    #define BLACK 0   #define RED        4    #define DARK_GRAY    8      #define LIGHT_RED     12
//    #define BLUE  1   #define MAGENTA    5    #define LIHGT_BLUE   9      #define LIGHT_MAGENTA 13
//    #define GREEN 2   #define BROWN      6    #define LIGHT_GREEN  10     #define YELLOW        14
//    #define CYAN  3   #define LIGHT_GRAY 7    #define LIGHT_CYAN   11     #define WHITE         15
 
#pragma once
 
class CConsolenGrafik
{
public:
 
    CConsolenGrafik(void);
    ~CConsolenGrafik(void);
 
    void Position(int x, int y);
    void FarbeSetzen(int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenKette(int von_x, int bis_x, int i_zeile, int i_hintergrundFarbe);
    void ZeichenKette(int von_x, int bis_x, int i_zeile, int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenKette(int von_x, int bis_x, int i_line, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_hintergrundFarbe);
    void ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe);
    void Farben(int von_x, int bis_x, int von_y, int bis_y, int i_Farbe);
    void Farben(int von_x, int bis_x, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe);
    void Umramung(int von_x, int von_y, int bis_x, int bis_y, char type);
    void BgrFarbe(int farbe);
 
};

ConsolenGrafik.cpp

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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
//    #define BLACK 0   #define RED        4    #define DARK_GRAY    8      #define LIGHT_RED     12
//    #define BLUE  1   #define MAGENTA    5    #define LIHGT_BLUE   9      #define LIGHT_MAGENTA 13
//    #define GREEN 2   #define BROWN      6    #define LIGHT_GREEN  10     #define YELLOW        14
//    #define CYAN  3   #define LIGHT_GRAY 7    #define LIGHT_CYAN   11     #define WHITE         15
 
#include "StdAfx.h"
#include <windows.h>
#include "ConsolenGrafik.h"
 
#define PIX printf(" ");
#define ZEICHEN(x) printf("%c", (x));
 
    HANDLE hConsole;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
CConsolenGrafik::CConsolenGrafik(void)
{
}
 
CConsolenGrafik::~CConsolenGrafik(void)
{
}
 
void CConsolenGrafik::Position(int x, int y)
{
    COORD coord = { x, y };
    SetConsoleCursorPosition(hStdOut, coord);
} 
 
void CConsolenGrafik::FarbeSetzen(int i_textFarbe, int i_hintergrundFarbe)        
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)(( i_hintergrundFarbe << 4) | i_textFarbe ) );
}
 
void CConsolenGrafik::ZeichenKette(int von_x, int bis_x, int i_zeile, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Position(i,i_zeile);
       FarbeSetzen(i_hintergrundFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenKette(int von_x, int bis_x, int i_zeile, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Position(i,i_zeile);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenKette(int von_x, int bis_x, int i_zeile, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Position(i,i_zeile);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(i_zeichen)
   }
}
 
void CConsolenGrafik::ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_hintergrundFarbe)        
{
   for(int i=von_y; i <= bis_y; i++ ) 
   {
       Position(i_spalte,i);
       FarbeSetzen(i_hintergrundFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_y; i <= bis_y; i++ ) 
   {
       Position(i_spalte,i);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_y; i <= bis_y; i++ ) 
   {
       Position(i_spalte,i);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(i_zeichen)
   }
}
 
void CConsolenGrafik::Farben(int von_x, int bis_x, int von_y, int bis_y, int i_Farbe)        
{
    for (int x = von_x; x <= bis_x; x++ )
        for (int y = von_y; y <= bis_y ; y++ )
        {
            Position(x,y);
            FarbeSetzen(i_Farbe, i_Farbe);
            PIX
        }
}
 
void CConsolenGrafik::Farben(int von_x, int bis_x, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe)        
{
    for (int x = von_x; x <= bis_x; x++ )
        for (int y = von_y; y <= bis_y ; y++ )
        {
            Position(x,y);
            FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
            PIX
        }
}
 
// case 'A' 185-188 ╣║╗╝ 200-206 ╚╔ ╩ ╠ ═ ╬
// case 'B' 179-180 │┤   191-197 ┐└ ┴ ┬ ├ ─ ┼  217-218 ┘┌
// case 'C' 181,184 ╡ ╕  179 │ 190 ╛ 198 ╞ 205 ═ 207 ╧ 209 ╤ 212 213 216 ╘ ╒ ╪
// case 'D' 182,183 ╢ ╖  196 ─ 189 ╜ 186 ║ 199 ╟ 208 ╨ 210,211, 214 ╥ ╙ ╓ 215 ╫
 
void CConsolenGrafik::Umramung(int von_x, int von_y, int bis_x, int bis_y, char type)
{
    int i_zch_hor, i_zch_vert, i_zch_eck1, i_zch_eck2, i_zch_eck3, i_zch_eck4, i_zch_zweck1, i_zch_zweck2, i_zch_mitte;
 
    switch (type)
    {
    case 'A': 
        i_zch_hor = 205;  
        i_zch_vert = 186;
        i_zch_eck1 = 201;
        i_zch_eck2 = 200;
        i_zch_eck3 = 187;
        i_zch_eck4 = 188;
        i_zch_zweck1 = 204;
        i_zch_zweck2 = 185;
        i_zch_mitte = 206;
        break;
    case 'B': 
        i_zch_hor = 196;  
        i_zch_vert = 179;
        i_zch_eck1 = 218;
        i_zch_eck2 = 192;
        i_zch_eck3 = 191;
        i_zch_eck4 = 217;
        i_zch_zweck1 = 195;
        i_zch_zweck2 = 180;
        i_zch_mitte = 197;
        break;
    case 'C': 
        i_zch_hor = 205;  
        i_zch_vert = 179;
        i_zch_eck1 = 213;
        i_zch_eck2 = 212;
        i_zch_eck3 = 184;
        i_zch_eck4 = 190;
        i_zch_zweck1 = 198;
        i_zch_zweck2 = 181;
        i_zch_mitte = 216;
        break;
    case 'D': 
        i_zch_hor = 196;  
        i_zch_vert = 186;
        i_zch_eck1 = 214;
        i_zch_eck2 = 211;
        i_zch_eck3 = 183;
        i_zch_eck4 = 189;
        i_zch_zweck1 = 199;
        i_zch_zweck2 = 182;
        i_zch_mitte = 215;
        break;
    }
 
    for (int y = von_y; y <= bis_y; y += bis_y - von_y )
        for (int x = von_x + 1; x <= bis_x - 1; x++ )
        {
            Position(x,y);
            ZEICHEN(i_zch_hor)
        }
    for (int x = von_x; x <= bis_x; x += bis_x - von_x )
        for (int y = von_y + 1; y <= bis_y - 1; y++ )
        {
            Position(x,y);
            ZEICHEN(i_zch_vert)
        }
    Position(von_x,von_y);
    ZEICHEN(i_zch_eck1)
    Position(von_x,bis_y);
    ZEICHEN(i_zch_eck2)
    Position(bis_x,von_y);
    ZEICHEN(i_zch_eck3)
    Position(bis_x,bis_y);
    ZEICHEN(i_zch_eck4)
}
 
void CConsolenGrafik::BgrFarbe(int i_farbe)
{
    for (int y = 0; y <= 24; y++ )
        for (int x = 0; x <= 79 ; x++ )
        {
            Position(x,y);
            FarbeSetzen(i_farbe, i_farbe);
            PIX
        }
}
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
11.02.2012, 13:35  [ТС] 23
Цитата Сообщение от IFree Host Посмотреть сообщение
Написал вот такой простой графический класс, а дальше все твоя фантазия

Если на самом деле все понял что прочел значит поймешь что к чему

ConsolenGrafik.h

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
//    #define BLACK 0   #define RED        4    #define DARK_GRAY    8      #define LIGHT_RED     12
//    #define BLUE  1   #define MAGENTA    5    #define LIHGT_BLUE   9      #define LIGHT_MAGENTA 13
//    #define GREEN 2   #define BROWN      6    #define LIGHT_GREEN  10     #define YELLOW        14
//    #define CYAN  3   #define LIGHT_GRAY 7    #define LIGHT_CYAN   11     #define WHITE         15
 
#pragma once
 
class CConsolenGrafik
{
public:
 
    CConsolenGrafik(void);
    ~CConsolenGrafik(void);
 
    void Position(int x, int y);
    void FarbeSetzen(int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenKette(int von_x, int bis_x, int i_zeile, int i_hintergrundFarbe);
    void ZeichenKette(int von_x, int bis_x, int i_zeile, int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenKette(int von_x, int bis_x, int i_line, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_hintergrundFarbe);
    void ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe);
    void ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe);
    void Farben(int von_x, int bis_x, int von_y, int bis_y, int i_Farbe);
    void Farben(int von_x, int bis_x, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe);
    void Umramung(int von_x, int von_y, int bis_x, int bis_y, char type);
    void BgrFarbe(int farbe);
 
};

ConsolenGrafik.cpp

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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
//    #define BLACK 0   #define RED        4    #define DARK_GRAY    8      #define LIGHT_RED     12
//    #define BLUE  1   #define MAGENTA    5    #define LIHGT_BLUE   9      #define LIGHT_MAGENTA 13
//    #define GREEN 2   #define BROWN      6    #define LIGHT_GREEN  10     #define YELLOW        14
//    #define CYAN  3   #define LIGHT_GRAY 7    #define LIGHT_CYAN   11     #define WHITE         15
 
#include "StdAfx.h"
#include <windows.h>
#include "ConsolenGrafik.h"
 
#define PIX printf(" ");
#define ZEICHEN(x) printf("%c", (x));
 
    HANDLE hConsole;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
CConsolenGrafik::CConsolenGrafik(void)
{
}
 
CConsolenGrafik::~CConsolenGrafik(void)
{
}
 
void CConsolenGrafik::Position(int x, int y)
{
    COORD coord = { x, y };
    SetConsoleCursorPosition(hStdOut, coord);
} 
 
void CConsolenGrafik::FarbeSetzen(int i_textFarbe, int i_hintergrundFarbe)        
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)(( i_hintergrundFarbe << 4) | i_textFarbe ) );
}
 
void CConsolenGrafik::ZeichenKette(int von_x, int bis_x, int i_zeile, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Position(i,i_zeile);
       FarbeSetzen(i_hintergrundFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenKette(int von_x, int bis_x, int i_zeile, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Position(i,i_zeile);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenKette(int von_x, int bis_x, int i_zeile, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Position(i,i_zeile);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(i_zeichen)
   }
}
 
void CConsolenGrafik::ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_hintergrundFarbe)        
{
   for(int i=von_y; i <= bis_y; i++ ) 
   {
       Position(i_spalte,i);
       FarbeSetzen(i_hintergrundFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_y; i <= bis_y; i++ ) 
   {
       Position(i_spalte,i);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(32)
   }
}
 
void CConsolenGrafik::ZeichenSpalte(int i_spalte, int von_y, int bis_y, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_y; i <= bis_y; i++ ) 
   {
       Position(i_spalte,i);
       FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(i_zeichen)
   }
}
 
void CConsolenGrafik::Farben(int von_x, int bis_x, int von_y, int bis_y, int i_Farbe)        
{
    for (int x = von_x; x <= bis_x; x++ )
        for (int y = von_y; y <= bis_y ; y++ )
        {
            Position(x,y);
            FarbeSetzen(i_Farbe, i_Farbe);
            PIX
        }
}
 
void CConsolenGrafik::Farben(int von_x, int bis_x, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe)        
{
    for (int x = von_x; x <= bis_x; x++ )
        for (int y = von_y; y <= bis_y ; y++ )
        {
            Position(x,y);
            FarbeSetzen(i_textFarbe, i_hintergrundFarbe);
            PIX
        }
}
 
// case 'A' 185-188 ╣║╗╝ 200-206 ╚╔ ╩ ╠ ═ ╬
// case 'B' 179-180 │┤   191-197 ┐└ ┴ ┬ ├ ─ ┼  217-218 ┘┌
// case 'C' 181,184 ╡ ╕  179 │ 190 ╛ 198 ╞ 205 ═ 207 ╧ 209 ╤ 212 213 216 ╘ ╒ ╪
// case 'D' 182,183 ╢ ╖  196 ─ 189 ╜ 186 ║ 199 ╟ 208 ╨ 210,211, 214 ╥ ╙ ╓ 215 ╫
 
void CConsolenGrafik::Umramung(int von_x, int von_y, int bis_x, int bis_y, char type)
{
    int i_zch_hor, i_zch_vert, i_zch_eck1, i_zch_eck2, i_zch_eck3, i_zch_eck4, i_zch_zweck1, i_zch_zweck2, i_zch_mitte;
 
    switch (type)
    {
    case 'A': 
        i_zch_hor = 205;  
        i_zch_vert = 186;
        i_zch_eck1 = 201;
        i_zch_eck2 = 200;
        i_zch_eck3 = 187;
        i_zch_eck4 = 188;
        i_zch_zweck1 = 204;
        i_zch_zweck2 = 185;
        i_zch_mitte = 206;
        break;
    case 'B': 
        i_zch_hor = 196;  
        i_zch_vert = 179;
        i_zch_eck1 = 218;
        i_zch_eck2 = 192;
        i_zch_eck3 = 191;
        i_zch_eck4 = 217;
        i_zch_zweck1 = 195;
        i_zch_zweck2 = 180;
        i_zch_mitte = 197;
        break;
    case 'C': 
        i_zch_hor = 205;  
        i_zch_vert = 179;
        i_zch_eck1 = 213;
        i_zch_eck2 = 212;
        i_zch_eck3 = 184;
        i_zch_eck4 = 190;
        i_zch_zweck1 = 198;
        i_zch_zweck2 = 181;
        i_zch_mitte = 216;
        break;
    case 'D': 
        i_zch_hor = 196;  
        i_zch_vert = 186;
        i_zch_eck1 = 214;
        i_zch_eck2 = 211;
        i_zch_eck3 = 183;
        i_zch_eck4 = 189;
        i_zch_zweck1 = 199;
        i_zch_zweck2 = 182;
        i_zch_mitte = 215;
        break;
    }
 
    for (int y = von_y; y <= bis_y; y += bis_y - von_y )
        for (int x = von_x + 1; x <= bis_x - 1; x++ )
        {
            Position(x,y);
            ZEICHEN(i_zch_hor)
        }
    for (int x = von_x; x <= bis_x; x += bis_x - von_x )
        for (int y = von_y + 1; y <= bis_y - 1; y++ )
        {
            Position(x,y);
            ZEICHEN(i_zch_vert)
        }
    Position(von_x,von_y);
    ZEICHEN(i_zch_eck1)
    Position(von_x,bis_y);
    ZEICHEN(i_zch_eck2)
    Position(bis_x,von_y);
    ZEICHEN(i_zch_eck3)
    Position(bis_x,bis_y);
    ZEICHEN(i_zch_eck4)
}
 
void CConsolenGrafik::BgrFarbe(int i_farbe)
{
    for (int y = 0; y <= 24; y++ )
        for (int x = 0; x <= 79 ; x++ )
        {
            Position(x,y);
            FarbeSetzen(i_farbe, i_farbe);
            PIX
        }
}
а он компилируется? ты тут тоже применяещ WINAPI
0
Заблокирован
11.02.2012, 13:37 24
все компилируется. я с ним уже четвертую игрушку пишу. первая была морской бой.
WINAPI тут нафиг не нужен
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
11.02.2012, 13:39  [ТС] 25
Цитата Сообщение от IFree Host Посмотреть сообщение
все компилируется. я с ним уже четвертую игрушку пишу. первая была морской бой.
WINAPI тут нафиг не нужен
а ты самоучка? Билн по ходу я не когда не научусь программировать
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.02.2012, 13:41 26
Sylar9, Елы палы... Да изучи ты сначала плюсы нормально, потом лезь в графику...

Добавлено через 1 минуту
WINAPI тут нафиг не нужен
Сурьезно? А то что ты используешь HANDLE и функции из WinAPI к примеру GetStdHandle() это ничего?
0
Заблокирован
11.02.2012, 13:48 27
Слушай, программирование выглядит так.
Есть данные которые ты вводишь, они обрабатываются и выводятся обратно
все это только численные значения и команды. То есть любая графическая программа если убрать всю графику это только набор входящих и выходящих численых значений. Это ты должен был понять читая книгу Лафорте. Если не понял читай еще раз.

Вот тебе код тех же башен Ханоя прочтешь и сразу разберешься

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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
// Hanoiturm.cpp : Defines the entry point for the console application.
//
//    Farben in Console:
//
//    Black         = 0,    Red           = 4,  DarkGray      = 8,      LightRed      = 12,
//    Blue          = 1,    Magenta       = 5,  LightBlue     = 9,      LightMagenta  = 13,
//    Green         = 2,    Brown         = 6,  LightGreen    = 10,     Yellow        = 14,
//    Cyan          = 3,    LightGray     = 7,  LightCyan     = 11,     White         = 15
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
 
#define PIX printf(" ");
#define ZEICHEN(x) printf("%c", (x));
 
const int LAVEL = 10;
const int STANGE = 3;
 
int ScheibenPos[LAVEL][STANGE];
 
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
// Zeile
char c_zeile[256];
 
// Konvertiert Text aus ANSI ins OEM 
char *Deutsch(char *c_zeile_convert)
{ 
    AnsiToOem(c_zeile_convert, c_zeile); 
    return c_zeile; 
} 
 
void Gehe_zum_Feld(int x, int y)
{
    COORD coord = { x, y };
    SetConsoleCursorPosition(hStdOut, coord);
} 
 
void Setze_Farbe(int i_textFarbe, int i_hintergrundFarbe)        
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)(( i_hintergrundFarbe << 4) | i_textFarbe ) );
}
 
void Setze_ZeichenKette(int von_x, int bis_x, int i_line, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Gehe_zum_Feld(i,i_line);
       Setze_Farbe(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(i_zeichen)
   }
}
 
void Setze_Farbe_Von_Bis(int von_x, int bis_x, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe)        
{
    for (int x = von_x; x <= bis_x; x++ )
        for (int y = von_y; y <= bis_y ; y++ )
        {
            Gehe_zum_Feld(x,y);
            Setze_Farbe(i_textFarbe, i_hintergrundFarbe);
            PIX
        }
}
 
void Zeichne_Brett(int x_location, int y_location)
{
    for (int i=0, x = 1+x_location; i<10 ,x < x_location+30; i++, x = x+3 )
        for (int j=0, y = 1+y_location; j<10 , y < y_location+21 ; j++, y=y+2 )
        {
            if((j+i)%2!=0) 
            {
                Setze_Farbe_Von_Bis(x,x+2,y,y+1,0,1);
            } 
            else
            {
                Setze_Farbe_Von_Bis(x,x+2,y,y+1,0,9);
            }
        }
}
 
 
void Verschiebe_Scheibe(int i_von, int i_nach)
{
    int i_scheibe;
    int i_position,
        i_level,
        i_breite;
 
    switch(i_von)
    {
        case 1: i_position = 6; break;
        case 2: i_position = 28; break;
        case 3: i_position = 51; break;
    }
 
    // i_level =  22 - i // i 22 = 0 12 = 9 22-9 13
 
 
    for (int i = 9; i >= 0; i--) 
    {
        if(ScheibenPos[i][i_von-1] != 0)
        {
            i_scheibe = ScheibenPos[i][i_von-1];
            ScheibenPos[i][i_von-1] = 0;
            i_level =  22 - i;
            Setze_ZeichenKette(i_position, i_position + 21, i_level, 32, 15, 15);
            switch(i_nach)
            {
                case 1: i_position = 7; break;
                case 2: i_position = 29; break;
                case 3: i_position = 52; break;
            }
            for (int j = 9; j >= 0; j--) 
            {
 
 
    //Setze_ZeichenKette(29,50-1,22,32,14,9);
    //Setze_ZeichenKette(52,73-1,22,32,14,9);
 
                if(j == 0 && ScheibenPos[0][i_nach-1] == 0) 
                {
                    i_level =  22 - j;
                    i_breite = i_scheibe * 2;
                    i_position +=10; 
                    Setze_ZeichenKette(i_position-i_scheibe, i_position -i_scheibe + i_breite, i_level, 32, 15-i_scheibe, 15-i_scheibe);
                    ScheibenPos[0][i_nach-1] = i_scheibe;
                    Sleep(500);
                    break;
                }
                if(ScheibenPos[j][i_nach-1]!= 0)
                {
                    i_level =  22 - j-1;
                    i_breite = i_scheibe * 2;
                    i_position +=10; 
                    Setze_ZeichenKette(i_position-i_scheibe, i_position -i_scheibe + i_breite, i_level, 32, 15-i_scheibe, 15-i_scheibe);
                    ScheibenPos[j+1][i_nach-1] = i_scheibe;
                    Sleep(500);
                    break;
                }
            }
            break;
        }
    }
}
 
void RingVerschieben(int i_RingeZahl,int i_stange1,int i_stange2,int i_stange3)
{
    if (i_RingeZahl==1) // wenn letzter Ring ist erreicht
    {
        Verschiebe_Scheibe(i_stange1, i_stange3);
        //printf("%i %i \n",i_stange1,i_stange3);
    }
    else
        {       
                RingVerschieben ( i_RingeZahl-1, i_stange1, i_stange3, i_stange2);
                Verschiebe_Scheibe(i_stange1, i_stange3);
                //printf("%i %i \n",i_stange1,i_stange3);
                RingVerschieben ( i_RingeZahl-1, i_stange2, i_stange1, i_stange3);
        
        }               
}
 
void Zeichne_Umrahmung()
{
    Gehe_zum_Feld(5,2); 
    Setze_Farbe(8, 7);
    ZEICHEN(201)
 
        Setze_ZeichenKette(6,74,2,205,8,7);
 
    Gehe_zum_Feld(74,2);    
    Setze_Farbe(6, 7);
    ZEICHEN(187)
 
    Gehe_zum_Feld(5,23);    
    Setze_Farbe(8, 7);
    ZEICHEN(200)
 
        Setze_ZeichenKette(6,74,23,205,8,7);
 
    Gehe_zum_Feld(74,23);   
    Setze_Farbe(8, 7);
    ZEICHEN(188)
 
        for (int y = 3; y < 23 ; y++ )
        {
            Setze_ZeichenKette(5,5,y,186,8,7);
            Setze_ZeichenKette(74,74,y,186,8,7);
        }
}
 
void Zeichne_Stange(int x_location, int y_location)
{
        for (int j=0, y = 1+y_location; j<10 , y < y_location+18 ; j++, y=y+2 )
        {
            Setze_Farbe_Von_Bis(x_location,x_location,y,y+1,0,8);
        }
}
 
void BerechneZuge(int i_Ringe, float (&i_StangenVerschiebung)[60], int i_Ausgabe) 
{
    i_StangenVerschiebung[0] = 0;
    for(int i = 1; i <= i_Ringe; i++)
    {
        i_StangenVerschiebung[i]= 2 * (i_StangenVerschiebung[i-1]+1)-1;
    }
    Gehe_zum_Feld(6,1);
    Setze_Farbe(8, 7);
    printf("%s: %.0f\n", Deutsch("Mininimale Zahl der Bewegungenöäßü"), i_StangenVerschiebung[i_Ausgabe] );
};
 
void BerechneZuge(int i_Ausgabe) 
{
    float f_StangenVerschiebung[61];
    float f_Time;
    float f_sec, f_min, f_hour, f_days, f_secR, f_minR, f_hourR, f_daysR, f_year;
 
    f_StangenVerschiebung[0] = 0;
    for(int i = 1; i < 61; i++)
    {
        f_StangenVerschiebung[i]= 2 * (f_StangenVerschiebung[i-1]+1)-1;
    }
    Gehe_zum_Feld(10,5);
    Setze_Farbe(4, 15);
    printf("%s: %.0f", Deutsch("Mininimale Zahl der Bewegungen"), f_StangenVerschiebung[i_Ausgabe] );
    Gehe_zum_Feld(10,7);
    Setze_Farbe(4, 15);
    printf("Bei einer Bewegung pro 1/10 Secunde dauert die Darstellung:");
 
    f_sec =  f_StangenVerschiebung[i_Ausgabe] / 10;
    f_secR = fmod(f_sec, 60);
    f_min =  (f_sec - f_secR)/60;
    f_minR = fmod(f_min, 60);
    f_hour = (f_min - f_minR)/60;
    f_hourR = fmod(f_hour, 24);
    f_days = (f_hour - f_hourR)/24;
    f_daysR = fmod(f_days, 365);
    f_year = (f_days - f_daysR)/365;
 
    Gehe_zum_Feld(22,12);
    printf("%.0f Jahre",f_year);
    Gehe_zum_Feld(22,13);
    printf("%.0f Tage", f_daysR);
    Gehe_zum_Feld(22,14);
    printf("%.0f Stunden",f_hourR);
    Gehe_zum_Feld(22,15);
    printf("%.0f Minuten",f_minR);
    Gehe_zum_Feld(22,16);
    printf("%.0f Sekunden",f_secR);
    
 
};
 
void Zeichne_Brett()
{
    Setze_Farbe_Von_Bis(0,79,0,24,0,7);
    Zeichne_Umrahmung();
    Setze_Farbe_Von_Bis(6,27,3,22,0,15);
    Setze_Farbe_Von_Bis(28,50,3,22,0,15);
    Setze_Farbe_Von_Bis(51,73,3,22,0,15);
    
    //Zeichne_Stange(16,4);
    //Zeichne_Stange(37,4);
    //Zeichne_Stange(58,4);
    Gehe_zum_Feld(0,0);
}
 
int Meldung( int i_meldungIndex)
{
    int i_Input = 0;
    char c_Input;
 
    Setze_Farbe_Von_Bis(18, 60, 10, 15, 14, 9);
    Setze_ZeichenKette(18, 60, 9, 196, 14, 9);
    switch(i_meldungIndex)
    {
    case 0: 
        Gehe_zum_Feld(22,11); 
        printf("Geben Sie Anzahl der Scheiben ein: "); 
        Gehe_zum_Feld(39,13); 
        scanf("%i", &i_Input);
        fflush(stdin);
        return i_Input;
        break;
    case 1: 
        Gehe_zum_Feld(19,11); 
        printf("Drucken Sie Eingabetaste um neu zu starten"); 
        Gehe_zum_Feld(22,12);
        printf("oder ESC um das program zu verlassen");
        c_Input = getch();
        return (int)c_Input;
        break;
    }
 
    Gehe_zum_Feld(39,22);
}
 
void Zeichne_Alle_Scheiben(int i_Ausgabe)
{
    int i_ScheibenBreite = 0,
        i_Position = 0,
        i_Farbe = 0,
        i_Level = 22;
 
    Zeichne_Brett();
 
    for (int i = i_Ausgabe; i > 0; i--)
    {
        i_ScheibenBreite = i*2;
        i_Position = 17 - i;
        i_Farbe = 15 - i;
        Setze_ZeichenKette(i_Position, i_Position+i_ScheibenBreite-1, i_Level--, 32, 0 ,i_Farbe);
    }
    //Setze_ZeichenKette(29,50-1,22,32,14,9);
    //Setze_ZeichenKette(52,73-1,22,32,14,9);
}
 
void Zeige_Antwort(int i_Ausgabe)
{
    Setze_Farbe_Von_Bis(8,70,2,23,0,15);
    Zeichne_Umrahmung();
    Gehe_zum_Feld(15,4);
    BerechneZuge(i_Ausgabe);
}
 
void main()
{
    int i_stange1=1,
        i_stange2=2,
        i_stange3=3,
        i_Anzahl;
    float i_StangenVerschiebung[60];
 
    do
    {
        Zeichne_Brett();
        i_Anzahl = Meldung(0);
        if(i_Anzahl < 11)
        {
            Zeichne_Alle_Scheiben(i_Anzahl);
            BerechneZuge(60, i_StangenVerschiebung, i_Anzahl);
            
            for(int i = i_Anzahl-1, j = 1 ; i >= 0; i--, j++) ScheibenPos[i][0] = j;
            Sleep(1000);
            RingVerschieben ( i_Anzahl, i_stange1, i_stange2, i_stange3);
            i_Anzahl = Meldung(1);
        }
        else
        {
            if(i_Anzahl <= 60)Zeige_Antwort(i_Anzahl);
            getchar();
            i_Anzahl = Meldung(1);
        }
        
        for(int i = 9; i >= 0; i--) 
        {
            ScheibenPos[i][0] = 0;
            ScheibenPos[i][1] = 0;
            ScheibenPos[i][2] = 0;
        }
    } while (i_Anzahl != 27);
}
Добавлено через 59 секунд
ForEveR, просто ему пока ненадо об этом думать
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
11.02.2012, 13:48  [ТС] 28
Цитата Сообщение от IFree Host Посмотреть сообщение
Слушай, программирование выглядит так.
Есть данные которые ты вводишь, они обрабатываются и выводятся обратно
все это только численные значения и команды. То есть любая графическая программа если убрать всю графику это только набор входящих и выходящих численых значений. Это ты должен был понять читая книгу Лафорте. Если не понял читай еще раз.

Вот тебе код тех же башен Ханоя прочтешь и сразу разберешься

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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
// Hanoiturm.cpp : Defines the entry point for the console application.
//
//    Farben in Console:
//
//    Black         = 0,    Red           = 4,  DarkGray      = 8,      LightRed      = 12,
//    Blue          = 1,    Magenta       = 5,  LightBlue     = 9,      LightMagenta  = 13,
//    Green         = 2,    Brown         = 6,  LightGreen    = 10,     Yellow        = 14,
//    Cyan          = 3,    LightGray     = 7,  LightCyan     = 11,     White         = 15
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
 
#define PIX printf(" ");
#define ZEICHEN(x) printf("%c", (x));
 
const int LAVEL = 10;
const int STANGE = 3;
 
int ScheibenPos[LAVEL][STANGE];
 
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
// Zeile
char c_zeile[256];
 
// Konvertiert Text aus ANSI ins OEM 
char *Deutsch(char *c_zeile_convert)
{ 
    AnsiToOem(c_zeile_convert, c_zeile); 
    return c_zeile; 
} 
 
void Gehe_zum_Feld(int x, int y)
{
    COORD coord = { x, y };
    SetConsoleCursorPosition(hStdOut, coord);
} 
 
void Setze_Farbe(int i_textFarbe, int i_hintergrundFarbe)        
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)(( i_hintergrundFarbe << 4) | i_textFarbe ) );
}
 
void Setze_ZeichenKette(int von_x, int bis_x, int i_line, int i_zeichen, int i_textFarbe, int i_hintergrundFarbe)        
{
   for(int i=von_x; i <= bis_x; i++ ) 
   {
       Gehe_zum_Feld(i,i_line);
       Setze_Farbe(i_textFarbe, i_hintergrundFarbe);
       ZEICHEN(i_zeichen)
   }
}
 
void Setze_Farbe_Von_Bis(int von_x, int bis_x, int von_y, int bis_y, int i_textFarbe, int i_hintergrundFarbe)        
{
    for (int x = von_x; x <= bis_x; x++ )
        for (int y = von_y; y <= bis_y ; y++ )
        {
            Gehe_zum_Feld(x,y);
            Setze_Farbe(i_textFarbe, i_hintergrundFarbe);
            PIX
        }
}
 
void Zeichne_Brett(int x_location, int y_location)
{
    for (int i=0, x = 1+x_location; i<10 ,x < x_location+30; i++, x = x+3 )
        for (int j=0, y = 1+y_location; j<10 , y < y_location+21 ; j++, y=y+2 )
        {
            if((j+i)%2!=0) 
            {
                Setze_Farbe_Von_Bis(x,x+2,y,y+1,0,1);
            } 
            else
            {
                Setze_Farbe_Von_Bis(x,x+2,y,y+1,0,9);
            }
        }
}
 
 
void Verschiebe_Scheibe(int i_von, int i_nach)
{
    int i_scheibe;
    int i_position,
        i_level,
        i_breite;
 
    switch(i_von)
    {
        case 1: i_position = 6; break;
        case 2: i_position = 28; break;
        case 3: i_position = 51; break;
    }
 
    // i_level =  22 - i // i 22 = 0 12 = 9 22-9 13
 
 
    for (int i = 9; i >= 0; i--) 
    {
        if(ScheibenPos[i][i_von-1] != 0)
        {
            i_scheibe = ScheibenPos[i][i_von-1];
            ScheibenPos[i][i_von-1] = 0;
            i_level =  22 - i;
            Setze_ZeichenKette(i_position, i_position + 21, i_level, 32, 15, 15);
            switch(i_nach)
            {
                case 1: i_position = 7; break;
                case 2: i_position = 29; break;
                case 3: i_position = 52; break;
            }
            for (int j = 9; j >= 0; j--) 
            {
 
 
    //Setze_ZeichenKette(29,50-1,22,32,14,9);
    //Setze_ZeichenKette(52,73-1,22,32,14,9);
 
                if(j == 0 && ScheibenPos[0][i_nach-1] == 0) 
                {
                    i_level =  22 - j;
                    i_breite = i_scheibe * 2;
                    i_position +=10; 
                    Setze_ZeichenKette(i_position-i_scheibe, i_position -i_scheibe + i_breite, i_level, 32, 15-i_scheibe, 15-i_scheibe);
                    ScheibenPos[0][i_nach-1] = i_scheibe;
                    Sleep(500);
                    break;
                }
                if(ScheibenPos[j][i_nach-1]!= 0)
                {
                    i_level =  22 - j-1;
                    i_breite = i_scheibe * 2;
                    i_position +=10; 
                    Setze_ZeichenKette(i_position-i_scheibe, i_position -i_scheibe + i_breite, i_level, 32, 15-i_scheibe, 15-i_scheibe);
                    ScheibenPos[j+1][i_nach-1] = i_scheibe;
                    Sleep(500);
                    break;
                }
            }
            break;
        }
    }
}
 
void RingVerschieben(int i_RingeZahl,int i_stange1,int i_stange2,int i_stange3)
{
    if (i_RingeZahl==1) // wenn letzter Ring ist erreicht
    {
        Verschiebe_Scheibe(i_stange1, i_stange3);
        //printf("%i %i \n",i_stange1,i_stange3);
    }
    else
        {       
                RingVerschieben ( i_RingeZahl-1, i_stange1, i_stange3, i_stange2);
                Verschiebe_Scheibe(i_stange1, i_stange3);
                //printf("%i %i \n",i_stange1,i_stange3);
                RingVerschieben ( i_RingeZahl-1, i_stange2, i_stange1, i_stange3);
        
        }               
}
 
void Zeichne_Umrahmung()
{
    Gehe_zum_Feld(5,2); 
    Setze_Farbe(8, 7);
    ZEICHEN(201)
 
        Setze_ZeichenKette(6,74,2,205,8,7);
 
    Gehe_zum_Feld(74,2);    
    Setze_Farbe(6, 7);
    ZEICHEN(187)
 
    Gehe_zum_Feld(5,23);    
    Setze_Farbe(8, 7);
    ZEICHEN(200)
 
        Setze_ZeichenKette(6,74,23,205,8,7);
 
    Gehe_zum_Feld(74,23);   
    Setze_Farbe(8, 7);
    ZEICHEN(188)
 
        for (int y = 3; y < 23 ; y++ )
        {
            Setze_ZeichenKette(5,5,y,186,8,7);
            Setze_ZeichenKette(74,74,y,186,8,7);
        }
}
 
void Zeichne_Stange(int x_location, int y_location)
{
        for (int j=0, y = 1+y_location; j<10 , y < y_location+18 ; j++, y=y+2 )
        {
            Setze_Farbe_Von_Bis(x_location,x_location,y,y+1,0,8);
        }
}
 
void BerechneZuge(int i_Ringe, float (&i_StangenVerschiebung)[60], int i_Ausgabe) 
{
    i_StangenVerschiebung[0] = 0;
    for(int i = 1; i <= i_Ringe; i++)
    {
        i_StangenVerschiebung[i]= 2 * (i_StangenVerschiebung[i-1]+1)-1;
    }
    Gehe_zum_Feld(6,1);
    Setze_Farbe(8, 7);
    printf("%s: %.0f\n", Deutsch("Mininimale Zahl der Bewegungenöäßü"), i_StangenVerschiebung[i_Ausgabe] );
};
 
void BerechneZuge(int i_Ausgabe) 
{
    float f_StangenVerschiebung[61];
    float f_Time;
    float f_sec, f_min, f_hour, f_days, f_secR, f_minR, f_hourR, f_daysR, f_year;
 
    f_StangenVerschiebung[0] = 0;
    for(int i = 1; i < 61; i++)
    {
        f_StangenVerschiebung[i]= 2 * (f_StangenVerschiebung[i-1]+1)-1;
    }
    Gehe_zum_Feld(10,5);
    Setze_Farbe(4, 15);
    printf("%s: %.0f", Deutsch("Mininimale Zahl der Bewegungen"), f_StangenVerschiebung[i_Ausgabe] );
    Gehe_zum_Feld(10,7);
    Setze_Farbe(4, 15);
    printf("Bei einer Bewegung pro 1/10 Secunde dauert die Darstellung:");
 
    f_sec =  f_StangenVerschiebung[i_Ausgabe] / 10;
    f_secR = fmod(f_sec, 60);
    f_min =  (f_sec - f_secR)/60;
    f_minR = fmod(f_min, 60);
    f_hour = (f_min - f_minR)/60;
    f_hourR = fmod(f_hour, 24);
    f_days = (f_hour - f_hourR)/24;
    f_daysR = fmod(f_days, 365);
    f_year = (f_days - f_daysR)/365;
 
    Gehe_zum_Feld(22,12);
    printf("%.0f Jahre",f_year);
    Gehe_zum_Feld(22,13);
    printf("%.0f Tage", f_daysR);
    Gehe_zum_Feld(22,14);
    printf("%.0f Stunden",f_hourR);
    Gehe_zum_Feld(22,15);
    printf("%.0f Minuten",f_minR);
    Gehe_zum_Feld(22,16);
    printf("%.0f Sekunden",f_secR);
    
 
};
 
void Zeichne_Brett()
{
    Setze_Farbe_Von_Bis(0,79,0,24,0,7);
    Zeichne_Umrahmung();
    Setze_Farbe_Von_Bis(6,27,3,22,0,15);
    Setze_Farbe_Von_Bis(28,50,3,22,0,15);
    Setze_Farbe_Von_Bis(51,73,3,22,0,15);
    
    //Zeichne_Stange(16,4);
    //Zeichne_Stange(37,4);
    //Zeichne_Stange(58,4);
    Gehe_zum_Feld(0,0);
}
 
int Meldung( int i_meldungIndex)
{
    int i_Input = 0;
    char c_Input;
 
    Setze_Farbe_Von_Bis(18, 60, 10, 15, 14, 9);
    Setze_ZeichenKette(18, 60, 9, 196, 14, 9);
    switch(i_meldungIndex)
    {
    case 0: 
        Gehe_zum_Feld(22,11); 
        printf("Geben Sie Anzahl der Scheiben ein: "); 
        Gehe_zum_Feld(39,13); 
        scanf("%i", &i_Input);
        fflush(stdin);
        return i_Input;
        break;
    case 1: 
        Gehe_zum_Feld(19,11); 
        printf("Drucken Sie Eingabetaste um neu zu starten"); 
        Gehe_zum_Feld(22,12);
        printf("oder ESC um das program zu verlassen");
        c_Input = getch();
        return (int)c_Input;
        break;
    }
 
    Gehe_zum_Feld(39,22);
}
 
void Zeichne_Alle_Scheiben(int i_Ausgabe)
{
    int i_ScheibenBreite = 0,
        i_Position = 0,
        i_Farbe = 0,
        i_Level = 22;
 
    Zeichne_Brett();
 
    for (int i = i_Ausgabe; i > 0; i--)
    {
        i_ScheibenBreite = i*2;
        i_Position = 17 - i;
        i_Farbe = 15 - i;
        Setze_ZeichenKette(i_Position, i_Position+i_ScheibenBreite-1, i_Level--, 32, 0 ,i_Farbe);
    }
    //Setze_ZeichenKette(29,50-1,22,32,14,9);
    //Setze_ZeichenKette(52,73-1,22,32,14,9);
}
 
void Zeige_Antwort(int i_Ausgabe)
{
    Setze_Farbe_Von_Bis(8,70,2,23,0,15);
    Zeichne_Umrahmung();
    Gehe_zum_Feld(15,4);
    BerechneZuge(i_Ausgabe);
}
 
void main()
{
    int i_stange1=1,
        i_stange2=2,
        i_stange3=3,
        i_Anzahl;
    float i_StangenVerschiebung[60];
 
    do
    {
        Zeichne_Brett();
        i_Anzahl = Meldung(0);
        if(i_Anzahl < 11)
        {
            Zeichne_Alle_Scheiben(i_Anzahl);
            BerechneZuge(60, i_StangenVerschiebung, i_Anzahl);
            
            for(int i = i_Anzahl-1, j = 1 ; i >= 0; i--, j++) ScheibenPos[i][0] = j;
            Sleep(1000);
            RingVerschieben ( i_Anzahl, i_stange1, i_stange2, i_stange3);
            i_Anzahl = Meldung(1);
        }
        else
        {
            if(i_Anzahl <= 60)Zeige_Antwort(i_Anzahl);
            getchar();
            i_Anzahl = Meldung(1);
        }
        
        for(int i = 9; i >= 0; i--) 
        {
            ScheibenPos[i][0] = 0;
            ScheibenPos[i][1] = 0;
            ScheibenPos[i][2] = 0;
        }
    } while (i_Anzahl != 27);
}
Добавлено через 59 секунд
ForEveR, просто ему пока ненадо об этом думать
а тетрис ты в чем компилировал?
Мне еще две главы читать Лафоре 14 и 15
0
Заблокирован
11.02.2012, 13:50 29
Visual Studio 2008
0
Paporotnik
11.02.2012, 13:54
  #30

Не по теме:

IFree Host, а ты всегда имена придумываешь на немецком?)) Das ist sehr seltsame Praktik)

0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
11.02.2012, 13:54  [ТС] 31
Цитата Сообщение от IFree Host Посмотреть сообщение
Visual Studio 2008
Просто в 6,0 не компилируется
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.02.2012, 14:02 32
IFree Host, И кстати... Судя по твоему написанию кода (особенно использование классов и тем временем Си функций, макросов) тебе самому стоит еще поучить плюсы, прежде чем с графикой связываться.... ИМХО.
0
Заблокирован
11.02.2012, 14:27 33
Ich bin ja aber auch Deutscher

Добавлено через 52 секунды
ForEveR, это я писал еще в начале семестра на чистом С
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
11.02.2012, 14:27 34
Цитата Сообщение от Sylar9 Посмотреть сообщение
просто я не могу понять что можно написать с консольными приложениями, не зная функция WinApi и не могу понять применение классов
1. Ввод данных с клавиатуры
2. Вывод данных на экран (в консоль)
3. Работа с файлами
4. Вычисления и алгоритмы

Этих пунктов тебе более чем хватит, чтобы понять азы программирования. Никакого знания WinApi тут не требуется, потому что подавляющее большинство задач этого класса никак не привязаны ни к какому WinApi (да и вообще не привязаны ни к какой конкретной операционной системе или процессору)

Прежде, чем понять применение классов нужно научиться хоть что-то и хоть как-то программировать.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.02.2012, 14:34 35
это я писал еще в начале семестра на чистом С
В чистом С нет классов, если что. А у вас все функции в коде графика обернуты в класс.
0
Заблокирован
11.02.2012, 14:40 36
ForEveR, где? в каком месте?

Добавлено через 3 минуты
а вон ты о чем.
Код с башнями ханоя это чистый С
а класс для консольной графики это я ему в качестве примера чтобы он не парился по поводу того что в консоли графику нельзя сделать.

Ну а раз ты такой придира то как только допишу тетрис вывалю его сюда в качестве примера.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.02.2012, 14:40 37
IFree Host, Сообщение №22. Представленный в нем код. Используется класс, а так же Си функции и абсолютно ненужные макросы.
Я ж не придираюсь. Советую просто так не делать. Жду код тетриса (=
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
11.02.2012, 14:43 38
Evg, проблема в том, что если читать книги по программированию, не пробуя большинство программ, приведённых там в качестве примера, не изменяя их, не вставляя отладочные принты и не вникая в работу алгоритма, а просто читать по паре страниц перед сном, то из человека выйдет кто угодно, но только не программист. Как книгу по математике надо читать с карандашом в руках, так и книгу по программированию надо читать с клавиатурой в них же. А читать книгу по программированию просто так - убить день/неделю/месяц (в зависимости от скорости чтения). Так что мне кажется, что совет "бросать читать [пусть даже на данном этапе] и приступать к практике" несколько неверен, потому что если тот, кому этот совет адресован, не практиковал, читая, то совет стоит заменить на "читай всё сначала, но перемешивая с практикой", а если он и так практиковал, то вообще на "продолжай в том же духе".

Sylar9, горькая правда: судя по темам, которые вы создавали на форуме, вы не усвоили ничего из того, что прочитали. Проблема может крыться как в том, что я озвучил выше, отвечая ув. Evg, так и в чём-то другом, но, тем не менее, она существует.
0
Заблокирован
11.02.2012, 14:43 39
макросы нужно было использовать как пример к изучаемой теме прекомпилятора
потому они там и есть
Это ты свободный художник, а мы студенты - люди подневольные. Что профессор просит то и делаем.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
11.02.2012, 15:33 40
Цитата Сообщение от silent_1991 Посмотреть сообщение
"бросать читать [пусть даже на данном этапе] и приступать к практике"
Я же говорил, что не надо бросать читать. На данном этапе не надо больше никаких новых книг читать. Да и вообще две прочитанные книги - это уже перебор, если это всё читалось без соответствующей практики. А без практики дальше можно хоть 100 книг прочесть - только нифига в голове не осядет и реальных знаний не прибавится
0
11.02.2012, 15:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2012, 15:33
Помогаю со студенческими работами здесь

Дальнейшее чтение после Р.Лафоре искусство ООП программирования С++
Всем привет. Прочел книгу Р.Лафоре искусство ООП программирования С++. И вот стою курю и думаю. А...

Изучение С++
Доброго времени суток! Решил изучать ЯП С++. Посоветуйте уроки, статьи для изучение этого языка....

Изучение С++
Добрый день, хотел бы изучать язык С++, но пока не знаю как. Я студент 1 курса програмистского...

Изучение С++
Добрый вечер прошу совета , что изучать далее ? Освоил книгу Джеймса Либрети , Страуструппа. Вроде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru