Pavle_nis

Slagalica

Nov 28th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Attribute VB_Name = "Form1"
  2. Attribute VB_GlobalNameSpace = False
  3. Attribute VB_Creatable = False
  4. Attribute VB_PredeclaredId = True
  5. Attribute VB_Exposed = False
  6. Dim Conn        As New ADODB.Connection
  7. Dim i           As Long
  8. Dim slova(11)   As String
  9. Dim rec         As String
  10. Dim proteklo    As Long
  11. Dim korisceno   As String
  12. Dim lastLen     As Long
  13. Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  14.     If KeyCode = 32 And Shift = 0 Then Call lblStartStop_Click
  15. End Sub
  16. Private Sub Form_Load()
  17.     Conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\" & "slagalica.mdb" & ";Persist Security Info=False")
  18.     Randomize
  19.     Me.Show
  20.     DoEvents
  21.     Call lblNova_Click
  22. End Sub
  23.  
  24. Private Sub lblIzlaz_Click()
  25.     Unload Me
  26. End Sub
  27. Private Sub lblNova_Click()
  28.     Dim rs      As New ADODB.Recordset
  29.     Dim n       As Long
  30.     Dim duzina  As Long
  31.     Dim tmp     As String
  32.     Dim ascii   As Long
  33.    
  34.     lblStartStop.Caption = "Start": Timor.Enabled = False
  35.     lblStartStop.Enabled = False
  36.    
  37.     txtInput.Text = "": txtNajduza.Text = ""
  38.     txtInput.Enabled = False
  39.    
  40.     duzina = getRandom(8, 12) 'biramo duzinu "najduze" reci
  41.    'UVEK, ali UVEK ovako otvarajte Recordset (poz za Shadowed-a ;P)
  42.    Call rs.Open("SELECT DISTINCT Reci FROM " & CStr(duzina), Conn, adOpenKeyset)
  43.     'naravno ako nameravate da koristite .RecordCount property
  44.    rs.Move getRandom(0, rs.RecordCount - 1)
  45.     rec = rs.Fields(0).Value 'ovo je nasa "najduza rec"
  46.    tmp = UCase$(rec)
  47.    
  48.     Do While Not Len(tmp) = 12
  49.         ascii = getRandom(65, 90)
  50.         Do While Not (ascii <> Asc("W") And ascii <> Asc("X") And ascii <> Asc("Q"))
  51.             ascii = getRandom(65, 90)
  52.         Loop
  53.         tmp = tmp & Chr$(ascii)
  54.     Loop
  55.    
  56.     For n = 0 To 11
  57.         lblSlovo(n).Caption = ""
  58.         slova(n) = Mid$(tmp, n + 1, 1)
  59.     Next
  60.    
  61.     shuffleArray slova 'mesamo array (vidi poslednju f-ju)
  62.    picSlova.SetFocus 'uklanjamo fokus sa textbox-a
  63.    
  64.     picProgres.Width = 0
  65.     proteklo = 0
  66.     lblPoeni.Caption = "0"
  67.     korisceno = ":"
  68.    
  69.     lblStartStop.Enabled = True
  70.    
  71. End Sub
  72.  
  73. Private Sub lblStartStop_Click()
  74.     If Not lblStartStop.Enabled Then Exit Sub
  75.     If lblStartStop.Caption = "Start" Then
  76.         i = 0
  77.         Timor.Enabled = True
  78.         lblStartStop.Caption = "Stop"
  79.         lblStartStop.Enabled = True
  80.     Else
  81.         lblSlovo(i).Caption = slova(i)
  82.         i = i + 1
  83.         If i = 12 Then
  84.             txtInput.Enabled = True
  85.             lblStartStop.Enabled = False
  86.             lblStartStop.Caption = "Start"
  87.             Timor.Enabled = False
  88.             Vreme.Enabled = True
  89.             txtInput.SetFocus
  90.         End If
  91.     End If
  92. End Sub
  93. Private Sub Timor_Timer()
  94.     Dim ascii As Long
  95.    
  96.     ascii = getRandom(65, 90)
  97.     Do While Not (ascii <> Asc("W") And ascii <> Asc("X") And ascii <> Asc("Q"))
  98.         ascii = getRandom(65, 90)
  99.     Loop
  100.    
  101.     lblSlovo(i).Caption = Chr$(ascii)
  102.     DoEvents
  103. End Sub
  104. Private Sub Vreme_Timer()
  105.     proteklo = proteklo + 1
  106.     picProgres.Width = (proteklo / 60) * picVreme.ScaleWidth
  107.     If proteklo = 60 Then 'vreme je isteklo
  108.        'ovde bi trebalo da se uradi neka forma (kao InputBox) u koju
  109.        'korisnik mora da upise rec (kao ono: "Vreme je isteklo, koja je vasa rec?"
  110.        txtNajduza.Text = rec
  111.         setInfo "Vreme je isteklo."
  112.         proteklo = 0
  113.         Vreme.Enabled = False
  114.         txtInput.Enabled = False
  115.     End If
  116.     DoEvents
  117. End Sub
  118. Private Sub txtInput_KeyPress(KeyAscii As Integer)
  119.     Dim n       As Long
  120.     Dim ima     As Boolean
  121.     Dim r       As String
  122.     Dim rs      As New Recordset
  123.    
  124.     'pretvaramo mala slova u velika (samo uppercase dozovljeno)
  125.    If KeyAscii > 96 And KeyAscii < 123 Then KeyAscii = KeyAscii - 32
  126.     If KeyAscii < 65 Or KeyAscii > 90 Then 'nije slovo
  127.        'ako je BackSpace ili Delete onda ne radimo nista (dopustamo ta dva key-a)
  128.        If KeyAscii = vbKeyBack Or KeyAscii = vbKeyDelete Then Exit Sub
  129.         If KeyAscii = vbKeyReturn Then 'korisnik je pritisnuo enter
  130.            'zaustavljamo vreme i proveravamo unetu rec
  131.            Vreme.Enabled = False
  132.             r = txtInput.Text
  133.  
  134.             If Len(r) < 2 Then
  135.                 setInfo "Takva rec ne postoji."
  136.                 lblPoeni.Caption = "0"
  137.                 GoTo proc_exit 'zasto je GoTo "losa praksa"???
  138.            End If
  139.            
  140.             Set rs = Conn.Execute("SELECT DISTINCT Reci FROM " & CStr(Len(r)))
  141.            
  142.             ima = False
  143.             Do While Not rs.EOF
  144.                 If UCase$(rs.Fields(0).Value) = r Then
  145.                     ima = True 'nasli smo rec
  146.                    Exit Do
  147.                 End If
  148.                 rs.MoveNext
  149.             Loop
  150.  
  151.             If ima Then
  152.                 'poeni: svako slovo nosi 10 poena - proteklo vreme (0-60)
  153.                lblPoeni = 10 * Len(r) - Round(((picProgres.Width / picVreme.ScaleWidth) * 60))
  154.                 setInfo "Prihvatamo vasu rec."
  155.             Else
  156.                 lblPoeni.Caption = "0"
  157.                 setInfo "Takva rec ne postoji."
  158.             End If
  159.  
  160.             picProgres.Width = 0
  161.  
  162. proc_exit:
  163.             txtNajduza.Text = UCase$(rec)
  164.         End If
  165.         KeyAscii = 0
  166.     Else 'ne dozvoljavamo slova koja nisu ponudjena i koja su vec iskoriscena
  167.        Dim k As Long
  168.         k = 0
  169. tryAgain:
  170.         ima = False
  171.         For n = k To 11
  172.             If KeyAscii = Asc(slova(n)) Then
  173.                 ima = True 'ovo slovo je ponudjeno, sada da vidimo
  174.                If InStr(1, korisceno, ":" & n & ":") > 0 Then 'da nije korisceno
  175.                    k = n + 1
  176.                     GoTo tryAgain
  177.                 Else
  178.                    korisceno = korisceno & n & ":" 'pamtimo ovaj index
  179.                End If
  180.                 Exit For
  181.             End If
  182.         Next
  183.         If Not ima Then KeyAscii = 0 'ovo slovo nije ponudjeno il je vec korisceno
  184.    End If
  185. End Sub
  186. Private Sub txtInput_Change()
  187. 'koristim Change event jer igrac moze i sa 'Cut' (iz menija) da promeni sadrzaj
  188. 'textbox-a, nemora da koristi backspace ili delete (mada ne znam ko ovo radi
  189. 'ali nikad nisi siguran - ima svakavih ljudi ;P)
  190.    Dim n   As Long
  191.     Dim k   As Long
  192.     Dim l   As Long
  193.     Dim tmp As String
  194.    
  195.     If Len(txtInput.Text) < lastLen Then 'ako je smanjena duzina
  196.        korisceno = ":"
  197.         For n = 1 To Len(txtInput.Text)
  198.             tmp = Mid$(txtInput.Text, n, 1)
  199.             l = 0
  200. findNext:
  201.             For k = l To 11
  202.                 If tmp = slova(k) Then
  203.                     If InStr(1, korisceno, ":" & k & ":") > 0 Then
  204.                         l = k + 1
  205.                         GoTo findNext
  206.                     Else
  207.                         korisceno = korisceno & k & ":"
  208.                         Exit For
  209.                     End If
  210.                 End If
  211.             Next
  212.         Next
  213.     Else
  214.         lastLen = Len(txtInput.Text)
  215.     End If
  216.  
  217. End Sub
  218. Private Sub infoTimer_Timer()
  219.     infoTimer.Enabled = False
  220.     lblInfo.Caption = ""
  221. End Sub
  222. Sub setInfo(inf As String)
  223.     lblInfo.Caption = inf
  224.     infoTimer.Enabled = True
  225. End Sub
  226. Function getRandom(min As Long, max As Long) As Long
  227.     getRandom = CLng(Int((max - min + 1) * Rnd + min))
  228. End Function
  229. Sub shuffleArray(inArray() As String)
  230. '"mesanje" sadrzaja jednog array-a
  231. 'imam jedno pitanje: kako da deklarisem ulazni parametar (inArray) tako da je
  232. 'moguce koristiti ovu f-ju za bilo koji tip array-a? ako ga deklarisem:
  233. 'inArray() As Variant, onda i array koji hocu da izmesan mora biti Variant???
  234.    Dim n       As Long
  235.     Dim k       As Long
  236.     Dim tmp     As Variant
  237.    
  238.     For n = LBound(inArray) To UBound(inArray)
  239.         k = getRandom(LBound(inArray), UBound(inArray))
  240.         tmp = inArray(n) 'prvo pamtimo n clan array-a
  241.        inArray(n) = inArray(k) 'potom ga zamenjujemom sa k clanom array-a
  242.        inArray(k) = tmp 'i zamenjujemo k clan sa n clanom (k se bira random)
  243.    Next
  244.  
  245. End Sub
Advertisement
Add Comment
Please, Sign In to add comment