Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: Alexu007 от Июнь 13, 2013, 23:35



Название: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 13, 2013, 23:35
Простенькая игрушечка с примитивной графикой, написанная непрофессионалом.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: kambala от Июнь 14, 2013, 00:06
постыдился бы такой ужас выкладывать. глаза просто «истекают кровью» при виде кода (как форматирования и стиля написания, так и проектирования), а ты еще этот проект новичкам рекомендуешь.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: m_ax от Июнь 14, 2013, 00:43
постыдился бы такой ужас выкладывать. глаза просто «истекают кровью» при виде кода (как форматирования и стиля написания, так и проектирования), а ты еще этот проект новичкам рекомендуешь.

Нормально всё) Новичкам полезно знать и видеть примеры архитектурных шыдэвров от пионеров начинающих своё изучение плюсов с Qt)

Возьми густой вишневый сок
И белый мамин плащ.
Лей аккуратно сок на плащ -
Получится пятно.
Теперь, чтоб не было пятна
На мамином плаще,
Плащ надо сунуть целиком
В густой вишневый сок.

Возьми вишневый мамин плащ
И кружку молока.
Лей аккуратно молоко -
Появится пятно.
Теперь, чтоб не было пятна
На мамином плаще,
Плащ надо сунуть целиком
В кастрюлю с молоком.

Возьми густой вишневый сок
И белый мамин плащ.
Лей аккуратно ...

Григорий Остер "вредные советы"
 

   


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 00:57
Зато работает.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: m_ax от Июнь 14, 2013, 00:58
Зато работает.
У меня не работает  :'(



Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 01:00
Почему?


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: m_ax от Июнь 14, 2013, 01:02
Почему?

Хороший вопрос))
Со скольки раз угадаете?


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 01:07
У меня всё работает, как при запуске из-под Qt, так и отдельно, при наличии необходимых библиотек ессно. У нас что, компьютеры разные, или у меня Qt кривой?


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Figaro от Июнь 14, 2013, 01:23
Сначала определитесь - зачем Вам Qt? Может проще WinAPI использовать? :)
См. MessageBeep

Остальное даже не хочется комментировать...


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 01:28
Qt creator позволяет создавать внешне симпатишные программы (с кнопками там, меню, таблицами ит.д.) излишне не заморачиваясь тонкостями языка, внутренним устройством этих самых кнопок, меню, таблиц, прогрессбаров разных.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Figaro от Июнь 14, 2013, 01:49
Мда... Qt в первую очередь кроссплатформенная библиотека (для меня)...

Да возьмите любой игровой движок и натягивайте красоту и на меню и прочее... И все редакторами и простейшими скриптами... Там и не придется "заморачиваться тонкостями языка"...

P.S. Ток плюсы незачем так уродовать :)


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Bepec от Июнь 14, 2013, 07:05
Ыть, гениально :D

Цитировать
X1 = X1 + X * X * X;

Особенно радуют комментарии :D 

Прям таки starwars вы написали.
// процедура формирует защитное поле вокруг корабля компьютера
// инициализация ГСЧ (Гигантского собакоподобного человека? :) Или все новички наизусть знают сокращение от генератора случайных чисел? :D :D :D )
// устанавливаем
    Джедай переменная Pole_Dobivan
//  ранен
//  ошибка: не мимо и не ранен. (Да пребудет с тобой сила :D )
//  поле добивания раненых человека
//  проверка - есть ли раненые: Z = 0 - нет, 1 - есть
//  массив добивания раненых (Страшный пушко, да :D )
//  убит
//  устанавливаем защитное поле вокруг убитого корабля

FINISH HIM! FATALITY!  ;D ;D ;D





Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 08:06
Ыть, гениально :D

Цитировать
X1 = X1 + X * X * X;

А тут то что не так? В X1 накапливаются иксы в 3 степени. Надо было X1 += X*X*X; - не всё ли равно?

Цитировать
Особенно радуют комментарии :D  

Прям таки starwars вы написали.
// процедура формирует защитное поле вокруг корабля компьютера
// инициализация ГСЧ (Гигантского собакоподобного человека? :) Или все новички наизусть знают сокращение от генератора случайных чисел? :D :D :D )
// устанавливаем
    Джедай переменная Pole_Dobivan
//  ранен
//  ошибка: не мимо и не ранен. (Да пребудет с тобой сила :D )
//  поле добивания раненых человека
//  проверка - есть ли раненые: Z = 0 - нет, 1 - есть
//  массив добивания раненых (Страшный пушко, да :D )
//  убит
//  устанавливаем защитное поле вокруг убитого корабля

FINISH HIM! FATALITY!  ;D ;D ;D

Комментарии я писал для себя, чтобы спустя несколько лет посмотреть на код и вспомнить, как что работает. Что в итоге и произошло: первый вариант МБ был написан аж на ассемблере на 486-м компе под DOS - я тогда ассемблер изучал. Потом был переписан на С++ builder - я билдер осваивал. Теперь пришла очередь Qt

Задачи научить новичков писать именно морские бои не ставилось. Помощь в борьбе с непонятным Qt - сигналы, слоты, перехват событий и прочая... Посмотрите, сколько вопросов в инете - как сделать это да как сделать то? А вот как - залезай в код рабочей программы и смотри, как сделано там.
 



Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Bepec от Июнь 14, 2013, 08:33
Я тебе по секрету скажу - мне твой код непонятнее кода того же Qt раза в полтора :D

И да, готовых приложений - кучи. Классных приложений с раскомментированной каждой строкой  - дофига.
Сигнал слоты и всё остальное легко читается в Шлее.

PS а мешанину выкладывать с комментариями в стиле 80-х, когда все переменные это X Y Z, помоему это просто неприлично. ;) Ну да бог вам судья :D


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: kambala от Июнь 14, 2013, 10:07
я когда расставил кораблики произвольным образом, долго не мог понять почему игра не хочет запускаться. пришлось лезть в код, чтобы узнать, что они не могут соприкасаться. о сообщениях об ошибке видимо ты никогда не слышал.

потом я охренел когда обнаружил у компа кривые кораблики. такое надо где-то указывать при расстановке кораблей.

у тебя два класса для поля игрока и компа с копипастой кода — такое чувство, что о наследовании ты не слышал.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: mutineer от Июнь 14, 2013, 10:26
Посмотрите, сколько вопросов в инете - как сделать это да как сделать то? А вот как - залезай в код рабочей программы и смотри, как сделано там.

Очень много вопросов новичков возникают от нежелания читать доку и гуглить. Серьезно считаешь что такие люди будут читать чужой код?


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: m_ax от Июнь 14, 2013, 10:31
У меня всё работает, как при запуске из-под Qt, так и отдельно, при наличии необходимых библиотек ессно. У нас что, компьютеры разные, или у меня Qt кривой?

Ну конечно же Qt кривой.. Это даже не обсуждается)


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Igors от Июнь 14, 2013, 11:28
первый вариант МБ был написан аж на ассемблере на 486-м компе под DOS - я тогда ассемблер изучал. Потом был переписан на С++ builder - я билдер осваивал. Теперь пришла очередь Qt
Ну то есть Вы "певец одной темы" - морской бой. Это проходит лейтмотивом, красной нитью сквозь все Ваше творчество  :)


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 14:24
Самый интересный способ учить программирование - сразу начинать писать программу, по ходу преодолевая возникающие трудности. Морской бой хорош тем, что там думать особо над алгоритмом не надо - сойдёт даже постой рэндом. Тем интересных мало: что-то неинтересно, а что-то слишком сложно. У меня много маленьких программок на билдере - тот же калькулятор, программа шифрования, и еще много мелочи и учебных заданий, написанных для себя. Но самая востребованная вот эта, из 2-х строчек кода состоит. Тут уж никто не обвинит в плохом стиле, планировании и неправильных имён переменных:

Код
C++ (Qt)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, LPARAM(2));
Form1 -> Close();
 
return;
}





Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Kurles от Июнь 14, 2013, 14:36
Тут уж никто не обвинит в плохом стиле, планировании и неправильных имён переменных:

Код
C++ (Qt)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, LPARAM(2));
Form1 -> Close();
 
return;
}
Обвиним: класс TForm1 и название его метода Button1Click малоинформативны  ;D


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: m_ax от Июнь 14, 2013, 14:54
Самый интересный способ учить программирование - сразу начинать писать программу, по ходу преодолевая возникающие трудности. Морской бой хорош тем, что там думать особо над алгоритмом не надо - сойдёт даже постой рэндом. Тем интересных мало: что-то неинтересно, а что-то слишком сложно. У меня много маленьких программок на билдере - тот же калькулятор, программа шифрования, и еще много мелочи и учебных заданий, написанных для себя. Но самая востребованная вот эта, из 2-х строчек кода состоит. Тут уж никто не обвинит в плохом стиле, планировании и неправильных имён переменных:


Может как способ оно и интересно.. но.. Но, как говорится - нет ничего практичнее хорошей теории.
Когда сразу без фундамента начинаешь воять нечто более сложное хеллоу ворда, без продумывания архитектуры, с поверхностным знанием самого языка, то как правило, полезный эффект от такого подхода очень сомнителен.. поскольку не редко у таких новичков складывается иллюзорное впечатление о том, что они чего то таким путём достигли(  

Вообще, я бы советовал быть более критичным не только к своему коду, но даже в первую очередь к самой архитектуре.. Это, наверное, первое, чему нужно учиться..


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 15:15
Но это для больших программ, и особенно когда пишет не один программист (который всё держит в голове). Для написания маленьких программулек то париться над архитектурой зачем? То же и с именами переменных. Есть глобальные, которые идут сквозь всю программу, доступны отовсюду - там разумеется нужны осмысленные имена. Но если переменная "служебная" внутри одной функции, не несёт общепрограммной смысловой нагрузки - нафига ей давать "большое имя"? Чем плохо X и X1? То же и с именами компонентов. Если их много, может и есть смысл переименовать, а если одна кнопка - чем плохо Button1?

Тем более архитектуру диктует сам язык программирования: вызываются слоты (обработчики прерываний) кнопок - в которых и выполняется собственно код программы.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Igors от Июнь 14, 2013, 15:30
Вообще, я бы советовал быть более критичным не только к своему коду, но даже в первую очередь к самой архитектуре.. Это, наверное, первое, чему нужно учиться..
Ах как нравится поучать набравшись std-белиберды :) Ну а как человек должен "учиться архитектуре"? Поясните на живом примере.

Но это для больших программ, и особенно когда пишет не один программист (который всё держит в голове). Для написания маленьких программулек то париться над архитектурой зачем? То же и с именами переменных. Есть глобальные, которые идут сквозь всю программу, доступны отовсюду - там разумеется нужны осмысленные имена. Но если переменная "служебная" внутри одной функции, не несёт общепрограммной смысловой нагрузки - нафига ей давать "большое имя"? Чем плохо X и X1? То же и с именами компонентов. Если их много, может и есть смысл переименовать, а если одна кнопка - чем плохо Button1?

Тем более архитектуру диктует сам язык программирования: вызываются слоты (обработчики прерываний) кнопок - в которых и выполняется собственно код программы.
Вот что мне в нем нравится - не боится высказывать свое мнение. Увы, это ненадолго, быстро научится списывать из готового как все  :'(


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Old от Июнь 14, 2013, 15:49
Ах как нравится поучать набравшись std-белиберды :)
Это точно. Поучать любят и набравшиеся чего-то и даже не набравшиеся. :)

Тем более архитектуру диктует сам язык программирования: вызываются слоты (обработчики прерываний) кнопок - в которых и выполняется собственно код программы.
Это Qt диктует, а не язык программирования.
Поэтому, на этом и не только этом форуме, есть куча тем, где осваивающих C++ просят забыть, на время освоения, Qt. И это очень правильно, IMHO.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 15:58
я когда расставил кораблики произвольным образом, долго не мог понять почему игра не хочет запускаться. пришлось лезть в код, чтобы узнать, что они не могут соприкасаться. о сообщениях об ошибке видимо ты никогда не слышал.

потом я охренел когда обнаружил у компа кривые кораблики. такое надо где-то указывать при расстановке кораблей.

На картинку, которую я выложил не глянули? И кораблики, которые при соприкосновении углами "чернеют" - не насторожили?



Цитировать
у тебя два класса для поля игрока и компа с копипастой кода — такое чувство, что о наследовании ты не слышал.
Слышал, но, честно говоря, ни разу не пользовался.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: kambala от Июнь 14, 2013, 16:53
Но это для больших программ, и особенно когда пишет не один программист (который всё держит в голове). Для написания маленьких программулек то париться над архитектурой зачем? То же и с именами переменных. Есть глобальные, которые идут сквозь всю программу, доступны отовсюду - там разумеется нужны осмысленные имена. Но если переменная "служебная" внутри одной функции, не несёт общепрограммной смысловой нагрузки - нафига ей давать "большое имя"? Чем плохо X и X1? То же и с именами компонентов. Если их много, может и есть смысл переименовать, а если одна кнопка - чем плохо Button1?
ИМХО этот абзац очень подходит для статьи «с чего начинается быдлокод»
я когда расставил кораблики произвольным образом, долго не мог понять почему игра не хочет запускаться. пришлось лезть в код, чтобы узнать, что они не могут соприкасаться. о сообщениях об ошибке видимо ты никогда не слышал.

потом я охренел когда обнаружил у компа кривые кораблики. такое надо где-то указывать при расстановке кораблей.

На картинку, которую я выложил не глянули? И кораблики, которые при соприкосновении углами "чернеют" - не насторожили?
нет, на картинку внимания не обратил — нигде ведь не написано «ознакомьтесь с правилами расстановки кораблей на скриншоте». я просто взял код, заставил его компилироваться и посмотрел на «живую» программу.

насчет черных контуров: я несколько раз случайным образом тыкнул в поле и даже не заметил, что изначально клетки становятся серые — обратил внимание только когда они уже были черные. расставил все корабли, все черное. надо вообще не давать возможность ставить следующий корабль пока есть хоть один неправильный и сообщать об этом.
Цитировать
у тебя два класса для поля игрока и компа с копипастой кода — такое чувство, что о наследовании ты не слышал.
Слышал, но, честно говоря, ни разу не пользовался.
Комментарии я писал для себя, чтобы спустя несколько лет посмотреть на код и вспомнить, как что работает. Что в итоге и произошло: первый вариант МБ был написан аж на ассемблере на 486-м компе под DOS - я тогда ассемблер изучал. Потом был переписан на С++ builder - я билдер осваивал. Теперь пришла очередь Qt
прямо даже и не знаю что сказать… конечно, если ты взял билдер (а ведь там тоже плюсы), поигрался с ним неделю-месяц и забросил программирование надолго, то еще можно понять, но если ты постоянно программируешь…


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 17:06
Я постоянно не программирую, это хобби. Многа народу любят разгадывать кроссворды, но есть немногие, которые любят их составлять. Я примерно то же, только в програмировании. Ничем не хуже собирания спичечных коробков, плюс ещё денег тратить не нада. А я вообще халяву обожаю...


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Bepec от Июнь 14, 2013, 18:15
Тогда уж точно не стоит советовать новичкам свой "хоббийный" код. ;)


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: thechicho от Июнь 14, 2013, 18:30
Вот что мне в нем нравится - не боится высказывать свое мнение. Увы, это ненадолго, быстро научится списывать из готового как все  :'(
себя вспомнили в молодости? боитесь повторения ваших ошибок)


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Июнь 14, 2013, 19:37
Тогда уж точно не стоит советовать новичкам свой "хоббийный" код. ;)
Да никому ничего я не советую. Они посмотрят и сразу поймут, как не надо делать.


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Fregloin от Декабрь 26, 2013, 19:16
надпись HOMO насторожила, решил не запускать


Название: Re: Игра "Морской Бой" с компьютером
Отправлено: Alexu007 от Декабрь 29, 2013, 21:02
Правильно сделали. Программирование опасное ремесло, осторожность прежде всего.