Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 13:00   #1
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
Вопрос Дописать прогу.

короче пишу игру "змейка" . осталось ток заставить звеюку двигаца.

вот часть кода в которой не хочит работать:

Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;

switch (message) 
{
case WM_CREATE:
{
InitializeSnake(hWnd);
}
break;
case WM_KEYDOWN:
switch (wParam) {
case VK_LEFT:
break;
case VK_RIGHT:
break;
case VK_UP:
break;
case VK_DOWN:
break;
}
case WM_COMMAND:
wmId = LOWORD(wParam); 
wmEvent = HIWORD(wParam); 
// Parse the menu selections:
switch (wmId)
{
case IDM_about:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
OnPaint( hWnd );
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}

return 0;
}
чего в ней не так. помогите дописать.
(какбы всё компилируется ток змея не двигается. я не могу понять как заставить её двигаца)

Последний раз редактировалось Stilet; 15.10.2009 в 13:16.
vetalij вне форума Ответить с цитированием
Старый 15.10.2009, 13:08   #2
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

Создавай таймер и перемещай в зависимости от направления движения. А при нажатии на клавиши меняй это направление.
mYziK вне форума Ответить с цитированием
Старый 15.10.2009, 13:10   #3
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от mYziK Посмотреть сообщение
Создавай таймер и перемещай в зависимости от направления движения. А при нажатии на клавиши меняй это направление.
а поконкретней можна. пимерный код. просто мы еще такого не проходили.

Последний раз редактировалось vetalij; 15.10.2009 в 13:13.
vetalij вне форума Ответить с цитированием
Старый 15.10.2009, 16:21   #4
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

Я сейчас на работе, некогда. Вечерком или завтра могу полностью описать как я делал (правда я на Turbo C++ писал, но принцип перемещения и организации змейки так же подходит и сюда (и нравится мне )
mYziK вне форума Ответить с цитированием
Старый 16.10.2009, 21:42   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

не вижу таймера и обработчиков нажатия кнопок
counter вне форума Ответить с цитированием
Старый 16.10.2009, 22:25   #6
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
не вижу таймера и обработчиков нажатия кнопок
ну так помоги. допишы если не сложно.
vetalij вне форума Ответить с цитированием
Старый 16.10.2009, 22:41   #7
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

учтанови таймер
SetTimer(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc);

lpTimerFunc=NULL

и в WndProc лови WM_TIMER, в конце работы программы убей таймер KillTimer(HWND hWnd,UINT_PTR uIDEvent);

ps. Было бы неплохо увидеть, что из себя представляет твоя змейка (структурка какая или просто координаты на перемещение). Ну и чтобы змейка двигалась нужно изменять ее координаты в WM_TIMER и при нажатии кнопок-стрелок...
counter вне форума Ответить с цитированием
Старый 16.10.2009, 22:51   #8
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
По умолчанию

вот всё из файла .cpp
http://programmersforum.ru/attachmen...1&d=1255718991
Вложения
Тип файла: txt Snake.txt (8.0 Кб, 162 просмотров)
vetalij вне форума Ответить с цитированием
Старый 16.10.2009, 23:24   #9
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

примерный план действий


0. #define ID_TIMER 1000

1. В InitInstance после создания окна установи таймер SetTimer(hWnd,ID_TIMER,200,NULL); , где 200 - время срабатывания в милисекундах, hWnd лучше передавать в InitInstance через
параметр.

2. В WinMain перед return msg.wParam; таймер можно "убить"

KillTimer(hWnd,ID_TIMER);

3. В WndProc ловим сообщения от таймера

Код:
switch (message) 
{
    case WM_TIMER: 
  	            break;

4. DrawField, я так понял рисует и игровое поле и змейку, а RECT rt - это координаты частей поля?

тогда в WM_TIMER прописывай изменение величины rt в зависимости от текущщего направления движения змейки.

Например:

Код:
switch (message) 
{
    case WM_TIMER: switch(move)
                            {
                                  // если движется вверх - изменять координаты, пока не упрется в стенку или еще что-нибудь
                                  case top:   rt.top--;      
                                                  rt.bottom--;
                                                  break;
                                  ...
                              }  
                              SendMessage(hWnd,WM_PAINT,0,0); 
                              break;

5. Для кнопок - тот же принцип

Код:
case WM_KEYDOWN: switch (wParam)
{
     case VK_LEFT:    rt.left--;  // примерно
                             break;

}

Последний раз редактировалось counter; 16.10.2009 в 23:29.
counter вне форума Ответить с цитированием
Старый 16.10.2009, 23:37   #10
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
По умолчанию

спс. буду пробовать.
vetalij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дописать БД Лорд_Оледжан Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2009 22:14
Дописать... Lemo Помощь студентам 14 14.10.2008 20:49
Помогите дописать ShnapS Паскаль, Turbo Pascal, PascalABC.NET 4 28.05.2008 21:08
Помогите дописать прогу на делфи fox7 Помощь студентам 3 16.06.2007 23:44