Quiz VBS - nie działa odpowwiedź "nie"


(12Bernard12) #1

Siema.

Ostatnio chciałem wykorzystać zwykłe komunikaty Windowsa do stworzenia mini-quizu. Wszysto szło dobrze do czasu aż pojawiały się błędne odpowiedzi po których program miał się wyłączać, a pracował dalej. Wczoraj ogarnąłem to i gdy odpowiedź prawidłowa to "tak" program działa, a pi wybraniu odpowiedzi złej ("nie") wyłącza się. Pojawił się kolejnu problem. Jak zrrobić coś takiego:

Czy FC Barcelona to polski klub? <--- pytanie

Tak <--- zła odpowiedź, program się wyłącza.

Nie <--- dobra odpowiedź, pojawia się kolejne pytanie.

Oto mój sktypt:

odp = msgbox("Czy chcesz zacząć gre?", vby

if odp =6 then

msgbox"Za chwile pojawi się pierwsze pytanie."

odp = msgbox("Czy Motul to firma olejowa?", vby

if odp =6 then

msgbox"Gratulacje, to poprawna odpowiedź."

else

msgbox"Niestety, to zła odpowiedź. Program zostanie zamknięty."

end if

else

msgbox"Program zostanie zamknięty"

end if

Gdyby był ktoś łaskawy i wytłumaczył mijak to zrobić i ewentualnie dodał takie pytanie byłbym wdzięczny.

Ps. Chyb to już pisałem, ale piszę na VBDcript (.vbs) i na Win7.


(floyd) #2

Możesz użyć pętli ‘for’ i funkcji wyboru ‘case’. Jeżeli program ma się nie kończyć po udzieleniu zlej odpowiedzi to usuń polecenie: Exit For

liczbapytan = 3:PoprawnychOdpowiedzi=0:vby=4
odp = MsgBox("Czy chcesz zacząć gre?", vby)
If odp = 6 Then
For i = 1 To liczbapytan
Select Case i
Case 1
odp = MsgBox("Czy Motul to firma olejowa?", vby)
If odp = 6 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
Case 2
odp = MsgBox("Czy Polska należy do UE?", vby)
If odp = 6 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
Case 3
odp = MsgBox("Czy Polska leży w Ameryce?", vby)
If odp = 7 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
End Select
Next
if poprawnychodpowiedzi>2 then
 ocena="bardzo dobry"
elseif poprawnychodpowiedzi<3 and poprawnychodpowiedzi>1 then
 ocena="dobry"
elseif poprawnychodpowiedzi<2 and poprawnychodpowiedzi>0 then
ocena="dostateczny"
else
 ocena="niedostateczny"
end if
msgbox PoprawnychOdpowiedzi & " - poprawne odpowiedzi. ocena: " & ocena
End If

Warto wiedzieć, że to samo można zaprogramować na wiele sposobów.

Tutaj druga wersja testu z wykorzystaniem tablicy dwuwymiarowej zadeklarowanej jako: dim pytanie(50,1) gdzie liczba 50 oznacza maksymalną liczbę pytań i można ją zmienić. W tym przykładzie wystarczyła by liczba 2 bo liczymy od zera czyli;0,1,2(trzy pytania). Druga liczba to oznaczenie prawidłowej odpowiedzi(tak/nie) i może przyjmować wartość 6(tak) lub 7(nie)

dim pytanie(50,1):liczbapytan=3:vby=4
odp = MsgBox("Czy chcesz zacząć gre?", vby)
if odp=6 then
pytanie(0,0)="Czy Motul to firma olejowa?":pytanie(0,1)=6
pytanie(1,0)="Czy Polska należy do UE?":pytanie(1,1)=6
pytanie(2,0)="Czy Polska leży w Ameryce?":pytanie(2,1)=7
for i=0 to liczbapytan-1
odp=msgbox (pytanie(i,0),vby)
If odp = pytanie(i,1) Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź."
End If
next
end if

Język VBS to bardzo dobry język do wstępnej nauki programowania i można go stosować nawet w szkole podstawowej ze względu na prostotę, choć można w nim też robić bardziej zaawansowanych rzeczy.

Np. skrypt do wysyłania maili:

Set objEmail = CreateObject("CDO.Message")
With objEmail.Configuration.Fields
  .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Tu adres serwera poczty wychodzącej np.smtp.poczta.onet.pl"
  .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = tu adres portu serwera np. 25
  .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
  .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Tu adres mailowy nadawcy np. kowalski@poczta.onet.pl"
  .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Tu hasło nadawcy na serwerze"
  .Update
End With
With objEmail
  .From = "Tu adres mailowy nadawcy np. kowalski@poczta.onet.pl"
  .To = "Tu adres mailowy odbiorcy np. jankowski@poczta.onet.pl"
  .Subject = "Tu tytuł"
  .TextBody = "Tu treść maila"
  .Addattachment "Tu ewentualnie adres załącznika na dysku np. C:\notka.txt"
  .Send
End With
Msgbox "OK"

A, tu adres strony dla początkujących: http://cc-team.org/index.php?name=artykuly&show=111


(12Bernard12) #3

Dzięki za odpowiedź. Zrobiłem coś takiego i mam kod taki:

liczbapytan = 3:PoprawnychOdpowiedzi=0:vby=4
odp = MsgBox("Czy chcesz zacząć gre?", vby)
If odp = 6 Then
For i = 1 To liczbapytan
Select Case i
Case 1
odp = MsgBox("Czy Motul to firma olejowa?", vby)
If odp = 6 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
 
Case 2
odp = MsgBox("Czy Polska należy do UE?", vby)
If odp = 6 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
 
Case 3
odp = MsgBox("Czy Polska leży w Ameryce?", vby)
If odp = 7 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
 
Case 4
odp = MsgBox("Czy Lego to firma produkująca klocki do zabawy?", vby)
If odp = 6 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
 
Case 5
odp = MsgBox("Czy gra Euro Truck Simulator 2 jest dziełem SCS Software?", vby)
If odp = 7 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
 
Case 6
odp = MsgBox("Czy gra Euro Truck Simulator 2 jest dziełem SCS Software?", vby)
If odp = 7 Then
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
End If
 
Case 7
odp = MsgBox("Czy Subaru jest koloru czerwonego?", vby)
If odp = 7 Then
MsgBox "Niestety, to zła odpowiedź. Program zostanie zamknięty.": Exit For
Else
MsgBox "Gratulacje, to poprawna odpowiedź.":PoprawnychOdpowiedzi=PoprawnychOdpowiedzi+1
End If
 
End Select
Next
if poprawnychodpowiedzi>2 then
 ocena="bardzo dobry"
elseif poprawnychodpowiedzi<3 and poprawnychodpowiedzi>1 then
 ocena="dobry"
elseif poprawnychodpowiedzi<2 and poprawnychodpowiedzi>0 then
ocena="dostateczny"
else
 ocena="niedostateczny"
end if
msgbox PoprawnychOdpowiedzi & " - poprawne odpowiedzi. ocena: " & ocena
End If

(floyd) #4

Po trzecim pytaniu program się wyłącza bo w pierwszej linii masz napisane: liczbapytan=3. Trzeba zmienić i wpisać taką liczbę ile jest pytań czyli w tym przypadku masz 7 pytań.Myślałem ,że sam na to wpadniesz. Druga wersja programu jest prostsza czyli mniej pisania. Przy wystawianiu oceny też musisz poprawić czyli za ile odpowiedzi ocena bardzo dobra, a za ile dobra itd. bo jest inna ilość pytań.

Twój ostatni quiz w drugiej wersji mógłby wyglądać tak (dodalem jeszcze trzeci przycisk (anuluj) kończący test w dowolnym momencie.

dim pytanie(50,1):liczbapytan=7:vby=3:poprawnychodpowiedzi=0
odp = MsgBox("Czy chcesz zacząć gre?", 4)
if odp=6 then
pytanie(0,0)="Czy Motul to firma olejowa?":pytanie(0,1)=6
pytanie(1,0)="Czy Polska należy do UE?":pytanie(1,1)=6
pytanie(2,0)="Czy Polska leży w Ameryce?":pytanie(2,1)=7
pytanie(3,0)="Czy Lego to firma produkująca klocki do zabawy?":pytanie(3,1)=6
pytanie(4,0)="Czy gra Euro Truck Simulator 2 jest dziełem SCS Software?":pytanie(4,1)=7
pytanie(5,0)="Czy nietoperz jest ptakiem?":pytanie(5,1)=7
pytanie(6,0)="Czy Subaru jest koloru czerwonego?":pytanie(6,1)=7
for i=0 to liczbapytan-1
odp=msgbox (pytanie(i,0),vby,"quiz")
if odp=2 then exit for
If odp = pytanie(i,1) Then
MsgBox "Gratulacje, to poprawna odpowiedź.":poprawnychodpowiedzi=poprawnychodpowiedzi+1
Else
MsgBox "Niestety, to zła odpowiedź."
End If
next
if poprawnychodpowiedzi>=6 then
 ocena="bardzo dobry"
elseif poprawnychodpowiedzi>=3 and poprawnychodpowiedzi<=5 then
 ocena="dobry"
elseif poprawnychodpowiedzi>=1 and poprawnychodpowiedzi<=2 then
ocena="dostateczny"
else
 ocena="niedostateczny"
end if
msgbox PoprawnychOdpowiedzi & " - poprawne odpowiedzi. ocena: " & ocena
end if

(12Bernard12) #5

Z tymi ocenami to wiem, ale nie zdecydowałem się jeszcze czy pozostawić bez :wink:

 

Dzięki za pomoc, jak z czymś jeszcze będę miał problem i google nie pomoże to napiszę :smiley:


(floyd) #6

No i polecam zastosować dodatkowo jeszcze inny rodzaj pytań oprócz typu msgbox, np.:

 

odp=InputBox("Oblicz 2+2*3= ")

if odp = “8” Then


(12Bernard12) #7

A jest jeszcze możliwość zrobienia tak, że pytania będą wybierane losowo, ale żeby się nie powtarzały :slight_smile:


(floyd) #8

Oczywiscie, że jest do zrobienia. Tu przykładzik:

Dim pytanie(256, 2):  vby = 3:poprawnychodpowiedzi=0:on error resume next
Randomize:odp = MsgBox("Czy chcesz zacząć gre?", 4)
If odp = 6 Then
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy Motul to firma olejowa?": pytanie(liczbapytan-1, 1) = 6: pytanie(liczbapytan-1, 2) = "MsgBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy Polska należy do UE?": pytanie(liczbapytan-1, 1) = 6: pytanie(liczbapytan-1, 2) = "MsgBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy Polska leży w Ameryce?": pytanie(liczbapytan-1, 1) = 7: pytanie(liczbapytan-1, 2) = "MsgBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Jakie miasto jest stolicą Niemiec?": pytanie(liczbapytan-1, 1) = "Berlin": pytanie(liczbapytan-1, 2) = "InputBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy gra Euro Truck Simulator 2 jest dziełem SCS Software?": pytanie(liczbapytan-1, 1) = 7: pytanie(liczbapytan-1, 2) = "MsgBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy nietoperz jest ptakiem?": pytanie(liczbapytan-1, 1) = 7: pytanie(liczbapytan-1, 2) = "MsgBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy Subaru jest koloru czerwonego?": pytanie(liczbapytan-1, 1) = 7: pytanie(liczbapytan-1, 2) = "MsgBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Oblicz 2+2*3=": pytanie(liczbapytan-1, 1) = "8": pytanie(liczbapytan-1, 2) = "InputBox"
liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = "Czy Lego to firma produkująca klocki do zabawy?": pytanie(liczbapytan-1, 1) = 6: pytanie(liczbapytan-1, 2) = "MsgBox"
pytan = liczbapytan: for i=0 to pytan-1:Znaki=Znaki+chr(i):next
ilepytan=liczbapytan
rem ilepytan= InputBox("Podaj liczbę pytań quizu.")
For i = 0 To IlePytan - 1
NumerPytania = Int(pytan * Rnd): WylosowanyZnak = InStr(znaki, Mid(Znaki, NumerPytania + 1, 1))
LosowyNumerPytania = Asc(Mid(Znaki, WylosowanyZnak, 1))
If pytanie(LosowyNumerPytania, 2) = "MsgBox" Then
odp = MsgBox(pytanie(LosowyNumerPytania, 0), vby, "quiz"): If odp = 2 Then Exit For
Else
odp = InputBox(pytanie(LosowyNumerPytania, 0)): If odp = "" Then Exit For
End If
If odp = pytanie(LosowyNumerPytania, 1) Then poprawnychodpowiedzi = poprawnychodpowiedzi + 1 Else MsgBox "Niestety, to zła odpowiedź."
pytan = pytan - 1: Znaki = Replace(Znaki, Chr(LosowyNumerPytania ), "")
Next
if poprawnychodpowiedzi>0.9*Ilepytan then
 ocena="bardzo dobry"
elseif poprawnychodpowiedzi>=0.6*Ilepytan and poprawnychodpowiedzi<=0.9*Ilepytan then
 ocena="dobry"
elseif poprawnychodpowiedzi>=0.3*Ilepytan and poprawnychodpowiedzi<0.6*Ilepytan then
ocena="dostateczny"
else
 ocena="niedostateczny"
end if
msgbox PoprawnychOdpowiedzi & "/" & ilepytan & " - poprawne odpowiedzi. ocena: " & ocena
end if

(12Bernard12) #9

A teraz jeszcze kilka innych pytań:

  • Czy jest możliwość w danym pytaniu dodać obok jakąś fotkę z danego źródła? Dokładniej, że ktoś instaluje takie coś i jest tam folder “loga” i w nim umieszczam logo np. EA Sports i nazywam easports-logo.png. Potem dodaję jakiś kod do pytania i po wyświetleniu pytania gdzieś na ekranie pojawia się logo z tej ścieżki. Chyba ten język jest za prosty na to nie?

-A jak zrobić żeby te pytania były losowo, ale nie przepuszczało do następnego po błędnej odpowiedzi?

 

 

PS Dzięki za wszystkie odpowiedzi, bo bardzo mi pomogłeś :slight_smile:

 

Edit: Fajnie byłoby też ustawić limit czasów dla danego pytania po ilu sekundach wyłączy się gra (rozumiesz? :slight_smile: )


(floyd) #10

 Grafika nie jest obsługiwana w VBS czyli z fotek nici. Jesli chodzi o dwie następne propozycje to jak najbardziej jest do zrobienia. Jedyny problem to taki, że w programie używane są okienka (msgbox) których nie da się zamknąć automatycznie. Dopiero po przejściu np. do następnego pytania i gdy minął czas testu program może się zakończyć. Instrukcję kończącą test można też umieścić w innych miejscach np po odpowiedzi.

Ustaliłem czas wykonywania dla całego testu, ale można by też zrobić dla pojedynczych pytań. Z tym to już chyba sam sobie dasz radę. :slight_smile:

TU wszystkie komendy vbs: http://www.promotic.eu/pl/pmdoc/ScriptLangs/VBScript/VBScript.htm

 ilepytan=liczbapytan:PrzekroczonyCzas="":czas1=time:MinutTestu=10
rem ilepytan= InputBox("Podaj liczbę pytań quizu.")
For i = 0 To IlePytan - 1:numer=i+1
odp="":czas2=time:if czas2>=czas1+MinutTestu/24/60 then PrzekroczonyCzas=". Przekroczony czas.": Exit For
OdpDobra=true:czas2=time:NumerPytania = Int(pytan * Rnd): WylosowanyZnak = InStr(znaki, Mid(Znaki, NumerPytania + 1, 1))
LosowyNumerPytania = Asc(Mid(Znaki, WylosowanyZnak, 1))
while odp <> pytanie(LosowyNumerPytania, 1)
If pytanie(LosowyNumerPytania, 3) <> "" and odpDobra=true  Then oWS.Run pytanie(LosowyNumerPytania, 3)
If pytanie(LosowyNumerPytania, 2) = "MsgBox" Then
odp = MsgBox(pytanie(LosowyNumerPytania, 0), vby, "quiz - " & numer & "/" & ilepytan): If odp = 2 Then Exit For
Else
odp = InputBox(pytanie(LosowyNumerPytania, 0),"quiz - " & numer & "/" & ilepytan): If odp = "" Then Exit For
End If
If odp = pytanie(LosowyNumerPytania, 1)  Then
if OdpDobra=true then  poprawnychodpowiedzi = poprawnychodpowiedzi + 1
 Else
 MsgBox ("Niestety, to zła odpowiedź."):OdpDobra=false
end if
wend
pytan = pytan - 1: Znaki = Replace(Znaki, Chr(LosowyNumerPytania ), "")
Next

(12Bernard12) #11

Dzięki za odpowiedź i dzięki za link bo nie znalazłem nic ciekawego na googlach a to jest nawet do ogarnięcia :slight_smile:


(floyd) #12

Pisałem ostatnio, że vbs nie obsługuje grafiki ale nie ma przeszkód żeby korzystać z programów zewnętrznych. Najprościej to podać tylko adres obrazka, ale wtedy zostanie wyświetlony w domyślnej przeglądarce co nie wygląda zbyt elegancko.

Napisałem więc prosty programik o nazwie image.exe do wyświetlania grafik i ktory można ściągnąć tutaj:

http://omega.pdg.pl/counter4.php?id=/pliki/image.exe

sam programik image.exe też może wyświetlać rożne fotki w tym celu tworzymy skrót do niego i w skrocie podajemy parametr ktorym jest adres obrazka do wyświetlenia. Np. C:\vbs\image.exe fotka.jpg albo tworzymy skrypt vbs o treści:

'============

Set oWS = WScript.CreateObject(“WScript.Shell”)

oWS.Run “image.exe fotka.jpg”

'============

'Jeżeli chcemy go użyć w skrypcie z quizem, to musimy dokonać pewnych zmian w samym skrypcie:

'Zmieniamy deklaracje: Dim pytanie(255, 2) na Dim pytanie(255, 3) bo przybędzie nowa zmienna.

'Tutaj deklaracje potrzebne do wyświetlenia obrazka oraz jego usunięcia umieszczane na pocżatku skryptu.

'===============

Set ows = WScript.CreateObject(“WScript.Shell”)

Dim objWMIService, objProcess, colProcess

Dim strComputer, strProcessKill:strComputer = “.”:strProcessKill = “‘image.exe’”

'==============

'Tutaj podajemy adres obrazka jako parametr do programu image.exe czyli coś takiego “image.exe obrazek.jpg” gdy program image.exe i obrazek są w tym samym katalogu. Obrazek może być też w innym katalogu i wówczas piszemy np. obrazki\obrazek.jpg. Program nie obsługuje plikow png tylko jpg, bmp lub gif.

'==============

liczbapytan=liczbapytan+1:pytanie(liczbapytan-1, 0) = “Czy Polska leży w Ameryce?”: pytanie(liczbapytan-1, 1) = 7: pytanie(liczbapytan-1, 2) = “MsgBox”: pytanie(liczbapytan-1, 3) = “image.exe naj.jpg”

===============

'Tu wyświetlenie obrazka:

'===============

If pytanie(LosowyNumerPytania, 3) <> “” and odpDobra=true  Then oWS.Run pytanie(LosowyNumerPytania, 3)

'===============

'Tutaj zamykamy obrazek przechodząc do następnego pytania.

'==============

If pytanie(LosowyNumerPytania, 3) <> “” then

Set objWMIService = GetObject(“winmgmts:” & “{impersonationLevel=impersonate}!\” & strComputer & “\root\cimv2”)

Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = " & strProcessKill )

For Each objProcess in colProcess

objProcess.Terminate()

Next

end if

==============

'W końcowym efekcie  w pętli głównej skryptu otrzymamy coś takiego:

For i = 0 To IlePytan - 1:numer=i+1
odp="":czas2=time
OdpDobra=true:czas2=time:NumerPytania = Int(pytan * Rnd): WylosowanyZnak = InStr(znaki, Mid(Znaki, NumerPytania + 1, 1))
LosowyNumerPytania = Asc(Mid(Znaki, WylosowanyZnak, 1)) 
while odp <> pytanie(LosowyNumerPytania, 1)
If pytanie(LosowyNumerPytania, 2) = "MsgBox" Then
If pytanie(LosowyNumerPytania, 3) <> "" and odpDobra=true Then oWS.Run pytanie(LosowyNumerPytania, 3)
odp = MsgBox(pytanie(LosowyNumerPytania, 0), vby, "quiz - " & numer & "/" & ilepytan): If odp = 2 Then Exit For
if czas2>=czas1+MinutTestu/24/60 then PrzekroczonyCzas=". Przekroczony czas.": Exit For
Else
odp = InputBox(pytanie(LosowyNumerPytania, 0),"quiz - " & numer & "/" & ilepytan): If odp = "" Then Exit For
if czas2>=czas1+MinutTestu/24/60 then PrzekroczonyCzas=". Przekroczony czas.": Exit For
End If
If odp = pytanie(LosowyNumerPytania, 1) Then
if OdpDobra=true then poprawnychodpowiedzi = poprawnychodpowiedzi + 1
If pytanie(LosowyNumerPytania, 3) <> "" then
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next
end if
 Else
 MsgBox ("Niestety, to zła odpowiedź."):OdpDobra=false
end if
wend
pytan = pytan - 1: Znaki = Replace(Znaki, Chr(LosowyNumerPytania ), "")
Next

Ciekawe czy uda Ci się z tymi grafikami.


(12Bernard12) #13

No nie poradziłem sobie :wink: Nie wiem jak zrobić z tym programikiem image.exe bo jak zmieniam ścieżkę do fotki mojej to i tak wrzuca zdjęcie to co było w oryginale. Otworzyłem więc to w Notepad C++ i poszukałem czy tam jakieś ścieżki/linki są i znalazłem tylko linki, ale żaden nie odpowiadał za zdjęcie. 


(floyd) #14

image.exe to jest program skompilowany zrozumiały dla maszyny, a nie czlowieka.

Musi działać jesli wszystko poprawnie wpisane:

Na początku skryptu musi by:

Dim pytanie(256, 3)

Set ows = WScript.CreateObject(“WScript.Shell”)

Dim objWMIService, objProcess, colProcess

Dim strComputer, strProcessKill:strComputer = “.”:strProcessKill = “‘image.exe’”

Gdy obrazek w podkatalogu adresujemy tak:

pytanie(liczbapytan-1, 3) = “image.exe     .\obrazki\obrazek.jpg”

lub tak:

pytanie(liczbapytan-1, 3) = “image.exe  obrazki\obrazek.jpg”

gdy obrazek w tym samym katalogu wystarczy:

pytanie(liczbapytan-1, 3) = “image.exe    obrazek.jpg”

Można też podawać pełną ścieżkę dostępu np.:

pytanie(liczbapytan-1, 3) = “F:\vbs\image.exe       F:\vbs\obrazki\obrazek.jpg”


A, tu jeszcze skrypcik z losowniem jak w Lotto(6 z 48) Matematycy twierdzą, że to wszystko jedno czy skreśli się wsszystkie liczby po koleji np. 1,2,3,4,5,6

czy też bardziej rożnie rozłożone. Przeciętny czlowiek zdaje sobie sprawę, że wylosowanie 6 kolejnych liczb jest praktycznienie niemożliwe i wydaje mu się, że gdy wybierze liczby rozlożone bardziej losowo ,to ma większe szanse. Ty też tak sądzisz? Można sobie zatem potestować. :slight_smile:

Randomize:minuty=2:LiczbaKul=48:koniecLinii=chr(13) & chr(10): For i = 1 To LiczbaKul: ZbiorKul0 = ZbiorKul0 + Chr(i): Next:wynik=0
MojaPropozycja = InputBox("Podaj proponowane wyniki losowania " & koniecLinii & "czyli 6 z 48 liczb." & koniecLinii & "Między liczbami wstawiaj spacje.","Lotto - " & Time & " maksymalny czas pracy " & minuty & " minuty")
WynikLosowania = cint(InputBox("Chcę trafić:","Lotto - " & Time) ):tablica=split(MojaPropozycja, " "): losowan = 0: czas1=time
While (wynik<WynikLosowania and czas2< czas1+minuty/24/60)
czas2=time:if czas2>= czas1+minuty/24/60 then ostrzezenie="Przekroczony czas " & minuty & " minut." else ostrzezenie=""
ZbiorKul=ZbiorKul0:LiczbaKul=48:ZbiorWylosowanychNumerow="":losowan = losowan + 1
wynik=0:For i = 1 To 6
WylosowanaLiczba = Int(LiczbaKul * Rnd + 1): NaKtorymMiejscuKulaZWylosowanaLiczba = InStr(ZbiorKul, Mid(ZbiorKul, WylosowanaLiczba, 1))
wylosowanyNumerKuli = Asc(Mid(ZbiorKul, NaKtorymMiejscuKulaZWylosowanaLiczba, 1)): KulaDoUsuniecia = Chr(wylosowanyNumerKuli)
ZbiorWylosowanychNumerow = ZbiorWylosowanychNumerow & wylosowanyNumerKuli & " "
LiczbaKul = LiczbaKul - 1: ZbiorKul = Replace(ZbiorKul, KulaDoUsuniecia, "")
Next
ZbiorPomocniczy=" " & ZbiorWylosowanychNumerow 
For i=0 to 5 
if instr(Zbiorpomocniczy," " & tablica(i) & " ") then wynik=wynik+1
next
wend
if losowan<112 then tekst=" i być może w tym roku. :)" else tekst="czyli około " & int(losowan/56) & " lat. :)"
if ostrzezenie="" then
MsgBox ("wylosowano: " & ZbiorWylosowanychNumerow & konieclinii & " trafiłeś: " & Wynik & koniecLinii & " losowań: " & losowan & koniecLinii & tekst)
else
msgbox (ostrzezenie & " Nie trafiłeś " & wynikLosowania & " w " & losowan & " losowaniach" & koniecLinii & tekst)
end if

(12Bernard12) #15

Tych grafik nie ogarniam dalej :confused:

 

A da się zrobić Pytania losowo, ale tak że pojawi się pierwsze pytanie i się pomylę to że się od razu wyłącza? Znalazłem to: http://www.promotic.eu/pl/pmdoc/ScriptLangs/VBScript/Statmn/Randomize.htm ale nie ogarniam :slight_smile:


(floyd) #16

Funkcja Randomize odpowiada za losowy wybór i też jest w skrypcie.

Kończenie programu po błędnej odpowiedzi trochę bezsensowne ale możliwe. Wystarczyło by  wpisać: ‘exit for’ po błędnej odpowiedzi.

Tu działający skrypt z fotkami: http://omega.pdg.pl/counter4.php?id=/pliki/skrypt.zip

Wystarczy ściągnąć, rozpakować i uruchomić. Klikając na obrazku lewym lub prawym klawiszem myszki można zmieniać przezroczystość fotki.


(12Bernard12) #17

Ok. Fotki wyglądają tak kiepsko i lipa z tym uruchamianiem że trzeba kliknąć uruchom, więc to sobie zostawię do poważniejszych języków C++. Teraz będę ogarniał tą funkcje Randomize :slight_smile:

A czy w Microsoft Visual Basic 2010 Express jest dobrym programem do stworzenia takiego quizu?


(floyd) #18

Oczywiście, że można w tym programie stworzyć taki skrypt, a obrazki umieszczamy , obiekcie image. Można też go wzbogacić o dodatkowe elementy typu checkbox (wielokrotnego wyboru) czy optionbox. Nawet ten sam skrypt powinien działać z drobnymi modyfikacjami.

Chyba coś nieuważnie czytałeś moje teksty bo nigdzie nie napisałem, że do działania skryptu konieczne jest kliknięcie ikony uruchom.

Napisałem jedynie, że jest taka możliwość by np. wyświetlić ulubioną fotkę na pulpicie, a po dodaniu do autostartu żeby wyświetlała się w sposób ciągły. Można też utworzyć po prostu skrót do programu image.exe w postaci: “adres pliku image.exe adres fotki”, ale to tak na marginesie.

Jeśli chodzi o jakość fotek, to tylko zależy od tego jak zostały wykonane, a nie od programu wyświetlającego je który w żaden sposób nie ingeruje w tę jakość.

Powodzenia w nauce nowego języka programowania.


(12Bernard12) #19

Jeszcze jedno pytanie. Tym razem o Visual Basic. Potrzebuję zrobić taki program który po kliknięciu przycisku Start, pokazuję jedną losową form (formularz?) od 5 do 8. Mam taki kod:

Dim adu As String
        adu = Rnd(5, 8)
        Select Case adu
            Case 1
                form5.Show()
            Case 2
                form6.Show()
            Case 3
                form7.Show()
            Case 4
                form8.Show()
        End Select
        Me.Hide()

Niestety wyskakuję mi error i nie wiem co mam poprawić, bo informacja na dole w kreatorze mało mi mówi. Prosiłbym Cię o pomoc :wink:

 

Edit:

Public Class Form1
 
    Private _rnd As String
 
    Private Property Rnd(ByVal p1 As Integer, ByVal p2 As Integer) As String
        Get
            Return _rnd
        End Get
        Set(ByVal value As String)
            _rnd = value
        End Set
    End Property
 
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        End
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim webAddress As String = "https://www.facebook.com/vermegon"
        Process.Start(webAddress)
    End Sub
 
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim webAddress As String = "https://twitter.com/vermegon"
        Process.Start(webAddress)
    End Sub
 
    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        Dim webAddress As String = "https://plus.google.com/112184251024158236468/about"
        Process.Start(webAddress)
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim form2 As New Form2
        form2.Show()
        Me.Hide()
    End Sub
 
    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        Dim webAddress As String = "http://www.vermegon.pl/"
        Process.Start(webAddress)
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim adu As String
        adu = Rnd(5, 8)
        Select Case adu
            Case 1
                Form5.Show()
            Case 2
                Form6.Show()
            Case 3
                Form7.Show()
            Case 4
                Form8.Show()
        End Select
        Me.Hide()
    End Sub
 
    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    End Sub
 
    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        Dim webAddress As String = "http://www.vermegon.pl/"
        Process.Start(webAddress)
    End Sub
 
    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim webAddress As String = "http://www.vermegon.pl/"
        Process.Start(webAddress)
    End Sub
 
End Class

Wrzucam cały kod menu głównego.

 

Teraz błędu nie ma, ale po kliknięciu przycisku start, nie pojawia się nic, ale menu znika (tak jak ma być)