Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 6

Морской бой

12.01.2012, 11:39. Показов 5154. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу написать игру морской бой средствами win api, но возник вопрос - каким образом определять в какую именно клетку поля произошло нажатие?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2012, 11:39
Ответы с готовыми решениями:

морской бой
#include <iostream> // cin, cout #include <clocale> // поддержка русского языка #include <conio.h> // _getch() #include...

Программирование игры "морской бой" на с++
Помогите пожалуйст, кто может. Мне нужно написать курсовую.. Нужно спрограммировать игру "морской бой" на языке С++..:help:

Консольная игра "Морской бой"
Всем здравствуйте! Вот недавно решил разработать простую консольную игру "Морской бой". Я думаю суть известна всем. Кое-что уже...

6
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
12.01.2012, 16:50
при сообщениях от мыши передаются координаты курсора
например
http://vsokovikov.narod.ru/New... ondown.htm
0
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 6
14.01.2012, 13:04  [ТС]
Значение в массиве по клику мыши не хочет меняться, подскажите в чем проблема.
Предварительно проверяю в какой столбец и строку попадает нажатие(проверка работает), потом результаты вношу вот в эту функцию которая по идее должна заполнять массив в члене класса:
C++
1
2
3
4
5
6
7
8
9
10
void MyShot(int row, int column, SeaBattle sb)
{   
    if((row!=42)&&(column!=42))
    {
    if(sb.CheckWhatInside_EnemyField(row,column)==0)  //0 - пусто
        sb.EnemySet(row,column,2);                         //2 - мимо
    if(sb.CheckWhatInside_EnemyField(row,column)==1)  //1 - корабль
        sb.EnemySet(row,column,3);                         //3 - сбит
    }
}
Потом обрабатываю сообщение о нажатии ЛКМ:
C++
1
2
3
4
5
6
7
case WM_LBUTTONDOWN:
        {   
            MouseCoordinateX=LOWORD(lParam);
            MouseCoordinateY=HIWORD(lParam);
            MyShot(CheckRow(MouseCoordinateY,sy),CheckColumn(MouseCoordinateX,sx),sb);
            InvalidateRect(hWnd,NULL,TRUE);
        }
Но значения в массиве не меняются, соответственно промах не отрисовывается. В чем мой косяк? Если нужен еще какой-то код - скину без проблем.
А, да, ЭнемиСет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class SeaBattle
{
private:
int MyField[9][9];
int EnemyField[9][9];
...
...
public:
void EnemySet(int row, int column, int x)
{
    EnemyField[row][column]=x;
};
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.01.2012, 15:13
круто, но непонятно
Цитата Сообщение от Dimitrius93 Посмотреть сообщение
void EnemySet(int row, int column, int x)
{
EnemyField[row][column]=x;
};
зачем отдельная функция если не проводишь проверки
а если колонка или строка будут больше размера массива, куда писать будем??
Цитата Сообщение от Dimitrius93 Посмотреть сообщение
int MyField[9][9];
int EnemyField[9][9];
насколько помню морской бой играют в поле 10 на 10


Цитата Сообщение от Dimitrius93 Посмотреть сообщение
CheckRow(MouseCoordinateY,sy)
что означает сия функция и чему равен sy ?

Цитата Сообщение от Dimitrius93 Посмотреть сообщение
if((row!=42)&&(column!=42))
что за волщебное число 42?
и самое главное
Цитата Сообщение от Dimitrius93 Посмотреть сообщение
void MyShot(int row, int column, SeaBattle sb)
SeaBattle sb надо передавать по ссылке
иначе у тебя создается временная структура SeaBattle в ней происходят изменения
а при выходе все забывается
0
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 6
14.01.2012, 15:23  [ТС]
Проверка в какую строчку/столбец попали проводится функциями CheckRow/CheckColumn соответственно, если клик происходит вне поля то они возвращают 42(Ответ на главный вопрос жизни, вселенной и всего такого; Мем).
sy - высота окна получаемая из сообщения wm_size.
SeaBattle sb у меня задан как глобальная переменная, или не важно и все равно передавать по ссылке?
В массивах 9 потому что номера в массиве начинаются с 0.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.01.2012, 15:30
Цитата Сообщение от Dimitrius93 Посмотреть сообщение
В массивах 9 потому что номера в массиве начинаются с 0.
ну и считай
0 1 2 3 4 5 6 7 8
размер массива 9
а последний элемент размер- 1 т.е у тебя последний элемент 8
при размере 10 будет
0 1 2 3 4 5 6 7 8 9
то что ты хотел

Цитата Сообщение от Dimitrius93 Посмотреть сообщение
SeaBattle sb
тогда зачем передавать??
функция и так его увидит

Цитата Сообщение от Dimitrius93 Посмотреть сообщение
или не важно и все равно передавать по ссылке
почитай про аргументы функций
1
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 6
14.01.2012, 15:41  [ТС]
Все, вроде заработало, спасибо) Как обычно собственные тупые косяки стопорят всю работу)
А передаю потому что функция записана в .h файле, а переменная и использование функции в .cpp. Или я как обычно ничего не понимаю?) Можно тогда ссылочку где и что почитать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2012, 15:41
Помогаю со студенческими работами здесь

Морской бой
Всем привет. Помогите пожалуйста. Задали написать игру «Морской бой». В Borlande 3.11 используя графический режим. Но признаюсь –...

C++ microsoft visual как сделать морской бои шаг за шагом?
C++ microsoft visual как сделать морской бои шаг за шагом?

Морской бой
Здравствуйте.Прошу помочь. Задался целью написать морской бой под консолью. Для начала решил рандомно заполнить поле игрока тремя...

Морской бой.
Хочу написать игру "морской бой", Но прежде чем начинать хотелось бы глянуть на рабочие исходники других подобных прог. Все, что я нашел...

Морской бой
Здравствуйте господа. Мне нужно сделать игру морской бой. Игровое поле- 10x10 Корабли на игровом поле: Четыре одноклеточных, три...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru