Крестики-Нолики! Запутался!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Winitar
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 06.07.2006 (Чт) 20:45
Откуда: Астана

Крестики-Нолики! Запутался!

Сообщение Winitar » 21.01.2007 (Вс) 19:25

Блин я пишу крестики-нолики, балин сам запутался, что понаписал! Блин помогите кто-нить! Пока вроде всё идёт намана, но кажется это не то! Как этот код можно улучшить, и сможет закончить данный проект?
-..-.-..-.-.-.-.-.-.-.-.-.-.-.-.-.-.-..-.-.-.-.-.-.-.-..-.-.-.-..-.-.-.-..-.-.-.-.-.-.-
Короче нужны советы по поводу этого проекта!
Код: Выделить всё
Option Explicit
Public x

Private Sub Form_Initialize()
  x = 0
End Sub

Private Sub L1_Click()
L1.Caption = "X"
x = x + 1
AI
L1.Enabled = False
L1.ForeColor = RGB(255, 0, 0)
End Sub

Private Sub L2_Click()
L2.Caption = "X"
x = x + 1
AI
L2.Enabled = False
End Sub

Private Sub L3_Click()
L3.Caption = "X"
x = x + 1
AI
L3.Enabled = False
End Sub

Private Sub L4_Click()
L4.Caption = "X"
x = x + 1
AI
L4.Enabled = False
End Sub

Private Sub L5_Click()
L5.Caption = "X"
x = x + 1
AI
End Sub

Private Sub L6_Click()
L6.Caption = "X"
x = x + 1
AI
L6.Enabled = False[/code]
End Sub

Private Sub L7_Click()
L7.Caption = "X"
x = x + 1
AI
L7.Enabled = False
End Sub

Private Sub L8_Click()
L8.Caption = "X"
x = x + 1
AI
L8.Enabled = False
End Sub

Private Sub L9_Click()
L9.Caption = "X"
x = x + 1
AI
L9.Enabled = False
End Sub

И модуль:
Код: Выделить всё

[code] Option Explicit

Public Function AI()
   If Knoliki.x = 1 Then
          If Knoliki.L5.Caption = "" Then
                Knoliki.L5 = "0"
               Knoliki.L5.Enabled = False
         End If
     ElseIf Knoliki.x = 2 Then
           If Knoliki.L1 <> "" And Knoliki.L9 = "" Then
                   Knoliki.L9 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L8 = "" Then
                   Knoliki.L8 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L7 = "" Then
                   Knoliki.L7 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L6 = "" Then
                   Knoliki.L6 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L5 = "" Then
                   Knoliki.L5 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L4 = "" Then
                   Knoliki.L4 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L3 = "" Then
                   Knoliki.L3 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L2 = "" Then
                   Knoliki.L2 = "0"
           
           ElseIf Knoliki.L1 <> "" And Knoliki.L1 = "" Then
                   Knoliki.L1 = "0"
           End If
   End If
   
End Function

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Сообщение ACiD » 21.01.2007 (Вс) 21:06

лучше создать массив элементов,
легче работать будет

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 21.01.2007 (Вс) 21:13

Раз сам пишешь - сам и заканчивай. Или это лабораторная?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 22.01.2007 (Пн) 10:31

Советы:

- Я бы засунул туда графику...
- И ради новаций и мотиваций, а попросту от делать нечего, сделал бы возможность играть через сеть ну и ком порт)

зы. просто когда то давно писал крести нолики для игры через модем, но это был наверное 2000 год :wink:

Winitar
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 06.07.2006 (Чт) 20:45
Откуда: Астана

Сообщение Winitar » 23.01.2007 (Вт) 13:28

ACiDXX писал(а):лучше создать массив элементов,
легче работать будет

Пример можешь напистать? :oops:


JohnK писал(а):Раз сам пишешь - сам и заканчивай. Или это лабораторная?

Мне 15 лет! Какая лабораторная? :P :lol:

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 24.01.2007 (Ср) 17:27

У каждого контрола есть свойство Index
если оно пусто, то массива нет, если заполнено - массив имеет место быть ))
Короче, вместо L1, L2, L3
делаешь лэйбл L потом жмешь "копировать", потом вставить -
тебя спросит ВБ "Уже есть контрол L. Хотите массив?" отвечаешь "Да"
и получается L(0)
Потом еще скока хочешь раз вставляй - ВБ будет делать их с индексами...
L(0),L(1), L(2), L(3)...
теперь обрабатывать можно через формулы попроще
например - заполнить девять клеток нулями:
for x=0 to 8
L(x)="0"
next x
а вот процедура обработки события у всех контролов массива одна:
L_Click(index as integer)
т.е. по какой из клеток не кликни - выполнятся будет код именно в этой процедуре, а чтобы узнать, какая клетка именно вызвала процедуру есть аргумент Index....

На будуюшее, напоминаю, что кроме If...else..end if есть еще
select case - он хорош для работы с множеством условий, тебе он нужнее будет чем десяток ElseIf.. правда лучше будет все же без обрабатывать игоровое поле формулами а не кучей условий...

Я тут своим корявым языком изложил кусок FAQ по ВБ6... не судите меня за это, господа модераторы, не все же в поиск посылать )

это явно не лабораторная... :)

Прочитал код еще раз, и не могу не посоветовать использовать конструкцию with в случаях, когда работа ведется с одним и тем же объектом... Пример:
with Knoliki
.L(x)="0"
.L(x+1)="X"
end with

With..End With \ If..End If \ Do..Loop \ For..Next
не должны пересекать друг-друга, но могут вкладываться друг в друга...
Неверно:
With Knoliki
if a=b
...
end with
...
end if

Верно:
with Knoliki
if...
...
end if
end with

Теперь все )))

не... не все:
Public X 'переменная объявлена как Variant - тяжелый и не нужный для твоих целей тип
Public X as Integer ' А теперь явно указано, что тип данных - Integer
всегда лучше указывать в Dim \ Private \ Public тип данных через as <тип>
Кстати - у функций тоже тип данных есть, и утебя опять AI делается Variant - когда тип не указан он всегда делается Variant. Поставь public function AI() as integer например (или что там у тебя...)

Все же лучше прочитать учебник - какой-никакой, а там все это должно быть )

правлю уже 4ый раз...
function должна что-то возвращать.... иначе это должна быть ПОРОЦЕДУРА.
Public Sub AI()
И процедуре тип указывать не надо )
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 39

    TopList