Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
1

Простой тетрис

03.09.2011, 22:52. Показов 6353. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как создать ну очень простой тетрис? просто белое winapi-окно и опускающиеся фигуры, которые можно двигать и поворачивать. Хочу понять, как делаются двигающиеся фигуры в winapi-окне и как ими управлять, но нигде не могу найти...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2011, 22:52
Ответы с готовыми решениями:

Нужен простой тетрис пожалуйста
рбята киньте плиз очень простой тетрис... одноцветний без очков без ничиго... просто чтоби все...

Консольная игра Тетрис С++
Здравствуйте! Помогите пожалуйста начинающему программисту нужно написать консольный тетрис на...

Тетрис (самый простой)
Написать простенький Тетрис на FASM

На встроенном ассемблере создать простой тетрис
Помомгите пожалуйста с задачей, используя объектно-орентированное программирование.

3
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
04.09.2011, 09:09 2
Цитата Сообщение от z-z Посмотреть сообщение
но нигде не могу найти...

http://yandex.ru/yandsearch?text=Tetris+WINAPI

В компе искали?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
04.09.2011, 10:44 3
Цитата Сообщение от z-z Посмотреть сообщение
Хочу понять, как делаются двигающиеся фигуры в winapi-окне
C++
1
2
3
4
5
6
7
//пусть x,y координаты левого верхнего угла фигуры
//а X,Y координаты, того места окна, где нужно остановиться
while(y !=Y){
      redraw_shape(x, y);
      y+=5; //прибавляем 5 пикселей
      Sleep(500);//ждем пол секунды
}
это в очень очень грубом виде, но принцип должен быть понятен)
0
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
04.09.2011, 20:52 4
Цитата Сообщение от z-z Посмотреть сообщение
просто белое winapi-окно и опускающиеся фигуры, которые можно двигать и поворачивать.
Вот пример тебе передвижение, ну и на клавишу нажми в лево в право должны двигаться.
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
#include <windows.h>
LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);
 
// создаём окно
int  WINAPI  WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) {
 
   HWND  wnd;
   MSG   msg;
   CHAR* _class = "MyWindows";
 
   WNDCLASSA  cls = {
          CS_VREDRAW | CS_HREDRAW, WndProc, 0, 0, hInstance, NULL, 
          LoadCursor(NULL, IDC_ARROW), (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, _class
   };
   if(! RegisterClassA(&cls))
          ExitProcess(0u);
    
    wnd = CreateWindowA(_class, "Моё окно", WS_OVERLAPPEDWINDOW,
    GetSystemMetrics(SM_CXSCREEN)/2-640/2, GetSystemMetrics(SM_CYSCREEN)/2-480/2, 
    640, 480, NULL, NULL, hInstance, NULL);
    if(! wnd) {
              UnregisterClassA(_class, hInstance);
              ExitProcess(0u);
    }
    ShowWindow(wnd, SW_SHOW);
    UpdateWindow(wnd);
 
    ZeroMemory(&msg, sizeof(MSG));
    while(GetMessageA(&msg, NULL, NULL, 0u)) {
               DispatchMessageA(&msg);
               TranslateMessage(&msg);
    }
    UnregisterClassA(_class, hInstance);
    return msg.wParam;
}
 
 
RECT rct[3];     // прямоугольник обновления
HBRUSH brush[3];   // кисть для закраски прямоугольников
RECT rc[3];      // прямоугольник вывода
long speed = 1L; // скорость передвижения
 
LRESULT CALLBACK  WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
           PAINTSTRUCT ps;
           UINT i;
           RECT rect;
    switch(msg) {
    case WM_CREATE:
               SetTimer(hwnd, 777u, 20u, NULL);  // создаём таймер обновления и передвижения
    
              // создаём кисти
              for(i = 0u; i < sizeof(rct) / sizeof(rct[0]); i++) {
                         brush[i] = CreateSolidBrush(PALETTEINDEX(1 + i)); 
                         SetRect(&rc[i], 50 + i*80 + i*80, 0, 100 + i*80 + i*80, 50);          
              }
              break;
    case WM_PAINT:
                      BeginPaint(hwnd, &ps);
 
                      // выводим цветные прямоугольники
                      for(i = 0u; i < sizeof(rct) / sizeof(rct[0]); i++) {
                            FillRect(ps.hdc, &rc[i], brush[i]); 
                            CopyRect(&rct[i], &rc[i]);
        }
 
                      EndPaint(hwnd, &ps);
                     break;
         case WM_TIMER:
                     if(LOWORD(wParam) == 777u) {
            
                             // операция движения
                             GetClientRect(hwnd, &rect);
                            for(i = 0u; i < sizeof(rct) / sizeof(rct[0]); i++) {
                                 rc[i].top += speed;
                                 rc[i].bottom += speed;
                                 InvalidateRect(hwnd, &rct[i], TRUE);
                                 rect.top = rc[i].bottom - rc[i].top;
                                 rc[i].top %= rect.bottom;
                                 if(! rc[i].top) 
                                         rc[i].bottom = rect.top;
                           }
                     }
                      break;
            case WM_KEYDOWN:
                // на клавишу в лево прямоуголники передвигаются в лево, в право ну так далее
               for(i = 0u; i < sizeof(rct) / sizeof(rct[0]); i++) {
                     if(LOWORD(wParam) == VK_LEFT) {
                            rc[i].left  -= speed;
                            rc[i].right -= speed;
                     } else if(LOWORD(wParam) == VK_RIGHT) {
                            rc[i].left  += speed;
                            rc[i].right += speed;
                     }
                 } 
                 break;
    case WM_DESTROY:
                KillTimer(hwnd, 777u);  // уничтожаем таймер
                for(i = 0u; i < sizeof(rct) / sizeof(rct[0]); i++)
                      DeleteObject(brush[i]);
                PostQuitMessage(0u);
                break;
          default: return DefWindowProc(hwnd, msg, wParam, lParam);
           }
           return 0;   
}
1
04.09.2011, 20:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2011, 20:52
Помогаю со студенческими работами здесь

На встроенном ассемблере создать игру простой тетрис
Помогите пожалуйста с задачей, используя объектно-орентированное программирование.

Сортировки: простой выбор, простой обмен и прямое включение
Дан массив, состоящий из записей. Каждая запись содержит два поля: табельный номер(целое число в...

Тетрис
Пишу на c++ for DOS! Вобщем не могу сделать передвижение фигуры влево или вправо при нажатии на...

Тетрис
Напишите программу, которая выводит на консоль 2 фигуры из тетриса, анимирует их падение вниз по...


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

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