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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
lp_4eva
Учусь...
 Аватар для lp_4eva
59 / 2 / 1
Регистрация: 20.03.2010
Сообщений: 167
22.09.2011, 12:50     выводит на экран изображение кораблика. #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
#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;
}
хочу чтобы этот корабль плыл. помогите создать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2011, 12:50     выводит на экран изображение кораблика.
Посмотрите здесь:

Написать программу, которая выводит на экран изображение C++
C++ Программа, которая выводит на экран изображение шахматной доски
Циклы. Написать программу которая выводит данное изображение C++
Программа выводит изображение календаря на любой месяц C++
C++ Разработать программу которая выводит на экран, которая выводит содержимое текущего каталога, упорядоченное по времени
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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);
    }
}
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 14:53     выводит на экран изображение кораблика. #3
PS:Отдельно остановлюсь на этой функции
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
RedrawWindow
* * * * * * * * * * * * * * * * (
* * * * * * * * * * * * * * * * hConWnd,
* * * * * * * * * * * * * * * * NULL,
* * * * * * * * * * * * * * * * NULL,
* * * * * * * * * * * * * * * * RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE
* * * * * * * * * * * * * * * * );
-
она обеспечивает перерисовку окна после отработки getch(). Ниже привожу миниатюры плывущего кораблика и "того" что нас ждёт без RedrawWindow
Миниатюры
выводит на экран изображение кораблика.   выводит на экран изображение кораблика.  
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 15:05     выводит на экран изображение кораблика. #4
А вообще скажу что исходный код плох, каждый раз рисуя линию находим HDC её до прорисовки нужно раз найти GetWindowDC и всё время передвать, тогда могли бы обойтись и без RedrawWindow, а вставить вместо неё покраску в чёрный битмапа окна BitBlt
Sylvos
-25 / 6 / 1
Регистрация: 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;
}
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 15:52     выводит на экран изображение кораблика. #6
Sylvos, думаю всё же нужно было чтобы фигура двигалась, а не курсор...
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 16:00     выводит на экран изображение кораблика. #7
-=ЮрА=-Не знаю почему у тебя не работает, у меня VS2010. Та там просто рисует по очереди ' ' или '_' а с новой строки наоборот, мои "волны" пречеркивают кораблик. Рисовать линии не умею поэтому просто использовал HANDLE с координатами.
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 16:13     выводит на экран изображение кораблика. #8
Цитата Сообщение от Sylvos Посмотреть сообщение
Не знаю почему у тебя не работае
- он работает, бегут волны корабль на месте, но как мне кажется задание было как раз весь корабль перерисовать
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
22.09.2011, 16:31     выводит на экран изображение кораблика. #9
а в какой библиотеке лежат функции для работы с графой
CreatePen(PS_SOLID, 2, Pen);
SelectObject(DrawHDC, hNPen);
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 16:49     выводит на экран изображение кораблика. #10
Цитата Сообщение от Van111 Посмотреть сообщение
а в какой библиотеке лежат функции для работы с графой
не ломай голову и сделай это
Цитата Сообщение от Sylvos Посмотреть сообщение
#include<windows.h>
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
22.09.2011, 21:40     выводит на экран изображение кораблика. #11
я пробовал но mv c++ 6 не откомпилировал dev c++ 5 libary требовал
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 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 
}
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 22:16     выводит на экран изображение кораблика. #13
Nursik77,
C++
1
#include<graphics.h>
а что это такое ?
-=ЮрА=-
Заблокирован
Автор 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;
}
Вышло прикольно, минуты две плавал корабликом
lp_4eva
Учусь...
 Аватар для lp_4eva
59 / 2 / 1
Регистрация: 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.нет никакого круга=((( Помогите!!!
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
23.09.2011, 09:10     выводит на экран изображение кораблика. #16
Цитата Сообщение от Sylvos Посмотреть сообщение
Nursik77,
C
1
#include<graphics.h>
а что это такое ?
Устаревшая графическая библиотека, подробности в гугле, стр.1
lp_4eva
Учусь...
 Аватар для lp_4eva
59 / 2 / 1
Регистрация: 20.03.2010
Сообщений: 167
23.09.2011, 09:14  [ТС]     выводит на экран изображение кораблика. #17
Nursik77, это фигня работает только в борланде, а у меня выводит что нет такой библиотеки как графикс.

p.s: circle у меня вышло!!!! Спасибо всем кто пытался мне помочь и помог!!!
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
23.09.2011, 09:40     выводит на экран изображение кораблика. #18
Цитата Сообщение от lp_4eva Посмотреть сообщение
это фигня
Я обижен
lp_4eva
Учусь...
 Аватар для lp_4eva
59 / 2 / 1
Регистрация: 20.03.2010
Сообщений: 167
23.09.2011, 09:54  [ТС]     выводит на экран изображение кораблика. #19
Nursik77, не обижайся=) я все вещи так называю=) просто писать вещи по именами долго=) легче же так писать=) я не в плохом смысле!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2011, 10:17     выводит на экран изображение кораблика.
Еще ссылки по теме:

C++ Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла
C++ Написать программу, которая выводит на экран изображение шахматной доски
C++ Написать программу, которая выводит изображение работающего светофора

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор 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 основные фигуры круг, прямоугольник и линию
Как рисовать элементарные геометрические фигуры?
Yandex
Объявления
23.09.2011, 10:17     выводит на экран изображение кораблика.
Ответ Создать тему
Опции темы

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