Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478

Крестики-нолики (в классах) - Правильно ли структурно написана программа

08.05.2015, 15:34. Показов 2489. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//main.cpp
#include<iostream>
#include<windows.h>
#include"board.h"
#include"BoardView.h"
 
using namespace std;
 
int main()
{
setlocale(LC_ALL,"Rus");
Board b;
View h(&b);
h.StartGame();
  Sleep(2000);
  system("pause");
  return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//board.h
#ifndef board
#define board
//Как программа расположенна в памяти,кто ходит,
//кто выграл,что в каждой ячейки.
 
class Board
{
private:
    char b[3][3];
    static int counter;
public:
    Board();
    ~Board();
    bool makeMove(char x,int sign);//метод для занесения хода игрока.
    bool WhoWin(int x);            //Метод для выявления результата игры
    char GetCell(int x,int y);     //метод для вывода конкретной ячейки игрового поля.
    bool sms();                    //вспомогательный метод для вывода инфы про ошибку
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//BoardView.h
#ifndef BoardView
#define BoardView
#include"board.h"
//графический интерфейс,ввод данных.
class View
{
 private:
    Board * boar; 
    static int sign;   //счетчик для определения кто ходит 'X' или 'O'
    void show();       //выводит доску
    void star_show();  //начальное приветствие
 public:
    View(Board * b);
    ~View();
    void StartGame();  //главный метод для взаимодействия с играками!  
};
#endif
Добавлено через 33 секунды
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
//board.cpp
#include<iostream>
#include<iomanip>
#include"board.h"
 
using namespace std;
Board::Board()
{
      char c=(char)49;
for(int i=0;i<3;i++)    
    for(int j=0;j<3;j++)
        b[i][j]=c++;
}
Board::~Board()
{}
char Board::GetCell(int x,int y)
{
 return b[x][y];
}
bool Board::makeMove(char x,int sign)
{
bool res=true;
char simvol;
    if (sign==0)
       simvol='x';
    else
       simvol='o';
switch(x)
    {
case('1'):if (b[0][0]!='x'&&b[0][0]!='o'){b[0][0]=simvol;break;} else {res=sms();break;}
case('2'):if (b[0][1]!='x'&&b[0][1]!='o'){b[0][1]=simvol;break;} else {res=sms();break;}
case('3'):if (b[0][2]!='x'&&b[0][2]!='o'){b[0][2]=simvol;break;} else {res=sms();break;}
case('4'):if (b[1][0]!='x'&&b[1][0]!='o'){b[1][0]=simvol;break;} else {res=sms();break;}
case('5'):if (b[1][1]!='x'&&b[1][1]!='o'){b[1][1]=simvol;break;} else {res=sms();break;}
case('6'):if (b[1][2]!='x'&&b[1][2]!='o'){b[1][2]=simvol;break;} else {res=sms();break;}
case('7'):if (b[2][0]!='x'&&b[2][0]!='o'){b[2][0]=simvol;break;} else {res=sms();break;}
case('8'):if (b[2][1]!='x'&&b[2][1]!='o'){b[2][1]=simvol;break;} else {res=sms();break;}
case('9'):if (b[2][2]!='x'&&b[2][2]!='o'){b[2][2]=simvol;break;} else {res=sms();break;}
default:cout<<"Error!\nНеверный ввод!Повторите!\n";res=false;
    }
     return res;
}
bool Board::WhoWin(int  sign)                                                                        
{
++counter;                                                                               //00-01-02      
  if((b[0][0]==b[1][1]&&b[0][0]==b[2][2])||(b[0][2]==b[1][1]&&b[0][2]==b[2][0]))         //10-11-12
   {   if (sign==0)                                                                      //20-21-22
        {cout<<"\nВыграл Крестик!\nпо диагоноли!\n";return true;}
          else
        {cout<<"\nВыграл Нолик!\nпо диагоноли!\n";return true;}
   }
  if((b[0][0]==b[0][1]&&b[0][0]==b[0][2])||(b[1][0]==b[1][1]&&b[1][0]==b[1][2])||(b[2][0]==b[2][1]&&b[2][0]==b[2][2]))
 {     if (sign==0)
        {cout<<"\nВыграл Крестик!\nпо горизонтали!\n";return true;}
       else
        {cout<<"\nВыграл Нолик!\nпо горизонтали!\n";return true;}
 }
  if((b[0][0]==b[1][0]&&b[0][0]==b[2][0])||(b[0][1]==b[1][1]&&b[0][1]==b[2][1])||(b[0][2]==b[1][2]&&b[0][2]==b[2][2]))
 {     if (sign==0)
         {cout<<"\nВыграл Крестик!\nпо вертикали!\n";return true;}
       else
         {cout<<"\nВыграл Нолик!\nпо вертикали!\n";return true;}
 }
  if(counter==9){
      cout<<"\nНичья!\n";return true;}
  return false;
}
bool Board::sms()
{
 //system("cls");
 
 cout<<"Error!\Вы ставите в занятую клетку!!!\n";
 return false;
}
int Board::counter=0;
Добавлено через 1 минуту
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
//BoardView.cpp
#include<iostream>
#include<iomanip>
#include"BoardView.h"
 
using namespace std;
 
View::View(Board * b)
{
 boar=b;
}
 
void View::show()
{
    for(int i=0;i<3;i++){   
     for(int j=0;j<3;j++)
        cout<<setw(3)<<boar->GetCell(i,j);
    cout<<endl;
    }
}
View::~View()
{}
void View::StartGame()
{
char x;
bool ui,game=false;
star_show();
 while(game!=true)
  {
    if(sign==0)          //конструкция которая пропускается если НОЛИК не походил правильно
      {
       cout<<"\nХодит Крестик!\n"<<"Введите цифру:";
       cin>>x;
       ui=boar->makeMove(x,sign);
        if(ui==false)
         continue;
       system("cls");
       show();
       game=boar->WhoWin(sign);
       if(game==true)
          break;
       ++sign;
     }
   cout<<"\nХодит Нолик!\n"<<"Введите цифру:";
   cin>>x;
   ui=boar->makeMove(x,sign);
       if(ui==false)
        continue;
   system("cls");
   show();
   game=boar->WhoWin(sign);
       if(game==true)
        break;
   --sign;
  }
}
void View::star_show()
{
 cout<<"\t\tКрестики-нолики-на двоих!!!"<<endl;
 cout<<"Введите 1 или 'y' чтобы увидеть особенности игры,\n"
       "или какойто другой ввод если знаете уже!\n";
 char y;
 cin>>y;
 if(y=='1'||y=='y'){
  cout<<"Это всем известная игра,с обычными\n"
        "правилами!Но кое что следует знать!\n";
  cout<<"Вот поле:\n";
  show();
  cout<<"Ячейки пронумерованные цифрами,\n"
        "вводите соотвецтвуюшию цыфру,\n"
        "и там появляетчся ваш знак,\n"
        "и так разберитесь кто крестик,\n"
        "а кто нолик и гов играть!\nУдачи!\n\n";
 }
 else
  show();
}
 
int View::sign=0;
Добавлено через 27 секунд
программа РАБОЧИЯ!!Но хотелось узнать правильно ли структурно написана программа!?
Ведь просто вывести двухмерный масив в 5 файлах окозалось тяжко как то=)
Про фейлы с перепутаными обязности кто ходить должен ходить знаю(не тот файл обеспечивает)...
Ну если гдето неочень хорошо написал тоже покретекуйте....

Добавлено через 2 часа 36 минут
Я думал что тапок за тапком в меня будет лететь
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2015, 15:34
Ответы с готовыми решениями:

Игра крестики-нолики в классах
Здравствуйте. Вот код написанный без классов: #include &lt;iostream&gt; //Стандартная библиотека ввода-вывода #include &lt;cstring&gt;...

Простая игра,написана на Java. Крестики/Нолики Multiplayer
Игра написана на Java.Режим игры только Muliplayer.Пробуем,тестируем. Ip - localhost Port- 22222

Пишу крестики-нолики. Что не правильно в этом коде?
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { if(textBox1-&gt;Text==&quot;1&quot;) { ...

4
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
08.05.2015, 15:55
Черный мечник, Оформление хромает, а остальное вполне прилично, пишите ещё
И почитайте что-нить отсюда
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
08.05.2015, 19:07  [ТС]
да x у меня многовато...
Пока гром не глянит,мужик не перекреститься.Так и у меня, пока не погорю на конфликте имен :black_eye.:.......
0
13 / 13 / 12
Регистрация: 11.04.2015
Сообщений: 64
08.05.2015, 20:11
Большие крестики-нолики
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
09.05.2015, 20:23  [ТС]
уже с версией 2.0.0.0 потягаться с ними смогу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.05.2015, 20:23
Помогаю со студенческими работами здесь

Программа крестики-нолики
Здравствуйте, дорогие форумчане. Представляю вашему вниманию свою попытку разработать на Паскале искусственный интеллект для игры...

Программа крестики и нолики
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;time.h&gt; #include&lt;stdlib.h&gt; #include&lt;dos.h&gt; #include&lt;math.h&gt; int main(void) { ...

Крестики-нолики - Зацикливается программа
Public Class Form3 Private intzet As Integer = 0 Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As...

Крестики-нолики. Программа не запускается
Имеется код игры в крестики-нолики (скачанный). Запускаю через Delphi 7, вылетает ошибка. Подскажите, в чём проблема.

Программа крестики-нолики, исправить код
Написать программу крестики-нолики. Создана программа, но может чего-то пропустил. Не правильно работает программа. Версия у меня 2003...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru