Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
lp_4eva
Учусь...
59 / 2 / 2
Регистрация: 20.03.2010
Сообщений: 167
#1

выводит на экран изображение кораблика.

22.09.2011, 12:50. Просмотров 2053. Ответов 19
Метки нет (Все метки)

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
#include <windows.h>
#include <cstring>
#include <cstdio>
 
using namespace std;
#define Blue RGB (0,0,255)
 
int drawLine (HWND,int,int,int,int,int,HDC=0);
 
int main() {
    //create console
    HWND hConWnd = GetConsoleWindow();
    if (hConWnd) {
        //draw ship
        drawLine(hConWnd, 303, 0, 470, 155, Blue);
        drawLine(hConWnd, 470, 155, 303, 155, Blue);
        drawLine(hConWnd, 303, 0, 303, 215, Blue);
        drawLine(hConWnd, 120, 215, 517, 215, Blue);
        drawLine(hConWnd, 475, 275, 517, 215, Blue);
        drawLine(hConWnd, 475, 275, 191, 275, Blue);
        drawLine(hConWnd, 120, 215, 191, 275, Blue);
        getchar();
    }
    
    return 0;
}
 
 
int drawLine (HWND Wnd,int x1,int y1,int x2,int y2,int Pen,HDC DrawHDC) {
    int a,b=0;
    HPEN hOPen;
    
    HPEN hNPen = CreatePen(PS_SOLID, 2, Pen);
    if (!DrawHDC) DrawHDC = GetDC(Wnd), b = 1;
    hOPen = (HPEN)SelectObject(DrawHDC, hNPen);
    
    MoveToEx(DrawHDC, x1, y1, NULL);
 
    a = LineTo(DrawHDC, x2, y2);
    DeleteObject(SelectObject(DrawHDC, hOPen));
    if (b) ReleaseDC(Wnd, DrawHDC);
    return a;
}
хочу чтобы этот корабль плыл. помогите создать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2011, 12:50
Ответы с готовыми решениями:

Написать программу, которая выводит на экран изображение
Need help!!!! Помогите решить задачи на языке С++!!! 1)...

Программа, которая выводит на экран изображение шахматной доски
и снова привет! мне опять нужна ваша помощь. вот код, который жутко глючит(((...

Написать программу, которая выводит на экран изображение шахматной доски
Написать программу, которая выводит на экран изображение шахматной доски.

Разработать программу которая выводит на экран, которая выводит содержимое текущего каталога, упорядоченное по времени
Помогите пожалуйста!! В уинвере не изучали язык С++ а заставляют на нем...

Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла
Напишите программу, которая выводит на экран содержимое файла D:\numbers.txt....

19
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 14:51 #2
Цитата Сообщение от lp_4eva Посмотреть сообщение
хочу чтобы этот корабль плыл. помогите создать?
- ну гаверное нужна прорисовка в цикле или же обработка TimerProc

Добавлено через 16 минут
Цитата Сообщение от lp_4eva Посмотреть сообщение
хочу чтобы этот корабль плыл.
Жми стрелочку и поплывёт
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
#include <windows.h>
#include <cstring>
#include <cstdio>
#include <conio.h>
 
#define Blue RGB (0,0,255)
 
int drawLine (HWND,int,int,int,int,int,HDC=0);
void drawShip(HWND hConWnd, int pos);
 
int main() {
        //create console
        HWND hConWnd = GetForegroundWindow();
        for(int i = 0; i < 100; i++)
        {
            drawShip(hConWnd,i);
            getch();
            //перерисовываем окно иначе линии будут сливаться
            RedrawWindow
                (
                hConWnd,
                NULL,
                NULL,
                RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE
                );
        }
        system("pause");
        return 0;
}
 
 
int drawLine (HWND Wnd,int x1,int y1,int x2,int y2,int Pen,HDC DrawHDC) {
        int a,b=0;
        HPEN hOPen;
        
        HPEN hNPen = CreatePen(PS_SOLID, 2, Pen);
        if (!DrawHDC) DrawHDC = GetDC(Wnd), b = 1;
        hOPen = (HPEN)SelectObject(DrawHDC, hNPen);
        
        MoveToEx(DrawHDC, x1, y1, NULL);
 
        a = LineTo(DrawHDC, x2, y2);
        DeleteObject(SelectObject(DrawHDC, hOPen));
        if (b) ReleaseDC(Wnd, DrawHDC);
        return a;
}
 
void drawShip(HWND hConWnd, int pos)
{
    if (hConWnd) 
    {
        //draw ship
        drawLine(hConWnd, 303 + pos, 0  , 470 + pos , 155, Blue);
        drawLine(hConWnd, 470 + pos, 155, 303 + pos , 155, Blue);
        drawLine(hConWnd, 303 + pos, 0  , 303 + pos , 215, Blue);
        drawLine(hConWnd, 120 + pos, 215, 517 + pos , 215, Blue);
        drawLine(hConWnd, 475 + pos, 275, 517 + pos , 215, Blue);
        drawLine(hConWnd, 475 + pos, 275, 191 + pos , 275, Blue);
        drawLine(hConWnd, 120 + pos, 215, 191 + pos , 275, Blue);
    }
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 14:53 #3
PS:Отдельно остановлюсь на этой функции
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
RedrawWindow
* * * * * * * * * * * * * * * * (
* * * * * * * * * * * * * * * * hConWnd,
* * * * * * * * * * * * * * * * NULL,
* * * * * * * * * * * * * * * * NULL,
* * * * * * * * * * * * * * * * RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE
* * * * * * * * * * * * * * * * );
-
она обеспечивает перерисовку окна после отработки getch(). Ниже привожу миниатюры плывущего кораблика и "того" что нас ждёт без RedrawWindow
0
Миниатюры
выводит на экран изображение кораблика.   выводит на экран изображение кораблика.  
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 15:05 #4
А вообще скажу что исходный код плох, каждый раз рисуя линию находим HDC её до прорисовки нужно раз найти GetWindowDC и всё время передвать, тогда могли бы обойтись и без RedrawWindow, а вставить вместо неё покраску в чёрный битмапа окна BitBlt
0
Sylvos
-25 / 6 / 3
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 15:44 #5
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
#include<windows.h>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
#define Blue RGB(0,0,255) 
int drawLine(HWND,int,int,int,int,int,HDC=0); 
int main()
{
    HWND hConWnd=GetConsoleWindow();
    if(hConWnd)
    {
        int n=0;
        do
        {
            Sleep(100);
            HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
            COORD p={n%2,20};
            SetConsoleCursorPosition(h,p);
            for(int i=0;i<400;i++)
            {
                if(i%3)
                    cout<<'_';
                if(!(i%3))
                    cout<<' ';
            }
        
            drawLine(hConWnd,303,0,470,155,Blue);
            drawLine(hConWnd,470,155,303,155,Blue);
            drawLine(hConWnd,303,0,303,215,Blue);
            drawLine(hConWnd,120,215,517,215,Blue);
            drawLine(hConWnd,475,275,517,215,Blue);
            drawLine(hConWnd,475,275,191,275,Blue);
            drawLine(hConWnd,120,215,191,275,Blue);
            n++;
        }
        while(1);
        getchar();
    }
    return 0;
} 
int drawLine (HWND Wnd,int x1,int y1,int x2,int y2,int Pen,HDC DrawHDC)
{
        int a,b=0;
        HPEN hOPen;        
        HPEN hNPen=CreatePen(PS_SOLID,2,Pen);
        if(!DrawHDC)
            DrawHDC=GetDC(Wnd),b=1;
        hOPen=(HPEN)SelectObject(DrawHDC,hNPen);        
        MoveToEx(DrawHDC,x1,y1,NULL); 
        a=LineTo(DrawHDC,x2,y2);
        DeleteObject(SelectObject(DrawHDC,hOPen));
        if(b)
            ReleaseDC(Wnd,DrawHDC);
        return a;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 15:52 #6
Sylvos, думаю всё же нужно было чтобы фигура двигалась, а не курсор...
0
Sylvos
-25 / 6 / 3
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 16:00 #7
-=ЮрА=-Не знаю почему у тебя не работает, у меня VS2010. Та там просто рисует по очереди ' ' или '_' а с новой строки наоборот, мои "волны" пречеркивают кораблик. Рисовать линии не умею поэтому просто использовал HANDLE с координатами.
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 16:13 #8
Цитата Сообщение от Sylvos Посмотреть сообщение
Не знаю почему у тебя не работае
- он работает, бегут волны корабль на месте, но как мне кажется задание было как раз весь корабль перерисовать
0
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,653
Записей в блоге: 12
22.09.2011, 16:31 #9
а в какой библиотеке лежат функции для работы с графой
CreatePen(PS_SOLID, 2, Pen);
SelectObject(DrawHDC, hNPen);
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 16:49 #10
Цитата Сообщение от Van111 Посмотреть сообщение
а в какой библиотеке лежат функции для работы с графой
не ломай голову и сделай это
Цитата Сообщение от Sylvos Посмотреть сообщение
#include<windows.h>
0
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,653
Записей в блоге: 12
22.09.2011, 21:40 #11
я пробовал но mv c++ 6 не откомпилировал dev c++ 5 libary требовал
0
Nursik77
273 / 233 / 30
Регистрация: 05.04.2011
Сообщений: 645
22.09.2011, 22:07 #12
Van111, а ты кто? ТС?

Добавлено через 1 минуту
Вот красивенький плавающий кораблик:
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
#include <graphics.h>
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 
#include <dos.h> 
#define PATHTODRIVER "C:\\TC\\BGI"
#define dx 5 // shag setki po X 
#define dy 5 // shag setki po Y 
void ship(int x, int y, int color ) //x,y - koordinati bazovoi tochki
{ 
setcolor(color); 
// korpus 
moveto(x,y);
lineto(x,y-2*dy);
lineto(x+10*dx,y-2*dy); 
lineto(x+11*dx,y-3*dy);
lineto(x+17*dx,y-3*dy); 
lineto(x+14*dx,y) ;
lineto(x,y) ; 
// nadstroika 
moveto(x+3*dx,y-2*dy); 
lineto(x+4*dx,y-3*dy); 
lineto(x+4*dx,y-4*dy); 
lineto(x+13*dx,y-4*dy); 
lineto(x+13*dx,y-3*dy); 
line(x+5*dx,y-3*dy,x+9*dx,y-3*dy); 
// kapitanski mostik 
rectangle(x+8*dx,y-4*dy,x+11*dx,y-5*dy);
// truba 
rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); 
// illuminator 
circle(x+12*dx,y-2*dy,dx/2); 
circle(x+14*dx,y-2*dy,dx/2); 
// machta
line(x+10*dx,y-5*dy,x+10*dx,y-10*dy); 
// osnatka
moveto(x+17*dx,y-3*dy); 
lineto(x+10*dx,y-10*dy); 
lineto(x,y-2*dy); 
}
int main (void)
{
 int x,y; // koordinati korablya (bazovoi tochki)
 int maxx; // koordinati krainei pravoi tochki ekrana
 int gdriver = DETECT; // driver
 int gmode; // rezhim
 initgraph(&gdriver, &gmode, PATHTODRIVER);
setbkcolor(BLUE);
maxx = getmaxx();
x = -10 ; // korabl viplivaet iz-za pravoi granici ekrana
y = 100;
while ( x < maxx)
{
ship(x,y, YELLOW); // narisovat korabl
delay(10);
ship(x,y,BLACK); // steret korabl
x += 5;
}
setcolor(GREEN);
settextstyle(1,0,1);
outtextxy(280,230,"Reis zakonchen!");
outtextxy(280,250,"Nazhmi <Enter> ");
getch();
closegraph(); // vihod iz graficheskogo rezhima 
}
0
Sylvos
-25 / 6 / 3
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 22:16 #13
Nursik77,
C++
1
#include<graphics.h>
а что это такое ?
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 22:24 #14
Решил добавить управление кораблю
D - плывём вправо
А - плывём влево (А - английская)
Q - выход
(остальные ключи не обрабатываются)
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
int main() {
        //create console
        HWND hConWnd = GetForegroundWindow();
        char ch;
        int i = 0;
        bool bShow = true;
                do
                {
                        drawShip(hConWnd,i);
                        switch((ch = toupper(getch())))
                        {
                        case 'A':
                            i--;
                            break;
                        case 'D':
                            i++;
                            break;
                        case 'Q':
                            bShow = false;
                            break;                      
                        };
                        RedrawWindow
                                (
                                hConWnd,
                                NULL,
                                NULL,
                                RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE
                                );
                }
                while(bShow);
                system("pause");
        return 0;
}
Вышло прикольно, минуты две плавал корабликом
1
lp_4eva
Учусь...
59 / 2 / 2
Регистрация: 20.03.2010
Сообщений: 167
22.09.2011, 22:32  [ТС] #15
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
#include<windows.h>
#include<cstring>
#include<cstdio>
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
using namespace std;
#define Blue RGB(0,0,255) 
#define Green RGB(0,100,0) 
int drawLine(HWND,int,int,int,int,int,HDC=0); 
void DrawCircle (int, int, int,int);
int main()
{
        HWND hConWnd=GetConsoleWindow();
    if(hConWnd)
        {
                int n=0;
                do
                {
                        Sleep(100);
                        HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
                        COORD p={n%2,20};
                        SetConsoleCursorPosition(h,p);
                        for(int i=0;i<400;i++)
                        {
                                if(i%3)
                                        cout<<'_';
                                if(!(i%3))
                                        cout<<' ';
                        }
                        system("color 10");
                        DrawCircle(0,0,20,0);
                        drawLine(hConWnd,303,0,470,155,Green);
                        drawLine(hConWnd,303,0,130,210,Green);
                        drawLine(hConWnd,470,155,303,155,Green);    
                        drawLine(hConWnd,303,0,303,215,Green);
                        drawLine(hConWnd,120,215,517,215,Green);
                        drawLine(hConWnd,475,275,517,215,Green);
                        drawLine(hConWnd,475,275,191,275,Green);
                        drawLine(hConWnd,120,215,191,275,Green);
                        n++;
                }
                while(1);
        getchar();
        }
        return 0;
} 
int drawLine (HWND Wnd,int x1,int y1,int x2,int y2,int Pen,HDC DrawHDC)
{
        int a,b=0;
        HPEN hOPen;        
        HPEN hNPen=CreatePen(PS_SOLID,2,Pen);
        if(!DrawHDC)
                        DrawHDC=GetDC(Wnd),b=1;
        hOPen=(HPEN)SelectObject(DrawHDC,hNPen);        
        MoveToEx(DrawHDC,x1,y1,NULL); 
        a=LineTo(DrawHDC,x2,y2);
        DeleteObject(SelectObject(DrawHDC,hOPen));
        if(b)
                        ReleaseDC(Wnd,DrawHDC);
        return a;
}
 
void DrawCircle(int x, int y, int r, int color)
 
{
 
      static const double PI = 3.1415926535;
 
      double i, angle, x1, y1;
 
 
 
      for(i = 0; i < 360; i += 0.1)
 
      {
 
            angle = i;
 
            x1 = r * cos(angle * PI / 180);
 
            y1 = r * sin(angle * PI / 180);
 
      }
 
}
хотела нарисовать солнышко, облака итд. так и не смогла реализовать метод DrawCircle.нет никакого круга=((( Помогите!!!
0
Nursik77
273 / 233 / 30
Регистрация: 05.04.2011
Сообщений: 645
23.09.2011, 09:10 #16
Цитата Сообщение от Sylvos Посмотреть сообщение
Nursik77,
C
1
#include<graphics.h>
а что это такое ?
Устаревшая графическая библиотека, подробности в гугле, стр.1
0
lp_4eva
Учусь...
59 / 2 / 2
Регистрация: 20.03.2010
Сообщений: 167
23.09.2011, 09:14  [ТС] #17
Nursik77, это фигня работает только в борланде, а у меня выводит что нет такой библиотеки как графикс.

p.s: circle у меня вышло!!!! Спасибо всем кто пытался мне помочь и помог!!!
0
Nursik77
273 / 233 / 30
Регистрация: 05.04.2011
Сообщений: 645
23.09.2011, 09:40 #18
Цитата Сообщение от lp_4eva Посмотреть сообщение
это фигня
Я обижен
0
lp_4eva
Учусь...
59 / 2 / 2
Регистрация: 20.03.2010
Сообщений: 167
23.09.2011, 09:54  [ТС] #19
Nursik77, не обижайся=) я все вещи так называю=) просто писать вещи по именами долго=) легче же так писать=) я не в плохом смысле!
0
-=ЮрА=-
Заблокирован
Автор FAQ
23.09.2011, 10:17 #20
Цитата Сообщение от lp_4eva Посмотреть сообщение
p.s: circle у меня вышло!!!
- есть такая функция стандартная Ellipse - чертит круг, элипс...
сие ужасть
Цитата Сообщение от lp_4eva Посмотреть сообщение
for(i = 0; i < 360; i += 0.1)
{
angle = i;
x1 = r * cos(angle * PI / 180);
y1 = r * sin(angle * PI / 180);
}
Для прямоугольника Rectangle
Посмотри этот топик, там черчу 3 основные фигуры круг, прямоугольник и линию
Как рисовать элементарные геометрические фигуры?
0
23.09.2011, 10:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2011, 10:17

Программа выводит изображение календаря на любой месяц
Программа выводит изображение календаря на любой месяц. Выходные и праздничные...

Циклы. Написать программу которая выводит данное изображение
Нужно написать программу которая выводит данное изображение. Программа может...

Написать программу, которая выводит изображение работающего светофора
Написать программу, которая выводит на экран изображе* ние работающего...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru