Programowanie Zdarzeniowe(PROZ) Projekt własny - gra SUDOKU Dokumentacja końcowa

Podobne dokumenty
REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Kontenery i komponenty graficzne

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Programowanie zdarzeniowe

Zarządzenie nr 115/R/WSTI/2014 Rektora WSTI w sprawie przygotowania i obrony pracy dyplomowej.

Graphic User Interfaces pakiet Swing

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Podstawy Języka Java

Ekran tytułowy (menu główne)

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018

Ćwiczenia 9 - Swing - część 1

Tworzenie okna dialogowego w edytorze raportu SigmaNEST. część 1

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Pierwsza ramka. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 10

Programowanie obiektowe

Java - interfejs graficzny

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Obszar Logistyka/Zamówienia Publiczne

Programowanie obiektowe

Unity 3D - własny ekran startowy i menu gry

Obszar Księga Główna. Harmonogramy księgowań. Instrukcja użytkownika

Budowa i generowanie planszy

TWORZENIE FORMULARZY WORD 2007

5.9 Modyfikacja gry Kółko i krzyżyk

Robo - instrukcja obsługi

Wstęp Sterowanie Utworzenie, wybór i kasowanie gracza. utworzenia nowego gracza Nowy gracz Nastawienie gracza

Przykładowe roz wiązanie:

PWŚG Ćwiczenia 13. Ukończoną pracę należy przesłać na adres lub

STAŁY KLIENT PODRĘCZNIK UŻYTKOWNIKA WERSJA 1.1.3

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

WSKAZÓWKA: Kliknij znak + obok folderu w galerii, aby go rozwinąć i sprawdzić jego zawartość.

Informatyka II. Laboratorium Aplikacja okienkowa

INSTRUKCJA UŻYTKOWNIKA PORTALU SIDGG

UMOWY INSTRUKCJA STANOWISKOWA

W powyższym kodzie utworzono wyliczenie dni tygodnia.

PODRĘCZNIK UŻYTKOWNIKA PROGRAMU INTERCLINIC MODUŁ SZPITAL

Programowanie w Javie Wykład 6 Okienka w Javie (AWT)

ELF. Instrukcja użytkownika. (System wspomagający wypełnianie wniosków elektronicznych)

Funkcje standardowe. Filtrowanie

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

Aplikacja wielowątkowa prosty komunikator

2.1. Duszek w labiryncie

Java: interfejsy i klasy wewnętrzne

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Laboratorium 1 - Programowanie proceduralne i obiektowe

PLANSZA. Plansza składa się z następujących pól:

Baza danych. Program: Access 2007

Klasy i obiekty cz II

Access - Aplikacja. Tworzenie bazy danych w postaci aplikacji

Tworzenie bazy danych na przykładzie Access

Podstawy Programowania

Padlet wirtualna tablica lub papier w Internecie

GENERATOR OFERTY PDF DOKUMENTACJA UŻYTKOWA 1/20

Laboratorium z informatyki sem.iii/ćw. 4 Wydział Transportu PW /19

Skróty klawiaturowe w systemie Windows 10

Al. Akacjowa 16A Wrocław

Programowanie graficznych interfejsów użytkownika

1.Instalacja. Przechodzimy przez kolejne okna instalatora klikacjąć Dalej. wolek.zallegro.pl

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Rys.1. Uaktywnianie pasków narzędzi. żądanych pasków narzędziowych. a) Modelowanie części: (standardowo widoczny po prawej stronie Przeglądarki MDT)

Instrukcja użytkowa programu INTERNET LAB-BIT

Programowanie Obiektowe GUI

Polimorfizm w pigułce

MS Excell 2007 Kurs podstawowy Filtrowanie raportu tabeli przestawnej

Obszar Logistyka/Zamówienia Publiczne. Umowy i Rejestr depozytów (zabezpieczeń wykonania umów) Instrukcja użytkownika

Oprogramowanie Użytkowe ćwiczenia Semestr I mgr inż. Daniel Riabcew SWSPiZ

Podręcznik KDiamond. Stefan Majewsky Polskie tłumaczenie: Krzysztof Woźniak

Tworzenie elementów graficznych

Aplikacja wielow tkowa prosty komunikator

Wprowadzenie do systemu Delphi

Podręcznik użytkownika Platformy Edukacyjnej Zdobywcy Wiedzy (zdobywcywiedzy.pl)

INSTRUKCJE DO FRONTPAGE 2003

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

5.4. Tworzymy formularze

Programowanie obiektowe

Instrukcja obsługi programu

1. Wywiadówka. A. Zawiadomienia dla rodziców

KONSTRUKCJA TRÓJKĄTA 1 KONSTRUKCJA TRÓJKĄTA 2 KONSTRUKCJA CZWOROKĄTA KONSTRUKCJA OKRĘGU KONSTRUKCJA STYCZNYCH

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Java Podstawy. Michał Bereta

Tytuły wykonawcze dla US. Konfigurowanie programu do generowania tytułu w formie elektronicznej

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Tworzymy projekt File->New Project->Java Application, przy czym tym razem odznaczamy create main class

Instrukcja obsługi programu Do-Exp

Program dla praktyki lekarskiej. Instrukcja korzystania z panelu pielęgniarki szkolnej

Laboratorium A: Zarządzanie ustawieniami zabezpieczeń/klucz do odpowiedzi

WSCAD. Wykład 5 Szafy sterownicze

Podręcznik programu KNetWalk. Fela Winkelmolen Eugene Trounev Polskie tłumaczenie: Krzysztof Woźniak

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Programowanie gry Smerf w labiryncie

ELF. Instrukcja użytkownika. (System wspomagający wypełnianie wniosków elektronicznych)

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

1. Logowanie do systemu

Transkrypt:

Mariusz Żbikowski Programowanie Zdarzeniowe(PROZ) Projekt własny - gra SUDOKU Dokumentacja końcowa Warszawa,07.05.2007 1.Cel projektu i wstępne założenia Celem projektu jest stworzenie aplikacji umożliwiającej grę w Sodoku. Celem gry jest takie ułożenie cyfr od 1 do 9 na planszy (o rozmiarach 9x9, złożonej z 9- ciu kwadratów 3x3), aby: -żadna cyfra nie powtarzała się w linii lub wierszu, -cyfry nie powtarzały się w żadnym z kwadratów 3x3. 2.Wygląd aplikacji i opis dziania Główne okno aplikacji Grę rozpoczyna się naciskając kursorem myszy przycisk Start. Na pasku po prawej znajduje od góry zegar (TIME), licznik punktów SCORE (zmniejszający się wraz z upływem czasu, liczbą błędnie wpisanych cyfr w puste pola ). Na dole paska znajdują się poziomy gry. Poziom wybiera się najeżdżając kursorem myszy. Wybrany poziom podświetli się na szaro. Oczywiście im wyższy poziom tym można zdobyć więcej punktów.

Przykładowa plansza Po naciśnięciu przycisku Start użytkownik rozpoczyna grę. Ma do wyboru: Pause możliwość zatrzymania gry bez konieczności zamykania aplikacji. Create- wygenerowanie nowe planszy. Hint włączenie trybu podpowiedzi ułatwiającej rozwiązanie SUDOKU. Solve odkrycie wszystkich pól czyli rozwiązanie SUDOKU. Edit możliwość stworzenia własnej planszy (opcja dodatkowa) Dodano tę opcje, gdyż jest to znakomita możliwość treningu. Okazuje się bowiem, iż nie jest tak prosto stworzyć własną planszę SUDOKU!!! High Scores wyświetlenie okna z najlepszymi wynikami użytkownika. Exit wyjście z aplikacji. Chcąc wprowadzić cyfrę w odpowiednie pole należy najechać kursorem myszki na nie i wprowadzić z klawiatury odpowiednią wartość. W pole można wprowadzić wyłącznie cyfry 1-9 Plansza jest wygenerowane na podstawie algorytmu generacji planszy SUDOKU zaczerpniętego z literatury. Podobnie opcja Solve opiera się na sprawdzonym algorytmie rozwiązywania Sudoku. Dołożyłem starań, aby aplikacja była przyjazna użytkownikowi Aplikacja wspiera użytkownika w rozwiązywaniu Sudoku. Jeżeli wprowadzono błędną cyfrę (niezgodność z regułami Sudoku) jest ona podkreślana na czerwono i nie można wprowadzić żadnej innej cyfry. Rozwiązanie to pozwala zaoszczędzić czas użytkownika na dalsze rozwiązywanie Sudoku z góry skazane na niepowodzenie.

Wprowadzenie błędnej cyfry Przewidziałem możliwość podpowiedzi po naciśnięciu przycisku Hint Wiąże sie to oczywiście ze pewną stratą punktów

Próba stworzenia własnej planszy Sudoku jest doskonałym treningiem umysłowym. Aplikacja także tutaj wspiera użytkownika i podkreśla na czerwono niewłaściwie wprowadzono cyfrę (niezgodność z regułami Sudoku) lub określony wybór powoduje niemożność rozwiązania planszy (zblokowanie). Użytkownik uświadamia sobie wtedy, że o wiele łatwiej jest rozwiązać plansze Sudoku niż ją stworzyć. To spostrzeżenie potwierdza teoria, gdyż algorytm rozwiązywania Sudoku jest o wiele prostszy niż algorytm generacji planszy Sudoku. Dlatego też zaprojektowany przeze mnie generator generuje jedną planszę Sudoku, której opis generacji znalazłem w literaturze. Użytkownik naciskając na przycisk Create otrzymuje zawsze ta właśnie plansze tylko za każdym naciśnięciem przycisku Create inne pola są dane a inne czyszczone. Zaimplementowany algorytm rozwiązywania Sudoku opiera sie w skrócie na wylosowaniu pustego pola i stwierdzeniu ile można wpisać tu cyfr(entropia), żeby nie naruszać reguł Sudoku. Następnie należy sprawdzić czy któreś z pól w pionie, poziomie lub placu wybranego pola nie ma mniejszej entropi (w szczególności 1). Jeżeli entropia wynosi 1 to pole te się uzupełnia. W polu o najmniejszej entropi trzeba przyjąć jedną z dozwolonych cyfr i tak dalej należy uzupełniać puste pola przyjmując dozwolone cyfry, aż wszystkie pola będą uzupełnione i reguły Sudoku będą zachowane. Jeżeli dojdzie do zblokowania należy sie cofnąć i zmienić wcześniej założoną cyfrę na inną dozwoloną. Próba stworzenia własnej planszy

Okno z najlepszymi wynikami 3.Ważniejsze klasy i ich metody Projekt został wykonany w oparciu o metody i klasy biblioteki Swing. Klasa aplikacji zawierająca funkcje main public class Sudoku Tworzony w funkcji main jest obiekt klasy GameWindow (główne okno aplikacji) Klasa, w której do głównego okna dodawane są wszystkie komponenty class GameWindow extends JFrame { private HighScores hs; private JButton start, create, hint, solve, edit, highscores, exit; private JToggleButton easy, normal, hard, veryhard; private ButtonGroup difflevel = new ButtonGroup(); private TimeLabel timelabel = new TimeLabel(); private PointsLabel pointslabel = new PointsLabel(); private Game game = new Game(timeLabel, pointslabel, NORMAL); private GamePanel gamepanel; private Solver sol; private Generator gen; private Container c = new Container(); private HighScoresWindow scoreswindow; private Graphics g = getgraphics(); private Image image;

Okno prezentujace najlepsze wyniku class WinnerWindow extends JDialog { private GameWindow gamewindow; private Image image; private JTextField namefield = new JTextField(); private HighScores highscores; Okno dialogowe, w którym pogromca Sudoku podaje swoja nazwę class HighScoresWindow extends JDialog { Sterowanie zegarem gry i punktami class Game { private Thread t; //watek uruchamiany na czas gry private TimeLabel timelabel; private PointsLabel pointslabel; private int leftfields; //liczba pol pozostalych do wypelnienia private int points; //liczba punktow private int lostpoints; //punkty tracone w kazdej sekundzie private int wrongchoice; //ile punktow traci sie za zly wybor private long begin; Game(TimeLabel tl, PointsLabel pl, int diff) { timelabel = tl; pointslabel = pl; Zasady przyjęte w grze jeżeli chodzi o punkty w zależności od poziomu trudności, podjęcia błędnej decyzji, włączenia podpowiedzi i tracone wraz ze każdą sekundą rozwiązywania Sudoku public void setdifficulty(int diff) { switch(diff) { case GameWindow.EASY: points = 25000; lostpoints = 7; wrongchoice = 2500; case GameWindow.NORMAL: points = 50000; lostpoints = 14; wrongchoice = 4500; case GameWindow.HARD: points = 100000; lostpoints = 56; wrongchoice = 8500; case GameWindow.VERY_HARD: points = 200000; lostpoints = 112; wrongchoice = 17000; pointslabel.setpoints(points);

Okno wraz z komponentami w czasie gry class GamePanel extends JPanel { private GameWindow gw; private WinnerWindow winnerwin; private Field[][] fields//tablica przyciskow - pol planszy private Solver sol = new SudokuSolver(this); private boolean hint = false; //czy wyswietlac wskazowki private boolean wrongchoice = false;//czy jest blad na planszy private boolean edit = false; //czy w trybie edycji private int badx = -1, bady = -1; //gdzie jest blad private int[][] values = new int[9][9];//wartosci w poszczegolnych polach private int rowused[][] = new int[9][10];//czy w rzedzie znajduje sie wartosc private int colused[][]= new int[9][10]; //czy w kolumnie znajduje sie wartosc private int sqused[][]= new int[9][10]; //czy w kwadracie 3x3 jest wartosc Przyciski class Field extends Jbutton Etykieta związana z punktami class PointsLabel extends JLabel { Etykieta związana z pomiarem upływającego czasu class TimeLabel extends Jlabel Generacja planszy interface Generator { void generatesudoku(gamepanel gp); void setdifficulty(int d); Solver interface Solver { boolean solvesudoku(); class SudokuSolver implements Solver { Rekord wstawiany do tablicy z najlepszymi wynikami class Record implements Serializable, Comparator { Zegar gry class Time implements Serializable, Comparable {