Code Monkey home page Code Monkey logo

battleships's People

Contributors

ashavit avatar yuri1992 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

battleships's Issues

MatchBoard Screen - Support user joining a game

  • כל שחקן יכול להחליט כי הוא נרשם/נכנס לשחק משחק יחיד בלבד. הוא עושה זאת ע"י בחירת המשחק הרלבנטי מהרשימה ולחיצה על כפתור כניסה למשחק.
  • שחקן יכול לבחור לשחק משחק שהוא בעצמו העלה, או כל משחק ששחקן אחר העלה.
  • כל עוד המשחק לא החל – הוא יכול להירשם לאותו המשחק (או לכל משחק אחר) כמה שירצה.
  • מרגע שמשחק מתחיל – לא ניתן להירשם או להיכנס אליו יותר.
  • ברגע ששחקן בוחר להיכנס למשחק הוא מייד מועבר למסך מספר 3.

Bonus #1: Support Skin changing (5 pts.)

אפשרות החלפת skin למשחק. בבונוס זה תממשו (לפחות) 2 ערכות צבעים נוספות על הערכה הדיפולטית, ותאפשרו למשתמש להחליף את ערכות הצבעים. שימו לב ערכת הצבעים כוללת (לכל הפחות):

  • החלפת רקע של כל המסך
  • החלפת המראה של הכפתורים והלוחות על המסך
  • החלפת הפונט והגודל של כל ה label על המסך

Calc Player Score

אופן חישוב הניקוד: במידה והתקפתו של השחקן הביאה לכדי הטבעת צוללת, ניקודה (כפי שמופיע בקובץ ה-xml) יתווסף לניקודו.

Implement logs for Game Play

כאשר המשחק מסתיים יש לאפשר לו "להישאר באוויר" ולאפשר למשתמש לנווט בין המהלכים השונים באמצעות 2 כפתורים ייעודיים: prev ו next.
לחיצה על כל כפתור תגלגל את לוח המשחק תור אחד אחורה או קדימה (בהתאם) ותאפשר לראות מה היה מצבו בכל מהלך ומהלך.
בכל מהלך יש להראות מי הוא השחקן שזהו תורו, ניקודו, לוחותיו המעודכנים לאותו מהלך ולהדגיש את המהלך אותו עשה (תקיפה\הצבת מוקש) ומה היו תוצאות אותו מהלך (פגע\החטיא).
כמו-כן, יש לאפשר למשתמש גם לטעון בשלב זה קובץ משחק חדש, או להתחיל מחדש את המשחק הנוכחי.

Bonus: Enable Save/Load game

טעינה ושמירה של משחק.
אפשרו לשמור משחק, ולטעון אותו בהמשך (יש להוסיף פקודות ייעודיות לשם כך).
ברגע ששומרים משחק יש לבחור שם של קובץ יעד ולשמור לתוכו את המשחק. המשחק יכול להמשיך כרגיל לאחר נק' השמירה.
ברגע שטוענים משחק – הוא ממשיך בדיוק מהפוזיציה בה הוא נשמר בפעם האחרונה.
השמירה והטעינה של המשחק יכולה להתבצע לאיזה פורמט קובץ שאתם חפצים – החלטה שלכם

MatchBoard Screen - Add button to load a match from xml

יש לבצע בדיקות קלט על הקובץ, ובמידה והוא לא תקין להתריע בפני המשתמש ולא לטעון את המשחק.
בפרט יש לבדוק את הדברים הבאים:

  1. לכל משחק יש שם/כותרת. אין לאפשר לטעון משחק בשם שכבר קיים במערכת.
  2. כל בדיקות התקינות שביצעתם בתרגיל 1 ו 2 צריכות לבוא לידי ביטוי גם כן.

Implement GUI using JavaFX

מהלך המשחק:

  • תתבצע טעינה של המשחק מקובץ ה-xml, בסיומה תוצג הודעה רלוונטית על מוכנות להתחיל את המשחק.
  • שימו לב: צריך לאפשר במצב זה לטעון קובץ משחק נוסף, כל עוד לא לחצו על כפתור 'התחל משחק'.
  • יש ללחוץ על כפתור תחילת המשחק כדי להיכנס למצב משחק פעיל, ולהציג את לוחות השחקן הראשון (לוח הצוללות ולוח המעקב של השחקן)
  • בתורו, השחקן יכול לבחור משבצת פנויה (שאיננה הותקפה בעבר) על מנת לתקוף את היריב (הדבר יתבצע, כמובן, בצורה גרפית ע"י בחירה עם העכבר ולא ע"י כתיבה בשדה טקסט).
    • במידה והתקיפה אכן צלחה ופגעה בצוללת, לשחקן יהיה תור נוסף ויועדכן מונה הפגיעות שלו.
    • במידה והחטיא יעודכן מונה ההחטאות שלו והתור יעבור לשחקן השני.
    • במידה ובחר במשבצת שהותקפה בעבר, אין להמשיך אלא לתת לשחקן לבחור משבצת פנויה.
    • בכל אחד מהמקרים יש להציג חיווי ברור.
  • כמו- כן יוכל השחקן להציב מוקש (ראה סעיף 6) – הצבת מוקש מהווה מהלך במשחק ולאחר ההצבה התור עובר לשחקן השני.
  • כאשר מגיע תורו של שחקן, הוא יכול להחליט לפרוש מן המשחק (באמצעות כפתור ייעודי).
  • המשחק נגמר עפ"י כל נהלי סיום המשחק מתרגיל 1 סעיף 11, והרי עיקרם:
    • כאשר פרש אחד השחקנים
    • כאשר טובעו כל הצוללות של אחד השחקנים
  • בגמר המשחק יש להציג את השחקנים וסך הניקוד שהם השיגו.

Show Game Statistics

  1. קבלת סטטיסטיקות
    פקודה זו תחזיר מספר פרטי מידע:
  2. כמה תורות בוצעו עד כה (כל שחקן ששיחק – נחשב לתור אחד).
  3. כמה זמן עבר מאז תחילת המשחק (מאז ניתנה פקודה 2). הזמן יינתן בדקות ושניות.
    במידה ועברה מעלה שעה – אפשר להמשיך לתת את הזמן בפורמט של דקות ושניות (למשל 84:32)
  4. עבור כל שחקן יש לציין ניקוד נוכחי (כמה משבצות תקף ופגע).
  5. עבור כל שחקן יש לציין מספר החטאות (כמה משבצות תקף אך החטיא)
  6. עבור כל שחקן יש להציג את הזמן הממוצע שנדרש לביצוע מהלך (תקיפה של משבצת)

Player Move

  1. ביצוע מהלך
    פקודה זו תקבל מהמשתמש את הקורדינטות של המשבצת אותה הוא רוצה להתקיף.
    הקורדינטות יכולות להגיע בכל פורמט שתבחרו בתנאי שהפורמט אותו אתם מצפים לקבל יובהר למשתמש.

Implement Mines

מוקש הינו אלמנט בגודל של משבצת אחת שהשחקן יכול להוסיף ללוח הצוללות שלו בכל שלב במהלך המשחק, בתנאי שהמשבצת בה הוא בוחר להציבו פנויה ואינה צמודה לאף צוללת אחרת. (כלומר ההצבה בהתאם לכללי הצבת הצוללות).
הדבר יתבצע ע"י גרירה של מוקש אל לוח הצוללות (drag & drop)
אין לממש זאת ע"י הקלדת הקורדינטות לתוך תיבת טקסט

Display Active Player data

בעבור השחקן שזהו תורו יש להציג מספר פרטים:

  • חיווי על מי הוא השחקן שזהו תורו.
  • סוגי הצוללות וכמותן בלוח.
    • לדוג' – במידה ובלוח השחקן 3 צוללות בגודל 2 יש להציג זאת, אם אחת מהם טובעה יש להציג שנותרו 2 צוללות.
  • סוגי הצוללות וכמות הצוללות שנותרו לכל סוג ליריב (בדומה לסעיף הקודם).
  • יש להציג את ניקודו.
  • יש להציג את מספר פגיעותיו והחטאותיו, זמן ממוצע למהלך וכל שאר הנתונים הסטסטיים כפי שפורטו בתרגיל מספר 1.

Resign form the game

  1. פרישה/סיום מהמשחק
    כל אחד מהשחקנים יכול לבחור לסיים את המשחק באופן יזום.
    במצב זה השחקן שנותר במשחק מנצח ניצחון טכני, בלי קשר לניקוד.
    בכל מצב של סיום המשחק יוצג מצב הלוחות (הלוחות עם השטח "הימי" של כל שחקן) הסופי של שני השחקנים כמו גם את נתוני הסטטיסטיקה כפי שמתוארים בפקודה 5.
    בסיום הפקודה התוכנית תסיים את פעולתה ותיגמר.
    אין צורך לתמוך (בשלב זה) בהמשך משחק נוסף לאחר סיום משחק אחד (אלא אם אתם מבצעים את בונוס מס' 3)

Bonus #2: Animations (5 pts.)

ממשו את האנימציות הבאות:

  • אנימציה לתקיפת משבצת – החטאה ופגיעה
  • אנימציה להטבעת צוללת
  • אנימציה לפגיעה במוקש
  • כל אנימציה אחרת שתמצאו לנכון תתקבל בברכה...

האנימציה צריכה להתבצע לכל היותר במשך 2 שניות
יש לאפשר גם לנטרל את האנימציות הנ"ל, כך שהיא לא תאיט את התקדמות המשחק

User input vaidation

All parts that getting input from user should validate that input, if input is wrong a warning should be raise.

Bonus #4: Allow player to build his own board (8 pts.)

ממשו אפשרות לשחקן לערוך לוח צוללות משלו ולא להשתמש בנתון הקיים.
במימוש זה, גודל הלוח, מספר הצוללות וניקודן יהיה לפי הנתון בקובץ ה- xml, אך הלוח עצמו יהיה לפי מסודר לפי ראות עיניו של השחקן.
במידה ותממשו בונוס זה, עריכת הלוח\ות תתבצע לפני לחיצה על כפתור תחילת המשחק ולאחר שטענו קובץ xml תקין.
עריכת הלוח תתאפשר לכל אחד מהשחקנים, אך אין זאת חובה – כלומר יכול להיות כי שחקן א יישאר עם הלוח מהקובץ ה-xml בעוד שחקן ב יערוך את לוחו.
עריכת הלוח תהיה כמובן גרפית (אין לממש זאת ע"י הקלדת הקורדינטות לתוך תיבת טקסט) ותחייב את השחקן העורך לעמוד בכל כללי הצבת הצוללות

Bonus: Implement Mine + Logic

מימוש המוקש (חובה בתרגיל 2).
המוקש כפי שנכתב לעיל הינו אלמנט בגודל של משבצת אחת אשר בעת תקיפתו מותקפת המשבצת המקבילה בלוח השחקן התוקף.
במידה וממשים בונוס זה, יש לציין זאת ולהוסיף פקודה מספר 7 – בפקודה זו נקבל מהמשתמש את הקורדינטות להצבה של המוקש.
הצבה זו תתבצע בהתאם לכללי ההצבה של הצוללות.
אם השחקן שזהו תורו פוגע במוקש, הדבר יחשב כפגיעה בצוללת, ובמידה והמוקש יגרום לפגיעה בלוח השחקן (הרי זוהי מהותו של המוקש), הניקוד על כך יוענק לשחקן שני.
עקב כך שמספר המוקשים האפשריים לא רשום בקבצי פירוט משחק של תרגיל 1, יש להגביל את מספר המוקשים ל-2 פר שחקן בבונוס זה.

Bonus #3: Load XML using 'task' (4 pts.)

טענו את קובץ ה xml באמצעות מנגנון ה task, כולל חיווים על מצב המשימה בכל רגע נתון (פתיחת קובץ, טעינה, וידוא שגיאות, עיבוד המילון וכו')

MatchBoard Screen - Logout button + Logout Servlet

יש לאפשר למשתמש לבצע Logout מהמערכת ע"י כפתור ייעודי. במידה וביצע Logout הוא נמחק מרישומי המערכת ויכול לבצע רישום מחדש (גם באותו השם). במידה וקיימים כמה browser-ים שונים שמהם מחובר המשתמש, הרי שהחל מעכשיו הוא כבר לא קיים יותר במערכת ולכן הוא יתנתק ממנה גם בכל שאר ה- browser-ים.

L Shaped ships

במשחק מתקדם יש לתמוך בצוללות בצורת האות L,
צוללת מסוג L בגודל n תהיה בעלת n משבצות בשורה ו-n משבצות בעמודה, הצוללת יכולה להיות ב-4 כיוונים אפשריים (כפי שפורט).
כמובן, כל חוקי הצבת הצוללות חלים גם כן על צוללות מסוג זה.
יש לזכור כי בקובץ ה-xml נקודת הייחוס להצבה של צוללת מצורת האות L הינה הפינה בה "נפגשות" משבצות השורה והעמודה.

Adjust to different screen sizes

כחלק מבדיקת המשחק ישונה גודל המסך (resize) ותיבדק המערכת שלכם בגדלי מסך שונים. עליכם לדאוג לסידור נכון של רכיבי ה- UI ולוודא את תקינותם גם בגודל קטן. מומלץ מאוד להשתמש ב- scroll pane (יש ללמוד עליו לבד) כדי להציג תוכן גדול בתוך שטח מסך קטן. בפרט עליכם לדאוג להראות את לוח המשחק (שיכול להגיע בגדלים שונים ומשונים) בצורה נאותה כך שאף אחד מרכיביו לא יוסתר בגלל גודל מסך קטן מדי. כמו כן חישבו איך לא להסתיר את לוחות המשחק כמו גם את היכולת לבצע מהלך ולהתקדם במשחק.
למען הסר כל ספק (!) אין "לטפל" ב resize ע"י כך שפשוט תמנעו מהמסך להיות resizable.

Show Game Status

  1. הצגת מצב המשחק
    פקודה זו תחזיר בכל רגע נתון את
    i. לוחות השחקן הנוכחי. יש לצייר את הלוחות עם שנתות לאורכם ורוחבם שיאפשרו לדייק משבצת על הלוח.
    ii. ניקוד השחקן.
    iii. חיווי לגבי זהות השחקן הנוכחי (שחקן א' או שחקן ב').

Load configuration XMLs using 'File Chooser Dialog'

טעינת קובץ ה xml תתבצע באמצעות file chooser dialog בלבד ! (אין להניח שהקובץ יחכה לכם בספרייה ייעודית, או שהבודק יקליד את תוכנו לתוך תיבת טקסט וכו'.).
הקובץ יכול להימצא בכל ספרייה חוקית על המחשב (כולל ספריה עם רווחים, אותיות בעברית וכו'). נא לוודא כי הדבר אינו מכשיל אתכם.

Start Game and Load Game

  1. Start Game should be validate that XML file already been uploaded and that he is valid.
  2. Load Game should be valid only when the not started yet

Bonus: Be able to run new game

לאפשר את המשך הרצת התוכנית לאחר פקודה מס' 6.
ברגע שמשתמש בוחר לסיים את המשחק – הוא חוזר למצב ההתחלתי המאפשר לו לטעון משחק חדש, או להתחיל מחדש את המשחק הנוכחי.
במידה ומממשים בונוס זה יש להוסיף פקודה נוספת (נגיד 8..) שמאפשרת סיום אמיתי וסופי של התוכנית ויציאה מסודרת ממנה.

Parse XML files and convert in to Java Objects + Validation

Using:
https://stackoverflow.com/questions/11221136/convert-xml-to-java-object-using-jaxb-unmarshal

  1. יש לבצע בדיקת תקינות לקלט ולהגיב בצורה נאותה לקלט שאינו תקין.
    (דוגמא לקלט לא תקין – קובץ XML שבו באחד הלוחות של השחקנים ישנן צוללות צמודות)
  1. בדיקות התקינות שעליכם לבצע בהקשר של טעינת קובץ המשחק הינם:
    8.1. הקובץ קיים, והוא מסוג XML.
    8.2. כשטוענים קובץ חדש, יש לוודא כי אין משחק שכבר מתנהל במע' (אפשרי גם ע"י חסימת פקודה מס' 1 מלהתבצע במידה ומשחק פעיל כבר קיים במע').
    8.3. גודל הלוח בין 5 ל 20 (כולל).
    8.4. כל צוללת ברשימת הצוללות, מופיעה בלוח של כל שחקן בדיוק כמספר הפעמים המוגדרת לה.
    8.5. בכל לוח אין צוללות המפרות את כללי ההצבה (צמודות, חופפות וכד'...)
    8.6. בדיקת תקינות קלט כחלק מהאינטרקציה עם המשתמש. (למשל אם אתם מצפים לקבל את מספר השורה/עמודה כחלק מפקודה, והמשתמש הכניס מחרוזת ולא מספר – עליכם לאתר זאת, להודיע זאת למשתמש ולאפשר את המשך מהלך המשחק תוךבחירת פקודה אחרת).

Display General Game Data

יש להציג בכל רגע נתון את:

  • מספר המהלך הנוכחי
  • זהות (id) השחקן הנוכחי
  • ניקוד סופי של כל אחד מהשחקנים במשחק (שאינם השחקן הנוכחי)
  • עבור השחקן שזהו תורו:
    • יש להציג את פגיעותיו והחטאותיו וזמן ממוצע למהלך
    • את מספר המוקשים הפנויים שנותרו לשחקן
    • סוגי הצוללות וכמות הצוללות שנותרו לכל סוג ליריב (רוצה אני לומר שהשחקן ידע כמה צוללות נותרו לו להטביע)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.