|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.11.2012, 14:45 | #1 |
Форумчанин
Регистрация: 07.05.2011
Сообщений: 169
|
Тернистым путём через "Морской бой"
Собственно, кто знаком с темой Шахматной игры
то объясню вкратце: начну с морского боя, чтобы разобраться с массивами, работой массивов, классами, работой и взаимодействием классов и так далее. Я знаю, здесь есть темы других пользователей про морской бой - читала, но там нет ответа на некоторые мои вопросы. поэтому, собственно, буду выкладывать игру кусками здесь, авось, быстро пойму что к чему! |
28.11.2012, 15:09 | #2 |
Форумчанин
Регистрация: 07.05.2011
Сообщений: 169
|
Продумывая программу, я делала с пояснениями и комментариями. Из-за этого, я подумала сделать отдельные функции и глобал.переменные:
Код:
Так же хочу сказать о процессе игры: играем на 1 компьютере, сначала игрок А заполняет поле, потом игрок Б заполняет своё поле, а потом их поля хранятся как переменные, появляются два новых пустых поля и в процессе игры, каждый раз меня 1 поле (то есть, каждый игрок не видит своего поля, но он видит одно поле - куда ему надо стрелять), стреляют и программа, по идее, должна сама писать "мимо\ранил\убил". Идея пока что такая. так вот, при заполнении поля, пока что самым корявым и простым способом вот что получается: Код:
то есть, вопрос вот в чём: почему он не заменил элементы "0" на "Х", а будто новое поле нарисовал? даже если вводить другие цифры для i и j, то он всё равно такую же строчку выдаёт. Вопрос именно по этой ситуации, как проще и лучше мне не нужно, подскажите, пожалуйста, где конкретно здесь ошибка. |
28.11.2012, 17:52 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
У трёхпалубников выводится элемент только если срабатывает условие, т.е. там выводятся только сами трёхпалубники.
Предлагаю вынести строку: cout << POLEBOJA1[i1][j1] << " "; из под условия, т.е. она должна быть после трёх if. Код:
|
28.11.2012, 19:55 | #4 |
Форумчанин
Регистрация: 07.05.2011
Сообщений: 169
|
Код:
но есть одно НО - он его не двигает. Вроде бы по J выравнивает, по I не двигает. или наоборот - но он так и привязан к началу координат по I, что странно. |
28.11.2012, 20:41 | #5 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
1. Скобочки нужно расставить в условии, чтобы был правильный приоритет расчета:
Код:
|
28.11.2012, 21:18 | #6 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Несколько концептуальных и не очень замечаний.
1. Инклюды должны выглядеть скорее как-то так: Код:
2. Пары функций shipplayer и ProverkaPole - если режим "Игрок против Игрока", то нет никакого особого смысла делать по две функции. Просто сделайте по одной и передавайте в качестве аргументов поле то одного, то второго. Если "Игрок против Компьютера", тогда, конечно, есть разница. Но тогда хотя бы назовите функции, чтобы было видно, кто и что в ней делает. 3. Для создания поля игроком есть более эргономичный способ. Как это должно выглядеть: пользователь нажимает клавиши со стрелками, и согласно этим нажатиям текстовый курсор перемещается в пределах поля на одну позицию влево/вверх/вправо/вниз. При нажатии клавиши Enter клетка поля меняется на противоположную (свободна/занята), при нажатии Escape - поле считается законченным. Или можно пробел - поменять, Enter - поле закончено, Escape - отмена. Можно оставить корректность созданного таким образом поля на совести игрока, можно и сделать потом проверку на корректность. Для начала проще не заморачиваться. Теперь по поводу того, что вам для реализации этого понадобится. Во-первых, цикл пока пользователь не нажмет клавишу Escape или Enter. Во-вторых, считывать клавишу функцией getch (подключаем conio.h). В-третьих, коды клавиш: 72 - вверх 75 - влево 77 - вправо 80 - вниз 27 - Escape 13 - Enter Пробел не помню, но это просто ' '. Наконец, в-четвертых, функция gotoxy для перемещения текстового курсора (есть такая, если вы используете, например, C++ Builder, в других средах не факт что есть, но ее аналог легко написать с помощью пары функций WinAPI; в общем, функция не слишком-то переносима, и этим плоха, но в принципе это сейчас не страшно). И не забывайте проверять, не собираетесь ли вы выйти за пределы поля, нажимая в очередной раз стрелочку. Попробуйте пока сделать сами, если не получится - выложу решение, оно очень простое, но советую вам потренироваться лишний раз. 4. Вообще не стоит лишний раз заморачивать пользователя с индексацией начиная с нуля и цифрами вместо букв. Просто вычитайте единичку из того, что он ввел (от 1 до 10), а буквы можно вбить в константный массив и при вводе пользователем одной такой буквы пробегать массив в поисках введенной буквы, и работать уже с индексом найденной в массиве. Ну а можно в данном случае вообще эту проблему обойти как я написал чуть выше. Ту функцию можно использовать как для создания поля, так и для выбора куда стрелять, только немного доработать напильником.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
29.11.2012, 17:29 | #7 |
Форумчанин
Регистрация: 07.05.2011
Сообщений: 169
|
pu4koff
Код:
Код:
И тут пока читала и думала про "не трёхпалубный", пришла мысль, что он просто выводит 2 элемента и всё. Только вопрос до сих пор не понятен - почему всё в первом столбце? - ну да ладно. Мне как бы нужно сделать замену. Смотрю на четырёхпалубник - вроде уже точно так же сделала. Даже там упростила до 1 if с && и ||. а потом ещё такой момент Код:
цифры по диагонали". Ну ладно, думаю поставлю - ставлю, а у меня ничего не выводит. То есть, "старую песню запевает". Это что за чудеса?! Гром, идея отличная - будет второй версией морского боя)) хорошо, инклуды подправлю! если что, я работаю в visual studio 2010 проверила - math.h - другой вариант как ошибка Последний раз редактировалось Fanyuus; 29.11.2012 в 17:32. |
30.11.2012, 21:39 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Попробовал. Вроде работает, вроде так, как планировалось.
Код:
|
30.11.2012, 22:16 | #9 |
Форумчанин
Регистрация: 07.05.2011
Сообщений: 169
|
о боже мой, боже мой! Он работает!)))))
Только, один маленький "косяк" - после введения координат для "4", последний столбец не заполняется. Странно, ну да ладно (причём остальные заполняются). Всё, буду анализировать, в чём были ошибки. Спасибо большое! |
01.12.2012, 17:32 | #10 |
Форумчанин
Регистрация: 07.05.2011
Сообщений: 169
|
Всё, ту "проблему" я нашла,
но вот в чём вопрос - коды одинаковые, неужели это из-за того, что я присваивала 48 вместе '0'? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
создать в Паскале копию игры "Морской бой" | Керкси Фолс | Помощь студентам | 6 | 17.11.2013 13:19 |
Игра "Морской бой" на Delphi. С чего начать? | Cyxarik | Помощь студентам | 8 | 16.02.2011 10:26 |
Слабо "Морской бой" на ассемблере? =) | VenZell | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 26.05.2009 21:36 |
Расстановка кораблей в игре "Морской бой" | [MI_nor] | Общие вопросы C/C++ | 1 | 23.05.2009 00:23 |
"Морской бой" на "Турбе" | Cezar | Помощь студентам | 10 | 15.05.2007 20:28 |