Учусь...
60 / 3 / 2
Регистрация: 20.03.2010
Сообщений: 167
1

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

22.09.2011, 12:50. Показов 7079. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2011, 12:50
Ответы с готовыми решениями:

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

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

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

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

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
1 / 7 / 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
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 16:00 7
-=ЮрА=-Не знаю почему у тебя не работает, у меня VS2010. Та там просто рисует по очереди ' ' или '_' а с новой строки наоборот, мои "волны" пречеркивают кораблик. Рисовать линии не умею поэтому просто использовал HANDLE с координатами.
0
Заблокирован
Автор FAQ
22.09.2011, 16:13 8
Цитата Сообщение от Sylvos Посмотреть сообщение
Не знаю почему у тебя не работае
- он работает, бегут волны корабль на месте, но как мне кажется задание было как раз весь корабль перерисовать
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
22.09.2011, 21:40 11
я пробовал но mv c++ 6 не откомпилировал dev c++ 5 libary требовал
0
В вечном поиске...
275 / 235 / 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
1 / 7 / 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
Учусь...
60 / 3 / 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
В вечном поиске...
275 / 235 / 30
Регистрация: 05.04.2011
Сообщений: 645
23.09.2011, 09:10 16
Цитата Сообщение от Sylvos Посмотреть сообщение
Nursik77,
C
1
#include<graphics.h>
а что это такое ?
Устаревшая графическая библиотека, подробности в гугле, стр.1
0
Учусь...
60 / 3 / 2
Регистрация: 20.03.2010
Сообщений: 167
23.09.2011, 09:14  [ТС] 17
Nursik77, это фигня работает только в борланде, а у меня выводит что нет такой библиотеки как графикс.

p.s: circle у меня вышло!!!! Спасибо всем кто пытался мне помочь и помог!!!
0
В вечном поиске...
275 / 235 / 30
Регистрация: 05.04.2011
Сообщений: 645
23.09.2011, 09:40 18
Цитата Сообщение от lp_4eva Посмотреть сообщение
это фигня
Я обижен
0
Учусь...
60 / 3 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2011, 10:17
Помогаю со студенческими работами здесь

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

Видеокарта не выводит изображение на экран
Здравствуйте! Видеокарта перестала выводить изображение на экран, просто выглядит как будто она не...

Видеокарта не выводит изображение (черный экран)
Всем доброго времени суток. Имеется комп HP Pavilion P6-2005ru. Видеокарта что шла с магазина (Nv...

VGA_LED горит красным, на экран изображение не выводит
Помогите пожалуйста, собрал конфигурацию Asus z97-pro wi-fi + i5-4690K без видеокарты При старте...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru