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

косяк вызова функции через switch case - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ DOS -> WIN http://www.cyberforum.ru/cpp-beginners/thread410613.html
Помогите написать программу для перекодировки текста к примеру из DOS -> WIN!
C++ Вычислить сумму отрицательных, произведение положительных и количество нулевых элементов массива с нечетными индексами. Народ выручайте :D у меня заходы уже. задачка с одномерным массивом. Вычислить сумму отрицательных, произведение положительных и количество нулевых элементов массива с нечетными индексами. вот код // 3333333.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <stdio.h> http://www.cyberforum.ru/cpp-beginners/thread410612.html
Дан текст, определить, сколько в нем предложений. Вывести на экран самое длинное. C++
Помогите написать программу на языке С:) пожааалуйста)
C++ сумма медиан
найти сумму медиан треугольника заданый координатами вершин медиана в виде функции координат и задана ими как написать код даже не представляю??????????? c++ 3.1
C++ массив http://www.cyberforum.ru/cpp-beginners/thread410592.html
из масива D создать новый массив расположив вначале отрицательные, затем положительные. Определить в каком из массивов наименьший по модулю элемент встретится первым.вывести все массивы, наименьшие значения и их индексы..... с++ help plzzz
C++ матрица и замена столбцов найдите ошибку # include <iostream.h> # include <conio.h> # include <stdio.h> # include <stdlib.h> # include <math.h> void main () { float A, B; int i,j,x,y,a,b; clrscr(); подробнее

Показать сообщение отдельно
Wirbelwind
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 4
18.12.2011, 17:11     косяк вызова функции через switch case
! кода по моим меркам много, если решитесь помочь, запаситесь терпением)))

Итак. Имеется зародыш курсовой - игры пятнашки. делал в консоли с графикой с помощью вин32апи.
Прога разделена на 3 файла - заголовочный для класса, отдельно описание его методов, отдельно void main. Вкратце о происходящем: создается массив 4на4 объектов класса(фишек) в качестве полей имеющих координаты на поле и номер, а затем все хозяйство отрисовывается (никаких методов для выбора, движения фишек пока нет и в помине). номер фишки 0 означает свободное место на поле.

Собственно, проблема: нивкакую не отрисовывается номер последней фишки

Веселости: при изменении размера массива на 3х3 все робит, при использовании рандомно расставленных номеров баг становится плавающим - то есть то нет, зараза=(((
Кстати способ отрисовки номеров фишек крайне дебилен, ибо как с помощью TextOut'а вывести число содержащееся в типе инт так и не понял(

сам код в 3 куска


puzzle.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef PUZZLE
#define PUZZLE
#include <Windows.h>
 
class cPuzzle
    {
    public:
        cPuzzle(int xcoor = 0, int ycoor = 0, int number = 0);
        void Draw(HDC &hdc);
    private:
        int x, y, num;
    };
#endif PUZZLE

puzzle.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
#include "Puzzle.h"
 
const int xstpos = 0;
const int ystpos = 0;
const int size = 50;
 
cPuzzle::cPuzzle(int xcoor, int ycoor, int number)
    {
        x=xcoor;
        y=ycoor;
        num=number;
    }
 
void cPuzzle::Draw(HDC &hdc)
    {
        SelectObject(hdc,GetStockObject(DC_BRUSH));
        SetDCBrushColor(hdc,RGB(255, 255, 255));
        SelectObject(hdc,GetStockObject(DC_PEN));
        SetDCPenColor(hdc,RGB(0, 0, 0));
 
        
        Rectangle(hdc, 
            xstpos+(x)*size, 
            ystpos+(y)*size,
            xstpos+(x+1)*size,
            ystpos+(y+1)*size);
 
        switch(num)
        {       
            case 1: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "1",2);break;
            case 2: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "2",2);break;
            case 3: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "3",2);break;
            case 4: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "4",2);break;
            case 5: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "5",2);break;
            case 6: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "6",2);break;
            case 7: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "7",2);break;
            case 8: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "8",2);break;
            case 9: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "9",2);break;
            case 10: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "10",2);break;
            case 11: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "11",2);break;
            case 12: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "12",2);break;
            case 13: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "13",2);break;
            case 14: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "14",2);break;
            case 15: TextOut(hdc, xstpos+(x)*size + 15, ystpos+(y)*size + 15, "15",2);break;
            default : 
                {
                    SelectObject(hdc,GetStockObject(DC_BRUSH));
                    SetDCBrushColor(hdc,RGB(127, 127, 127));
                    SelectObject(hdc,GetStockObject(DC_PEN));
                    SetDCPenColor(hdc,RGB(255, 255, 255));
 
                    Rectangle(hdc, 
                        xstpos+(x)*size, 
                        ystpos+(y)*size,
                        xstpos+(x+1)*size,
                        ystpos+(y+1)*size);
                    break;
                }
        }//end of switch
 
    }

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
#include "Puzzle.h"
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
void main()
    {
        HWND handle = FindWindow("ConsoleWindowClass", NULL); //получаем хэндл окна
        HDC hdc = GetDC(handle);// получаем контекст устройства
        
        
        /*--------рандомное расставление фишек---------
        srand(time(NULL));
        int mass[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        for(int i1=0;i1<16;i1++)
            {
                int i2 = rand()%15;
                int m = mass[i1];
                mass[i1]=mass[i2];
                mass[i2]=m;
            }
        */
 
        cPuzzle token[4][4];//создаем массив объектов
        int xcoor, ycoor, number=0;
        for(ycoor=0;ycoor<4;ycoor++)
            {for(xcoor=0;xcoor<4;xcoor++)
                {   //задаем значения объекту, number заменить на mass[number] для рандом. знач.
                    token[xcoor][ycoor] = cPuzzle(xcoor,ycoor,number);
                    token[xcoor][ycoor].Draw(hdc);//отрисовываем его
                    number++;
                }
            }
        _getch();  
    }
Добавлено через 1 час 5 минут
убил себя об стену. заработало если считать что "14" - 2 символа, а "15" - три
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru