Форум программистов, компьютерный форум CyberForum.ru

Программа для игры в покер - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.68
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
28.02.2013, 13:15     Программа для игры в покер #1
Никак не могу понять суть ооп.
До прихода в с++ програмировал на С микроконтроллеры.
Там всё просто. Есть начало программы, и пишеш инструкции последовательно чтоб устройство работало так, как задумано. Используя регистры, прерывания и тп.

Сейчас же выучив немного С++ пытаюсь написать консольное приложение для игры в покер сам с собой.
Написал функцию сравнения рук в покере. Даже написал обьект "Автомат игры" для безлимитного холдема
для 2-10 чел. (переписывал много много раз)
Последняя редакция подкупает своей лаконичностью. В этом обьекте нет "представления" типа ников игроков, аватарок и тп. Нет функции рисования игры в консоле и ввода от пользователя ходов.

Вопрос как мне организовать программу чтоб было красиво (понятно) и расширяемо и тп. Вобщем как это делают нормальные програмисты?

Вот у меня есть main(). Это точка входа. (в визуал С++ я так её и не нашол когда пытался )
Далее по логике я создаю экземпляры классов какие мне надо в программе.

Что дальше? Бесконечный цикл ожидания когда пользователь нажмёт кнопку? И вызов соответствующих функций какихто классов?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.02.2013, 13:31     Программа для игры в покер #2
Цитата Сообщение от nefton Посмотреть сообщение
Там всё просто. Есть начало программы, и пишеш инструкции последовательно чтоб устройство работало так, как задумано
тут тоже
Цитата Сообщение от nefton Посмотреть сообщение
Используя регистры, прерывания и тп.
только goto не используй как в своём асме. И к регистрам и прерываниям никто тебе доступа не даст, когда параллельно с тобой запущено ещё несполько приложений и сама операционка Windows.

Цитата Сообщение от nefton Посмотреть сообщение
Что дальше? Бесконечный цикл ожидания когда пользователь нажмёт кнопку? И вызов соответствующих функций какихто классов?
Ну в принципе да, а что? Методы классов - те же функциии. Вообще всё зависит, например, оконное у тебя приложение или консольное.
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
28.02.2013, 13:48  [ТС]     Программа для игры в покер #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
только goto не используй как в своём асме.
Я дорос до програмирования на С там goto нету (практически)

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

Или я захочу изменить логику игры (скажем турнир сделать или игру на деньги просто или игру ботов между собой)
И чтоб при этом надо было менять минимум кода, и чтоб всё было последовательно и "лаконично"

Пытаясь решить проблему "в лоб" постоянно сталкиваюсь с одной и той же проблемой. Код растёт, читаемость (даже для автора) падает и настаёт момент когда уже ничё не понятно вообще что происходит и что должно происходить.
Уверен есть какието стандартные концепции програмирования.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.02.2013, 21:28     Программа для игры в покер #4
Цитата Сообщение от nefton Посмотреть сообщение
Но я хотел бы писать так, чтоб код был читаемым.
Я тоже. В принципе одной из задач использования ООП является в том числе избавление от таких вот жалоб, но у меня, например, это не всегда выходит. Иногда, наоборот, злоупотребление ООП и попытка построить свою собственную супергибкую архитектуру только ухудшают читаемость, если руки кривые.

Цитата Сообщение от nefton Посмотреть сообщение
Уверен есть какието стандартные концепции програмирования.
Читай про паттерны.

А вообще, даже из программирования контроллеров на чистом Си, ты должен был усвоить, что код нужно разбивать на функции, а функции и их прототипы распихивать в отдельные *.с и *.h файлы. Иногда даже этого достаточно, чтоб упростить большую программу.
Ты когда программировал контроллеры пользовался этим???
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
28.02.2013, 21:43     Программа для игры в покер #5
ринципе одной из задач использования ООП является в том числе избавление от таких вот жалоб,
хорошая шутка...
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
28.02.2013, 22:05     Программа для игры в покер #6
я лично Дейтела время от времени смотрю(при прочтении первых же глав, вы не будете совершать самые идиотские ошибки в архитектуре). Помоему суть ООП в том, чтобы описывать устройство реального мира в коде. Чтобы понять как должна работать программа, нужно понять как ведут себя объекты в реальном мире.

У Дейтела есть задачка

"Написать программку на C++ которая выводит звездочками это
Bash
1
2
3
4
5
6
7
8
9
*********      ***          *           *       
*       *    *     *       * *         ***      
*       *   *       *     *   *       *****     
*       *   *       *    *     *        *       
*       *   *       *   *       *       *       
*       *   *       *    *     *        *       
*       *   *       *     *   *         *       
*       *    *     *       * *          *       
*********      ***          *           *
как бы вы её решили?

Не по теме:

тоже начинал с микроконтроллеров.

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.02.2013, 22:23     Программа для игры в покер #7
Цитата Сообщение от XRuZzz Посмотреть сообщение
Помоему суть ООП в том, чтобы описывать устройство реального мира в коде.
Я тоже раньше так думал. Потом посмотрел, что пишут Явисты(хоть сам на Яве и не пишу). С реальными устройствами там мало что общего. Интерфейсы ради интерфейсов...
В С++ это ощущается в меньшей степени, но тоже. Особенно с распространением паттернов.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
28.02.2013, 22:44     Программа для игры в покер #8
Цитата Сообщение от nefton Посмотреть сообщение
Никак не могу понять суть ооп
И я не сразу понял. Да и понял ли? Для меня ООП- возможность конструировать собственные типы данных с операциями, которые к этим типам применяются.

Я бы так сказал: колея это только моя, выбирайтесь своей колеёй. Читай Дейтела там. Ещё кого. Брайана Оверленда прочти обязательно. Если в Си шаришь начинай там сразу со второй части, где он и объясняет ООП

Цитата Сообщение от nefton Посмотреть сообщение
Но я хотел бы писать так, чтоб код был читаемым. И к примеру если завтра я захочу написать это же приложение не консольно - то чтоб мне надо было переделать только 1 маленький фрагмент, а не весь код.
Про ввод данных могу научить.
Здесь как раз всё просто для меня по крайней мере. Пишу весь функционал на C++ с допустимостью ввода данных через файл. Ну например твой программа принимает значения: количество игроков и прочую муть. Ты сделай так, чтобы эти данный программа могла считывать с какого-нибудь файла. Например так:

C++
1
2
3
4
5
6
7
int kol_vo_igrokov= 5;
int прочая_муть= 10;
 
//ifstream if ("data.txt");
 
//if>> kol_vo_igrokov;
//if>> прочая_муть;
вот я специально закомментил эти строки, показать, что в процессе работы ты можешь вводить данные с клавиатуры или константой они пусть будут как душе угодно. Теперь я хочу прицепить к программе оконный интерфейс. Ну это совсем другая история. Я предпочитаю лепить его на C#. Но дело в том, что мне на C# в этом случае и надо-то всего навсего слепить файл с данными вот такой:

5 10
после чего запустить (сообразишь к тому времени сам, как это сделать) программу- функционал, предварительно написанный на C++ и всё. Она спокойно считает эти данные и отработает. Вот тебе и минимум переделок. Это что касается ввода данных.

Если в дальнейшем захочешь графику лепить- ну посложнее придётся.

А вообще действительно раз о Дейтеле так отзываются, может стоить прочесть? Я вот например берусь за проект- вроде понятна архитектура, а потом по 10 раз переделываю. Надо тоже прочесть как-то.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
28.02.2013, 22:49     Программа для игры в покер #9
Интересно программировать микроконтроллеры на C++

например сделать какого нибудь робота, и описывать класс Hands например.

Добавлено через 3 минуты
и вживую наблюдать как класс работает, а не в памяти
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
01.03.2013, 17:07  [ТС]     Программа для игры в покер #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А вообще, даже из программирования контроллеров на чистом Си, ты должен был усвоить, что код нужно разбивать на функции, а функции и их прототипы распихивать в отдельные *.с и *.h файлы. Иногда даже этого достаточно, чтоб упростить большую программу.
Ты когда программировал контроллеры пользовался этим???
Разумеется. Всё по отдельным файлам (но файлов уже 10шт и скоро вырастит это дело в разы) Надо будет их группировать по папкам (если такое возможно)
Функции и данные максимально сгрупированы по классам. И нет повторяющегося кода нигде.
Если б мой Visual C++ не позволял сворачивать функции - то я б пол дня только искал чтото.
Незнаю как посчитать кол-во строк кода, Но его много И взял себе за правило очень хорошо и русским языком коментировать свои мысли при написании кода (по крайней мере того что пишу основательно). При этом кстати вылазит много ошибок логических, да и понимание того что пишу усваивается лутше.

Для себя уяснил 2 вещи.
1. Моя конечная задача - это не работающая программа (как я думал раньше). Ведь та программа которую счас пишу мне вообще не надо. Я ведь её и пишу то для отладки "кирпичиков". А потом я буду писать другую/е программы из тех кирпичиков что отлажу. Так вот моя конечная цель - облегчить себе жизнь в будующем, чтоб у меня было достаточно простых, понятных, отлаженых кирпичиков для написания легко и быстро будующих программ по покеру (чтоб я там ни придумал)

2. Нельзя смешивать по возможности (в одном классе/файле/функции) те части которые предполагается когдато менять и те части которые отлажены, работают и их менять при апгрейдах программы или написании подобных программ не предполагается.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
01.03.2013, 18:18     Программа для игры в покер #11
При разработке архитектуры приложения, нужно учитывать не только программирование.
Кроме паттернов, которые здесь упоминали нужно учиться анализировать предметную область(для этого существует системный анализ и требования к ПО), методологии программирования(RUP, XP и др), структуру БД, многопоточность и т д. Сейчас в мире для графического представления архитектуры используют UML (так как у русских нету альтернативы на этот счет).

Ну и поскольку вы не ответили на вопрос по задаче на всякий случай расскажу вам свою идею.

На картинке 4 объекта, а вовсе не 9 строчек, как может показаться. То есть как минимум у нас будет 4 класса для каждого типа фигур и как следствие один класс который обобщает все 4 фигуры - класс Figures. Это пример ситуации когда может пригодиться наследование.

В общем для гибкости приложения у меня получилось 17 классов.

Конечно сразу написать хорошую архитектуру не получится, для любого(долгоживущего) приложения требуется периодический рефакторинг(побочный процесс для ООП)
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
01.03.2013, 19:30  [ТС]     Программа для игры в покер #12
Цитата Сообщение от XRuZzz Посмотреть сообщение
Ну и поскольку вы не ответили на вопрос по задаче
Ок, в украине счас 16-24. пошол рисовать оте картинки классами. чуть позже выложу что получилось.

Добавлено через 53 минуты
17-17

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
// figures.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "c_Figure.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    //Создаём наши фигурки (4 шт)
    c_Figure fig1(9,9);
    c_Figure fig2(9,9);
    c_Figure fig3(9,9);
    c_Figure fig4(5,9);
/* 
*********      ***          *           *       
*       *    *     *       * *         ***      
*       *   *       *     *   *       *****     
*       *   *       *    *     *        *       
*       *   *       *   *       *       *       
*       *   *       *    *     *        *       
*       *   *       *     *   *         *       
*       *    *     *       * *          *       
*********      ***          *           *  
*/
 
    //Заполняем
    fig1.Fill("*********",0);
    fig1.Fill("*       *",1);
    fig1.Fill("*       *",2);
    fig1.Fill("*       *",3);
    fig1.Fill("*       *",4);
    fig1.Fill("*       *",5);
    fig1.Fill("*       *",6);
    fig1.Fill("*       *",7);
    fig1.Fill("*********",8);
    
    fig2.Fill("  *****  ",0);
    fig2.Fill(" *     * ",1);
    fig2.Fill("*       *",2);
    fig2.Fill("*       *",3);
    fig2.Fill("*       *",4);
    fig2.Fill("*       *",5);
    fig2.Fill("*       *",6);
    fig2.Fill(" *     * ",7);
    fig2.Fill("  *****  ",8);
    
    fig3.Fill("    *    ",0);
    fig3.Fill("   * *   ",1);
    fig3.Fill("  *   *  ",2);
    fig3.Fill(" *     * ",3);
    fig3.Fill("*       *",4);
    fig3.Fill(" *     * ",5);
    fig3.Fill("  *   *  ",6);
    fig3.Fill("   * *   ",7);
    fig3.Fill("    *    ",8);
 
    fig4.Fill("  *  ",0);
    fig4.Fill(" *** ",1);
    fig4.Fill("*****",2);
    fig4.Fill("  *  ",3);
    fig4.Fill("  *  ",4);
    fig4.Fill("  *  ",5);
    fig4.Fill("  *  ",6);
    fig4.Fill("  *  ",7);
    fig4.Fill("  *  ",8);
 
    //Рисуем
    for (int i=0; i<9; i++){
        printf("%s  %s  %s  %s\n",fig1.GetRow(i), fig2.GetRow(i), fig3.GetRow(i), fig4.GetRow(i));
    }
 
 
 
    int t=0;
    scanf("\nend%d",t);
    return 0;
}
Файл заголовков (по совместительству с функциями)

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
#include "stdafx.h"
 
class c_Figure
{
public:
    c_Figure(unsigned char lenght, unsigned char height);
    void Fill(char* source, unsigned char row);
    void Clear();
    char* GetRow(unsigned char row);
private:
    unsigned char lenght;
    unsigned char height;
    char data[20][20]; //C динамическими массивами неумею, надо учится
};
 
c_Figure::c_Figure(unsigned char p_lenght, unsigned char p_height){
    lenght=p_lenght;
    height=p_height;
    Clear();
}
 
void c_Figure::Clear(){
    for (int i=0;i<20; i++) for (int j=0; j<20; j++) data[j][i]=0;
    return;
}
 
void c_Figure::Fill(char* source, unsigned char row){
    for (int i=0; i<lenght; i++) data[row][i]=source[i];
    return;
}
 
char* c_Figure::GetRow(unsigned char row){
    return &data[row][0];
}
Добавлено через 12 минут
Цитата Сообщение от XRuZzz Посмотреть сообщение
В общем для гибкости приложения у меня получилось 17 классов.
17 классов... имхо это явно перебор.
Всё думаю зависит от целей зачем мы пишем. О! тоесть получается невозможно ответить на вопрос
"какой подход к написанию оптимален в данной ситуации" без подробного описания ситуации.
И не просто приложения, а всей жизни приложения начиная от нашей задумки и заканчивая нашей смертью приложения когда о нём все забудут.
И при выборе того КАК мы будем програмировать мы учитываем только чтоб нам (или другому) было максимально просто и быстро сделать свою работу (не только сдачу проекта, но и последующего сопровождения, апгрейда).
Вот например с этими картинками.
если задача нарисовать - то однозначно 9 строчек
если потом предвидится както работать с этими или подобными фигурками - то надо усложнять

Вобщем я понял ответ на свой вопрос в первом сообщении. Мне надо нарисовать на бумажке не приложение, его части, классы и тп. А то, что я или кто другой потом захочет с этим сделать. Варианты развития событий. И уже отсюда отталкиваться.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
01.03.2013, 19:50     Программа для игры в покер #13
freemind - хорошая программка, годная для проектирования, ну это чтоб вам бумагу не изводить)
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
01.03.2013, 22:43     Программа для игры в покер #14
ну, а теперь представьте ситуацию, что прибежал начальник и сказал, что вместо звездочек должны быть "$", а вместо пробелов ".". Вместо фигур должны быть изображены масти карт, и все они могут отображаться в произвольном порядке по 4-6 шт.. И ещё надо чтоб все фигуры могли быть разного масштаба, например такой ромбик(бубни)
C++
1
2
3
 *
* *
 *
и такой
C++
1
2
3
4
5
  *
 * *
*   *
 * *
  *
Цитата Сообщение от nefton Посмотреть сообщение
Ок, в украине счас 16-24. пошол рисовать оте картинки классами. чуть позже выложу что получилось.
...
Вобщем я понял ответ на свой вопрос в первом сообщении. Мне надо нарисовать на бумажке не приложение, его части, классы и тп. А то, что я или кто другой потом захочет с этим сделать. Варианты развития событий. И уже отсюда отталкиваться.
Ну да, вроде моя мысль до вас дошла. Тока я не понимаю как человек, который писал для микроконтроллеров, может писать код, который не будет работать на микроконтроллерах.

То есть сам код хороший, кроссплатформерный, просто хотел пожелать не увлекаться особо нестандартными библиотеками студии.
смущает строчка
C++
1
#include "stdafx.h"
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.03.2013, 22:47     Программа для игры в покер #15
Цитата Сообщение от XRuZzz Посмотреть сообщение
Тока я не понимаю как человек, который писал для микроконтроллеров, может писать код, который не будет работать на микроконтроллерах.
Что-то я вообще не понял, о каком коде идёт речь?
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
01.03.2013, 23:13     Программа для игры в покер #16
вы не сможите скомпилировать класс с_Figure на компиляторе для микроконтроллера пока не уберете строчку
C++
1
#include "stdafx.h"
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.03.2013, 23:17     Программа для игры в покер #17
Цитата Сообщение от XRuZzz Посмотреть сообщение
вы не сможите скомпилировать класс с_Figure на компиляторе для микроконтроллера
он и не пытается это для микроконтроллера компилировать
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
01.03.2013, 23:20     Программа для игры в покер #18
ну STL вы же сможете скомпилировать где угодно.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.03.2013, 23:28     Программа для игры в покер #19
Цитата Сообщение от XRuZzz Посмотреть сообщение
ну STL вы же сможете скомпилировать где угодно.
я не понимаю при чём тут STL и при чём тут микроконтроллеры. Может ты ошибся разделом форума? Тут где-то обсуждали МК в другой ветке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 23:30     Программа для игры в покер
Еще ссылки по теме:

Теория игр на примере С3 из ЕГЭ по информатике. Программа, которая выдает стратегии для игры C++
C++ Программа поверх игры

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

Или воспользуйтесь поиском по форуму:
XRuZzz
01.03.2013, 23:30     Программа для игры в покер
  #20

Не по теме:

ну надеюсь ТС меня поймёт

Yandex
Объявления
01.03.2013, 23:30     Программа для игры в покер
Ответ Создать тему
Опции темы

Текущее время: 23:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru