Informatyka – programowanie, Politechnika Świętokrzyska
str. 1
Visual Basic dla aplikacji w Excelu
Ćwiczenie 2 - pętle i instrukcje warunkowe
Ułożyć program gry komputerowej „Gra w numerki”. Zasady gry są następujące: komputer losuje liczbę a Ty Biedaku
masz 10 szans aby ją odgadnąć.
ETAP I - wersja podstawowa zawierająca procedury:
•
losowanie
losuje liczbę z zakresu 1-99,
•
wstawianie_liczby wczytuje Twoją liczbę za pomocą funkcji InputBox i wstawia ją do komórki moje,
•
porównywanie
wpisuje do komórki wynik tekst ZA DUŻO, ZA MAŁO, zależnie od tego jak
wypadło porównanie Twojej liczby z liczbą wylosowaną przez komputer,
•
zgadywanie
daje 10-krotną szansę na odgadnięcie liczby, jeśli zgadniesz do komórki wynik wstawi
tekst
SUKCES,
•
czyszczenie
przywraca pierwotny stan ekranu.
1.
W skoroszycie zostaw tylko jeden arkusz o nazwie Gra.
2.
Nadaj nazwy komórkom:
•
moje - komórka F4, będzie tu wpisywana Twoja liczba,
•
wynik - komórka F2, będzie tu wpisywany komunikat o wyniku zgadywania.
3.
Do komórki E4 wpisz tekst MOJA LICZBA, do E2 tekst WYNIK.
4.
Wstaw arkusz modułu i wpisz polecenie wymuszające deklarację zmiennych Option Explicit. Wpisz deklarację
zmiennych dostępnych we wszystkich procedurach: liczba_losowa (liczba całkowita), skok (liczba całkowita),
sukces (wartość logiczna).
Option Explicit
Dim liczba_losowa As Integer, skok As Integer
Dim sukces As Boolean
5.
Napisz procedurę losowanie - procedura Randomize uruchamia generator liczb losowych, funkcja Rnd losuje liczbę
z zakresu <0,1), Int zwraca część całkowitą liczby.
Sub losowanie()
Randomize
liczba_losowa = Int(Rnd() * 99) + 1
End Sub
6.
Napisz procedurę wstawianie_liczby, która wczytuje Twoją liczbę za pomocą funkcji InputBox i wstawia ją do
komórki moje.
Sub wstawianie_liczby()
Dim liczba_moja As Integer
Dim wynik As String
wynik = InputBox("Wpisz liczb
ę
z zakresu 1-99", "Czy zgadniesz?", , _
100, 120)
liczba_moja = CInt(wynik)
Tu uzupełnij procedur
ę
, wstaw liczb
ę
do komórki moje
End Sub
7.
Napisz procedurę porównanie, która porównuje liczbę z komórki moje z liczbą losową i wpisuje do komórki
wynik tekst ”ZA DUŻO” lub ”ZA MAŁO” oraz ustawia wartość zmiennej sukces.
Sub porównanie()
Dim liczba_moja As Integer
sukces=False
liczba_moja = Range("moje")
If liczba_moja = liczba_losowa Then
sukces = True
End If
If liczba_moja < liczba_losowa Then
Informatyka – programowanie, Politechnika Świętokrzyska
str. 2
Range("wynik") = "ZA MAŁO"
End If
If liczba_moja > liczba_losowa Then
Range("wynik") = "ZA DU
Ż
O"
End If
End Sub
9.
Napisz procedurę zgadywanie. Procedura ta losuje liczbę, a następnie 10 razy umożliwia zgadywanie (wstawianie
liczby i porównywanie). Procedura jest przerywana gdy zmienna sukces otrzyma wartość True.
Sub zgadywanie()
Dim i As Integer
losowanie
For i = 1 To 10
skok=i
wstawianie_liczby
porównanie
If sukces = True Then
Range("wynik") = "SUKCES”
‘Zako
ń
czenie procedury - sukces
Exit Sub
End If
Next i
‘Zako
ń
czenie procedury - pora
ż
ka
End Sub
10.
Wstaw przycisk START i przypisz do niego procedurę zgadywanie. Przetestuj jego działanie. Przed każdą
powtórką gry wyczyść komórki moje oraz wynik.
11.
Zmodyfikuj procedurę zgadywanie:
•
w przypadku sukcesu dla komórki wynik:
- wpisz wartość: "SUKCES - liczba prób " & i
- ustaw właściwość Font.Bold na True oraz Font.Color na czerwony (stała vbRed)
•
w przypadku porażki dla komórki wynik:
- wpisz wartość: "CHA! CHA! CHA! - to była liczba " & liczba_losowa
- ustaw właściwość Font.Bold na True oraz Font.Color na niebieski (stała vbBlue)
Uwaga: Operator & realizuje konkatenację(łączenie) napisów. Zmienna liczbowa w ww. instrukcji zostanie
automatycznie zamieniona na napis.
12.
Przetestuj.
13.
Napisz procedurę czyszczenie przywracającą pierwotny stan ekranu:
•
wyczyść zawartość komórek: wynik, moje wykonując na ich rzecz metodę Clear,
•
przywróć standardowe formatowanie komórki wynik - wyłącz Bold i ustaw kolor czarny (vbBlack)
14.
Wywołaj procedurę czyszczenie w odpowiednim miejscu procedury zgadywanie.
15.
Ponownie przetestuj działanie przycisku START.
ETAP II - wersja testująca poprawność Twoich liczb.
1.
Zmodyfikuj procedurę wstawianie_liczby. W przypadku nie wprowadzenia żadnej liczby (puste pole wejściowe i
przycisk OK w oknie InputBox), rezygnacji (przycisk Anuluj w oknie InputBox) lub złego formatu liczby mamy
stratę gracza (zaprzepaszczona jedna szansa na odgadnięcie liczby). Zastosuj pułapkę na błędy On Error Goto
etykieta. W przypadku wprowadzenia liczby spoza zakresu <1,99> również mamy stratę gracza. Ten przypadek
wykrywa się za pomocą instrukcji if.
W Module1 zadeklaruj dodatkową zmienną wpis (boolean).
Sub wstawianie_liczby()
Dim liczba_moja As Integer
Dim wynik As String
wynik = InputBox("Wpisz liczb
ę
z zakresu 1-99", "Czy zgadniesz?", , _
100, 120)
On Error GoTo blad
liczba_moja = CInt(wynik)
Informatyka – programowanie, Politechnika Świętokrzyska
str. 3
If liczba_moja <= 0 Or liczba_moja > 99 Then
wpis = False
Range("moje").Clear
MsgBox "Liczba poza zakresem" & Chr(13) & "-STRATA-"
Else
wpis = True
Range("moje") = liczba_moja
End If
Exit Sub
blad:
wpis = False
Range("moje").Clear
MsgBox "Bł
ę
dny zapis liczby" & Chr(13) & "-STRATA-"
End Sub
2.
W procedurze porównanie uwzględnij przypadek straty gracza:
•
ustal miejsce w procedurze, w którym należy sprawdzić zaistnienie tego przypadku a następnie
•
jeśli zmienna wpis ma wartość False do komórki wynik wpisz tekst ”STRATA” i zakończ wykonywanie
procedury porównanie (Exit Sub)
ETAP III - wersja rozszerzona wyświetlająca dodatkowo ciąg wprowadzanych liczb w następującej formie
ZA MAŁO
ZA DUŻO
20
39
50
1.
Nadaj nazwy komórkom:
•
próby - zakres komórek B8:C17, będą tam wprowadzone twoje kolejne próby zgadywania
•
za_mało - komórka B7, poniżej będą wpisywane Twoje za małe liczby,
•
za_dużo - komórka C7, poniże będą wpisywane Twoje za duże liczby,
2.
Wpisz do komórki za_mało słowa ZA MAŁO, a do komórki za_dużo słowa ZA DUŻO.
3.
Zmodyfikuj procedurę porównanie wpisując dodatkowe instrukcje wstawiające wartość zmiennej liczba_moja do
komórek:
•
Range("za_dużo").Offset(skok, 0) jeśli w komórce wynik jest wartość „ZA DUŻO”
•
Range("za_mało").Offset(skok, 0) jeśli w komórce wynik jest wartość „ZA MAŁO”
4.
W procedurze czyszczenie dodaj czyszczenie bloku próba.
5.
Przetestuj działanie gry.
ETAP IV- obiekty graficzne
1.
Utwórz obiekt graficzny. Narysuj kolorową twarz pajaca połącz wszystkie elementy (opcja grupuj). Narysuj smutne
i uśmiechnięte usta. Przesuń usta w odpowiednie miejsce twarzy umieszczając je jedne na drugich.
2.
Nazwij pierwszy obiekt twarz, drugi uśmiech, a trzeci smutek.
3.
Utwórz nowy moduł (Moduł2), a w nim poniższe procedury.
Informatyka – programowanie, Politechnika Świętokrzyska
str. 4
4.
Utwórz procedurę smutas składające się z następujących akcji:
•
przesuń usta wesołe na sam spód
•
przesuń usta smutne na wierzch
Sub smutas()
ActiveSheet.DrawingObjects("u
ś
miech").Select
Selection.SendToBack
ActiveSheet.DrawingObjects("smutek").Select
Selection.BringToFront
Range("A1").Select
End Sub
5.
Przesuń twarz na wierzch i uruchom procedurę smutas.
6.
Utwórz procedurę wesołek, składającą się z następujących akcji:
•
przesuń usta smutne na sam spód
•
przesuń usta wesołe na wierzch
Sub wesołek()
ActiveSheet.DrawingObjects("smutek").Select
Selection.SendToBack
ActiveSheet.DrawingObjects("u
ś
miech").Select
Selection.BringToFront
Range("A1").Select
End Sub
7.
Przesuń twarz na wierzch i uruchom procedurę wesołek.
8.
Utwórz makro bez_wyrazu składające się z jednej akcji przesuwania twarzy na wierzch.
9.
Zmodyfikuj procedurę zgadywanie, tak aby wesołek pojawiał się w przypadku sukcesu, a smutas w przypadku
porażki.
10.
Zmodyfikuj procedurę czyszczenie wywołując w niej dodatkowo procedurę bez_wyrazu.
11.
Napisz procedurę auto_open uruchamianą automatycznie w momencie otwierania skoroszytu. Procedura powinna
ustawiać pełny ekran dla aplikacji.
Sub auto_open()
Application.DisplayFullScreen = True
End Sub
12.
Narysuj przycisk KONIEC GRY i przypisz do niego poniższą procedurę:
Sub koniec()
Application.DisplayFullScreen = False
ActiveWorkbook.Close
End Sub