Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/54: Рейтинг темы: голосов - 54, средняя оценка - 4.94
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4

Крестики-нолики

08.10.2009, 21:05. Показов 10240. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пытаюсь сделать крестики нолики...
Вот что есть на данный момент
Visual Basic
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
Dim Arr
 
 
 
Private Sub Command1_Click()
    If Command1.Caption = "" Then
        Command1.Caption = "X"
        Arr(0) = "X"
    Else
        Info
    End If
    
End Sub
 
Private Sub Command10_Click()
Restart
End Sub
 
Private Sub Form_Load()
Arr = Array("f", "f", "f", "f", "f", "f", "f", "f", "f")
    Command1.Caption = ""
    Command2.Caption = ""
    Command3.Caption = ""
    Command4.Caption = ""
    Command5.Caption = ""
    Command6.Caption = ""
    Command7.Caption = ""
    Command8.Caption = ""
    Command9.Caption = ""
End Sub
Function Restart()
Arr = Array("f", "f", "f", "f", "f", "f", "f", "f", "f")
    Command1.Caption = ""
    Command2.Caption = ""
    Command3.Caption = ""
    Command4.Caption = ""
    Command5.Caption = ""
    Command6.Caption = ""
    Command7.Caption = ""
    Command8.Caption = ""
    Command9.Caption = ""
End Function
Function Info()
 a = MsgBox("Занята", vbInformation, "******")
End Function
Function Computer()
Dim Gets As Integer
 
Gets = False
Dim Number
Number = 0
 
    Do While Gets = True
        If Arr(Number) = "f" Then
            Arr(Number) = "O"
            Gets = True
        Else
        Number = Number + 1
    Loop
End Function
Есть несколько вопросов... Для начала. Видите функцию Computer(). Как мне на кнопке написать 0?? Command+Number+.Caption = ""
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2009, 21:05
Ответы с готовыми решениями:

Крестики-нолики
Программа практически сделана, но я не знаю как добавить игру со вторым игроком , по этому прошу у вас о помощи

Крестики-нолики
Всем привет, недавно начал изучать VB, решаю не простые, но и не сложные задачи. Хочу попробовать сделать крестики-нолики. Я понимаю, как...

Крестики-нолики с компьютером
Помогите, пожалуйста) У меня прога крестики-нолики, рассчитанная на 2х игроков. На ее основе нужно сделать версию игры с компьютером. Как...

9
 Аватар для BasicMan
19318 / 2626 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
08.10.2009, 21:12
dimjan4, у тя какой ВБ?
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
08.10.2009, 22:09  [ТС]
У меня VB 6
0
 Аватар для BasicMan
19318 / 2626 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
09.10.2009, 00:13
dimjan4, используй массив элементов кнопок с одинаковым названием, изменяя только свойство свойство Index
тогда вполне достаточно будет написать
Visual Basic
1
Command1(Number).Caption = ""
в скобках как раз и будет указан индекс
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
09.10.2009, 17:09  [ТС]
А как для каждого квадрата прописать действие?? Просто я кликаю на первый, выводит место для кода:
Visual Basic
1
2
Private Sub bt_Click(Index As Integer)
End Sub
Мне для каждого клика надо прописать :
Visual Basic
1
2
3
Private Sub bt_Click(Index As Integer)
        X (0)'Функция
End Sub
В скобках индекс кнопки
0
 Аватар для BasicMan
19318 / 2626 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
09.10.2009, 17:13
Index и указывает какой квадрат щас обрабатывается

Добавлено через 2 минуты
чотокактотак:
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub bt_Click(Index As Integer)
    If bt(Index).Caption = "" Then
        Command(Index).Caption = "X"
        Arr(Index) = "X"
    Else
        Info
    End If
    
End Sub
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
09.10.2009, 18:04  [ТС]
И последний вопрос, как я думаю, как сделать игру компьютера...чтобы он ставил O , вот что у меня:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function Computer()
Dim Gets As Integer
Gets = False
Dim Number
Number = 0
 
    Do While Gets = True
        If bt(Number).Caption = "" Then
          bt(Number).Caption = "O"
          Gets = True
        Else
            Number = Number + 1
        End If
        
    Loop
End Function
Только видите, очень предсказуемый ответ компьютера...он же будет в таком режиме проверять:
1 кнопка 2 кнопка 3 кнопка
4 кнопка 5 кнопка 6 кнопка
7 кнопка 8 кнопка 9 кнопка

То есть если мы поставели крестик на 1 кнопку, компьютер поставит на 2 нолик...
0
 Аватар для BasicMan
19318 / 2626 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
09.10.2009, 18:14
Цитата Сообщение от dimjan4 Посмотреть сообщение
очень предсказуемый ответ компьютера
и что?
Крестики-нолики по тупизне стоит на втором месте, сразу после перетягивания каната.


лучшеб шашки или шахматы программировал
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
09.10.2009, 18:29  [ТС]
это моя первая серьёзная программа...просто можете сказать какой алгоритм игры компьютера...
0
 Аватар для BasicMan
19318 / 2626 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
09.10.2009, 18:42
dimjan4, я не про программирование )
а ваще почитай
это

Классический вариант

Выигранная партия в крестики-нолики


Игроки по очереди ставят на свободные клетки поля 3х3 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 3 своих фигур по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает игрок, ставящий крестики.

Обычно по завершении партии выигравшая сторона зачёркивает чертой свои три знака (нолика или крестика), составляющих сплошной ряд.

Анализ

Классические «крестики-нолики» на поле 3x3 не представляют никакого практического интереса (разве что для маленьких детей, как начальный этап обучения логическим играм, или в качестве несложного задания по программированию для студенческой лабораторной работы) — общеизвестен алгоритм, который при правильной игре гарантирует ничью любой стороне, а при ошибке противника позволяет выиграть. Таким образом, игра находится в состоянии «ничейной смерти».

Перебор всех возможных ходов:

* За крестики
o Сделать первый ход в центральное поле.
o Противник может ответить ходом либо в угол, либо на сторону поля.
+ Если противник ответил ходом в угловое поле — сходить в ответ в соседний угол.
+ Противник будет вынужден пойти в противоположный угол, чтобы на следующем ходу не проиграть.
+ Дальнейшие ходы делаются так, чтобы блокировать построение тройки противником. — Ничья.
o Если противник ответил ходом на сторону — он проиграл. Следует ответить ходом в один из двух несоседних углов.
+ Противник будет вынужден пойти в противоположный угол, чтобы на следующем ходу не проиграть.
+ Сходить в угол, соседний с предыдущим, так, чтобы крестики образовали треугольник — получится «вилка», позволяющая следующим ходом построить тройку двумя способами.
+ Как бы ни ответил противник, следующим ходом строится одна из троек. — Выигрыш.
* Или:
o Сделать первый ход в угол.
o Противник может ответить либо ходом на сторону, либо ходом в угол, либо ходом в центр.
+ Если противник ответил ходом на сторону, он проиграл. Следует ответить ходом в центр, сводя к предыдущей стратегии. — Выигрыш.
o Если противник ответил ходом в угол, он вновь проигрывает. Следует ответить ходом в любой из оставшихся углов.
+ Противник будет вынужден блокировать угрозу, следующим ходом нужно занять последний угол, что дает вилку. — Выигрыш.
o Если противник ответил ходом в центр, то нужно занять угол противоположный первому углу. Противник может ответить либо ходом на сторону, либо ходом в угол.
+ Если противник ответил ходом в угол, он проиграл — следует немедленно занять другой угол, блокируя тройку противника и образуя свою вилку. — Выигрыш.
+ Если противник ответил ходом на сторону, то следующие ходы строятся так, чтобы блокировать тройки соперника — Ничья.

* За нолики.
o Если противник сходил первым ходом в центр, ответить ходом в любой из углов, затем каждым следующим ходом блокировать возможность построения противником очередной тройки, при возможности выбора предпочитая ходы в углы. — Ничья.
o Если противник сходит первым ходом не в центр, ответить ходом в центр. Если ответным ходом противник займёт два противоположных угла, ответить ходом на сторону. Затем каждым следующим ходом блокировать возможность построения противником очередной тройки, при возможности выбора предпочитая ходы в углы. — Ничья.

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

Дерево игровых ситуаций

Полное дерево игровых ситуаций для игры крестики-нолики, где игрок за "крестики" ходит первым и поступает максимально рационально (по приведенному выше алгоритму), а игрок за "нолики" может поступать как угодно (причем приведено по одной вершине для рационального и для нерационального поступка, т.е. любого другого), состоит из 50ти узлов.

Обобщения
Более длинные линии

Можно рассматривать игру, в которой победителем считается игрок, первым построивший n\geqslant 3 одинаковых знаков на достаточно большом для этого прямоугольном поле. При этом можно ограничить поле каким-нибудь размером (начиная с n\times n), либо вовсе не ограничивать (в этом случае говорят о «бесконечном» поле)

Игра до 4 одинаковых знаков на бесконечном поле неинтересна, ибо начинающий довольно быстро строит «вилку» и выигрывает. Игра до n\geqslant 6 также неинтересна из-за «ничейной смерти». Существуют стратегии, не дающие противнику построить нужную линию никогда. Однако при n = 5 игра становится намного содержательнее. Такой вариант имеет специальное название — гомоку.

Основной победной тактикой при игре на бесконечном поле считается построение пересечений («вилок»), которые не дают противнику возможности блокировать все возможные пути построения пятёрки. Чтобы не проиграть, необходимо своевременно прерывать линии противника длиной в три фигуры.

Практика показала, что при равных правилах для игроков тот, кто делает первый ход, имеет преимущество, позволяющее при достаточно квалифицированной игре одержать победу. Чтобы сохранить интерес к игре, в гомоку были введены ограничения для играющего чёрными — ему запрещено строить ряд структур, полученная игра стала называться рэндзю и по ней до сих пор проводятся международные турниры.

Модификация поля

Увеличение размера поля уже обсуждалось выше. Самым простейшим, но увеличивающим тактическое богатство игры, является добавление одной клетки вдоль одной из сторон поля 3х3.

Другим вариантом является изменение топологии поля. Например, можно считать противоположные стороны поля склеенными, образуя при этом либо поверхность цилиндра или тора, либо проективную плоскость.

Обмен значков

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

Изменение условия выигрыша

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


это из вики
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2009, 18:42
Помогаю со студенческими работами здесь

Крестики нолики: как сделать выигрышные комбинации
Добрый вечер! Начал писать крестики нолики. Использую два изображение(крестик и нолик), но с разными индексами. Не могу сделать выигрышные...

Создание игры крестики нолики на поле произвольного размера
Всем привет! Столкнулся с такой проблемой: Необходимо сделать поле для игры в крестики нолики произвольного размера. И все бы ничего, но я...

Игра Крестики - нолики: реализовать выбор размера игрового поля
Привет всем. Это игра крестики нолики, играть можно в режиме 3х3. А можно сделать, чтобы был выбор режима , например 3х3, 5х5, 9х9. Если...

Крестики Нолики 4x4: как научить компьютер "играть"
Всем привет! Я пока еще только начинаю программировать, поэтому обращаюсь к вам, может вы поможете. Вот хотел спросить. Не подскажете...

Крестики-нолики: плохо прорисовываются "нолики"
Я, наверное, всех уже достал своей игрой, но я опять напоролся на подводный камень. Игра - крестики-нолики. Баг - нолики рисуются как-то...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru