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