Artykuł

gru 10 2008
0

Zgadnij liczbę - prosta, tekstowa gra w Javie

Jak zapewne każdy z was przekonał się na własnej skórze, nauka czegokolwiek w oparciu tylko o samą teorię może doprowadzić do załamania nerwowego, rozstroju żołądka itd.;p Dlatego postanowiłem napisać artykuł, a właściwie tutorial, który pozwoli wykorzystać podstawy Javy do napisania zabójczo prostej gry Zgadnij liczbę. Cel gry jest prosty. Aplikacja losuje liczbę z określonego przedziału a następnie użytkownik próbuje ją zgadnąć. Jeśli się pomyli, program daje mu wskazówkę: szukana liczba jest mniejsza/większa (w zależności od sytuacji). Zabawa trwa dopóki nie znajdziemy szukanej liczby. Na końcu aplikacja wyświetla komunikat informujący o tym, za którym razem udało nam się zgadnąć liczbę. Tak więc bierzemy się do pracy:).

Kod źródłowy krok po kroku

Na początek informacja. Pełny kod źródłowy aplikacji Zgadnij liczbę dostępny jest również w dziale kodów źródłowych.

Na początku szkielet naszej aplikacji (jeśli korzystamy z jakiegoś IDE np. Eclipse'a, czynność ta zostanie wykonana automatycznie, jeśli uaktywnimy odpowiednie opcje dostępne na ekranie tworzenia klasy):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class ZgadnijLiczbe 
{
	/**
	 * @param args
	 * @throws IOException 
	 * @throws NumberFormatException 
	 */
	public static void main(String[] args) throws NumberFormatException, IOException 
	{
		// TODO Auto-generated method stub
	}
}

Na powyższym listingu dodałem już niezbędne importy:
- java.io.BufferedReader - klasa zawierająca obiekt BufferedReader.
- java.io.IOException - klasa zawierająca obsługę błędów wejścia/wyjścia.
- java.io.InputStreamReader - klasa obsługująca strumień wejściowy aplikacji.
- java.util.Random - klasa pozwalająca na generowanie losowych wartości.
W kolejnym kroku utworzyłem już publiczną klasę ZgadnijLiczbe i zadeklarowałem główną metodę aplikacji. Metoda main rzuca dwa wyjątki: NumberFormatException (błędny format liczby) i IOException (błąd wejścia/wyjścia).

Następnym etapem jest utworzenie i inicjalizacja niezbędnych obiektów i zmiennych. Poniższy kod wklejamy wewnątrz funkcji main:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
boolean wynik = false;
int ktory_raz=1;
Random rand = new Random();
int liczba = rand.nextInt(100);

Obiekt reader pozwala na odczyt danych wprowadzonych z klawiatury. Zmienna wynik informuje nas czy padła prawidłowa odpowiedź (na początku musi być ustawiona na false). Zmienna ktory_raz, przechowuje informację o ilości prób. Wreszcie obiekt rand generuje losową liczbę z zakresu <0, 100).

Czas przejść do najważniejszej części aplikacji, mianowicie pętli while:

while(wynik==false)
{
	System.out.print("Wprowadź liczbę z zakresu 0-100: ");
	int zgadnij = Integer.parseInt(reader.readLine());
	if(zgadnij==liczba)
	{
		System.out.println("Znalazłeś szukaną liczbę!!!");
		wynik=true;
	} 
	else if (zgadnij>liczba)
	{
		System.out.println("Podałeś większą liczbę.");
		wynik=false;
		ktory_raz++;
	} 
	else if (zgadnij<liczba)
	{
		System.out.println("Podałeś mniejszą liczbę.");
		wynik=false;
		ktory_raz++; 
	} 
}

Pętla while jest wykonywana dopóki uzytkownik nie zgadnie wylosowanej przez komputer liczby. W linii 3 wyświetlamy zachęcający komunikat, a w linii 4 odczytujemy linię tekstu. Ponieważ funkcja readLine, domyślnie odczytuje stringi należy sparsować wprowadzoną wartość do typu integer. Jeśli użytkownik wprowadzi zamiast liczby np. tekst zostane wyrzucony wcześniej zadeklarowany wyjątek NumberFormatException.

W liniach 5-21 znajduje się instrukcja If sprawdzająca wartość liczby. Mamy trzy sytuacje:
- zgadnij==liczba - użytkownik odgadł liczbę. Należy mu to uzmysłowić drukując stosowny komunikat (linia 7). Musimy koniecznie również ustawic zmienną wynik na true, dzięki czemu opuścimy pętlę while.
- zgadnij > liczba - sytuacja w której użytkownik podał liczbę większą niż szukana. W linii 12 wyświetlamy stosowny komuniktat do zaistniałej sytuacji. W linii 13 ustawiamy zmienną wynik na false, dzieki czemu pętla będzie mogła być dalej iterowana (zasadniczo linię 13 można pominąć, ponieważ zmienna wynik z góry była ustawiona na false. Tutaj została dodana aby poprawić czytelność kodu). Na koniec w linii 14, inkrementujemy zmienną ktory_raz.
- zgadnij < liczba - ostatnia sytuacja występuje gdy użytkownik podał liczbę mniejszą od szukanej. Dlatego powyższy kod, jest praktycznie identyczny z kodem przedstawionym w sytuacji powyżej. Zmienia sie jedynie treśc komunikatu.

Kiedy użytkownik odgadnie liczbę, a tym samym wyjdzie z pętli wyświetlamy komunikat informujący go, za którym razem odgadł liczbę (patrz listing poniżej).

System.out.println("Zgadłeś za "+ktory_raz+" razem.");

Uwagi końcowe

Jak widzicie, aplikacja przedstawiona w tym artykule jest niezwykle prosta. Nie ma tutaj poprawnej obsługi błędów (np. bloku try...catch), czy rozbudowanych konstrukcji w Javie. Zachęcam do eksperymentów i roszerzania kodu.

Data ostatniej modyfikacji: 05.06.2011, 17:18.

Podoba Ci się ten wpis? Powiedz o tym innym!

Send to Kindle

Komentarze

blog comments powered by Disqus