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. 1
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. 2
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. 3
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
Informatyka – programowanie, Politechnika Świętokrzyska
str. 4