LoLo,GUI。
Introduction
This assignment will use concepts taught throughout the course to extend the functionality of the provided tile based game. This assignment will ask you to extend the game with basic, intermediate and advanced features. For CSSE7030 students there will also be an open-ended component.
The assignment will focus on the concept of Graphical User Interfaces (GUIs). You will be requested to implement extra functionality to the base game including extending the GUI for a better game experience.
Note: There will not be a practical interview for the third assignment.
Assignment Tasks
Task Breakdown
CSSE1001 students will be marked out of 20 and CSSE7030 students will be marked out of 25 based on the following breakdown.
Mark Breakdown
For each task, marks will be awarded proportionately according to the following breakdown.
Code Quality
Code is readable. Appropriate and meaningful identier names have been used. Simple and clear code structure. Repeated code has been avoided.
Code has been simplied where appropriate and is not overly convoluted.
Documentation
Documented clearly and concisely, without excessive or extraneous comments.
Functionality
Components are functional, without major bugs or unhandled exceptions.
Download the Files
Before beginning work on the assignment you must download a3_files.zip provided from the course website.
Inside a3_files.zip, there should be a file called a3.py. This is the file where you will write your assignment. The other files are support files. These must not be edited. Their purpose is explained below.
Support Code
You have been supplied with a large amount of support code to help you complete this assignment. To begin the assignment, you do not need to understand much of this code. As you progress through the tasks, the degree to which you should understand this code will increase.
| File |
Description |
Understanding |
| a3.py |
Main assignment file. |
Task 1 |
| play_game.py |
Plays a game of Lolo. |
Task 1 |
| game_*.py |
Concrete modelling amp; app classes for each game mode. |
Task 1: Simple Task 3: Solid |
| colours.py |
Mappings of colour names to codes. |
Task 1 |
| highscores.py |
High score management. |
Task 2 |
| view.py |
GridView widget. |
Task 2 |
| model.py |
Abstract modelling classes. |
Task 3 |
| tile_generators.py |
Concrete tile generator classes. |
Task 3 |
| modules/ |
Third-party libraries. |
Task 3 |
*Note: Ideally, each game type would be in a subdirectory called game, without the game_prefix. However, this would add complixity for managing this, so the prefix was chosen instead for simplicity.
Event Listeners
Note: In this section, the word function is used to mean anything that is able to be called like a function, such as a method, a lambda, etc.
The *Game classes (AbstractGame and its subclasses) and the GridView class follow a pattern which allows you to attach a function to be called w㕮╴†††⤠㱴⽯㹲ഠ੬⁴㱮㹧䤠‾‼⠠㕲Ɱ†ㅩびⰠ㉡ぬⱬ㑤〠ⱴ⥥㱮⽴㹭൩ੴ⁴†㱰㹴⸬㰠⽡㸠൩ੳ㰠⽡㹩൭ੰ㱬㸠൯੦㰠㹨䉥䱳䅥†⁓†‼⡩⤠Ⱪ⁵䈠䱩䅡㱯⽷㸠ൔ੫㩲†䙨Ɱ†⁴ ⁔⸠㱡⽮㸠൧ੲ㱩⽤㹴ഠ㱲㌠⁵㵦≵䭬⵰≥㸠䭡㱳⽫㌱㸠൹੯㱵㹳䥨†㩥㱮⽴㹴൯ਠ㱡㹲൯ੰ⁴㱥㸠⁴⭥†㩨㱤⽵㹥ഠੳ⁴⁵㱮㸠⭮㩵䅡⸠㱯⽷㹥൶㱮⽴㸼യੰ㰾㸊㩩䤽ⰱ•†䵩⁇⁰⸠⁰䥵⁰⁴⁴䵳Ⱐ⁇⸠㱌⽯㹯ഠ੧㱡㉥㵯≵ⴠ㉣䥯ⴠ䙯≵㹰㈠䥡䘬㰳⼬㉌㹵ൣ੫㱹㸷
⁔††䝯䤠⁴†⁴㱥⼠㹳ੲ㰠㹮䥴†⁴†䝢䥬Ɐ⁷⁰‾″⁰††⸠㱯⽦㹴൨੩㱳㍴㴠≩䅳ⴠ䝴≣㹬䅡ⵦ䝡㰠⽇㍉㸮ഠ㱨㹳䤠Ɱ䅭䜠Ⱐ†⁂䉡䱯䅰⸠⁔†⁴†⁰⸠㱯⽦㹡൮੩㱭㸍ഊ਼㱰㹔䡨㩩⁴⁵††⁰⁴› ⱟ⁽†⁴⁷†㱮⽴㹴ൡੳ㱫⽳㹁൳ਠ㱴㹥†⁵䙳⁷Ⱳ⁰″•⁵ⰾ‾†㱴⽳㹦൲੯㱭㸠ൔ੨㱩㸠䡣㩳†䙭⁴⁷ⱬ††⁴♮㬼⁰⸊†䄠䝧♟㭮†
††⡡⁵⥩Ɱ⁁䌼††⁽††⁴⸠⁴⁰䉬䱲䅱⸻㱧⼼㸯൬੩㨯⁵䉬⁎†ⱶ⁷ⱴ ※ 〩⸮㰼⼯㸾ਊ㰼⽨㸢ാੌ㱯㍯‼㴳∾䰍ⵦ≣㹬䱡㱌⽯㍯㸬ഠ㱨㹣††⸠䥥†⁴⸠⁴ Ⱳ⁸㱥⽸㹴൹ਠ㱯㸠㩸㱴⽲㸠൭㱲㸠൷੩†㱥㹷䱡㩤‼†ㅬ⠠⁵㐼ⸯ㍨⸳‾䰍⤾⹉㱭⽰㹭੮⁴††㱭㹵䈠㩩⁴⁆䝩Ɑ䕮⁔䝨Ⱪ䡥⡤⤊⸼⁵†㙲†㍧䅭䘊‾⁴㜺⸠⁅ⴠ䕴⁰䍰䕣㝡ぴ㍩は㰾⼍㸯൵੬‾ ‼㱰㹯⁏䕮㨠⁏䙓⁵⁰㰠⽴㸠൧੬㰠㹮䅵䜠㨠 †⡬‾㕄ㅡ䅧ⴳ䝰⥥⸠㱦⽯㹯൷੩㱮⽧㹩ൡ੬㱯㌠㵥≳䠺ⴾⴾ∼㹬䡩⁶⁁㱩⽯㌺㸠੦㰠㹨⁴⁴†††⸠䥮‾†⁇†Ɑ⁷⡦⁵⁴⥳㱯⽲㸮഼ਯ㱬㸾 ⁴⁴‾ ⁗†Ɱ⁴㱶⽥㹡൮㰠㹨㩬㱥⼬㹩൮ੳ㱴㹤ഠ੯†㱩㸠䉪㨠⁴䑨Ⱪⱴ†⁵†⁵⡨㕧⸮ㄼⸯ⁰䄾⵰⁴䝨⥮㰠⽢㹴൯੮†㱯㹴䱩㩮†⁴†⁴♥㭴⁴††††ⵤ㱴⽹㹳ഠ㱣⽴㹥ബਠ㱴㉥†㵴≴㍱䅯ⴠ䙳≮㹤㌠⁴䅨䙥㱉⽴㉳㹨൯ੵ㱬㌠㵯∠䵩䝨䵭≯㹦䴠䝧䴠㰠⽨㍳㸠൲㱭㹩 ⁁Ɫ䝧†䵡†䝥⸠Ⱞ†⁹⁴⁴††䥥⁴⁶♴㭷⁹†Ɱ ‼†⸾㱆⽩㹥ਠ㱮㹭†⁶⁵ⰼ Ⰰ ⸀ 䤀 ⸀ ⸀ 䘀 Ⰰ 䄀䜀 ⸀㰀⼀㸀ഀ㰀㸀䴀 䜀 ⸀㰀⼀㸀ഀ㰀㸀䤀Ⰰ ⠀Ⰰ 䴀 ㌀Ⰰ 䰀 㜀Ⰰ ⤀⸀ 䄀 ⠀ 㘀⸀㈀⸀ 䜀 䴀 㜀⸀ ⴀ䔀 䌀䔀㜀 ㌀ ⤀⸀㰀⼀㸀ഀ㰀㌀ 㴀∀ⴀ䜀ⴀ䴀∀㸀 䜀 䴀㰀⼀㌀㸀ഀ㰀㸀䄀 Ⰰ ⸀ Ⰰ ⸀㰀⼀㸀ഀ㰀㸀 ☀㬀 ⸀ 䘀 Ⰰ ⸀ Ⰰ Ⰰ ⸀㰀⼀㸀ഀ㰀㸀 ⸀ ⸀㰀⼀㸀ഀ㰀㸀 䨀 ⸀㰀⼀㸀ഀ㰀㈀ 㴀∀ⴀ䔀ⴀ䌀䔀㜀 ㌀ ⴀ∀㸀ⴀ䔀 䌀䔀㜀 ㌀ 㰀⼀㈀㸀ഀ㰀㸀 䌀䔀㜀 ㌀ ⸀ 䌀䔀 Ⰰ ⸀㰀⼀㸀ഀ㰀㸀 ⸀ 䤀 ⸀ 䴀 ⸀ 䔀 ⸀㰀⼀㸀ഀ㰀㸀 ⸀㰀⼀㸀ഀ㰀㸀 䐀䘀 Ⰰ ⸀⸀ 䐀䘀 㬀 ⠀ ⸀ ⸀Ⰰ ⤀⸀ Ⰰ ⸀ 䘀 Ⰰ 㨀㰀⼀㸀ഀ㰀㸀䤀 㨀㰀⼀㸀ഀ㰀㸀㰀㸀 ഀ㰀⼀㸀㰀⼀㸀ഀ㰀㸀䤀 ⴀ ⸀㰀⼀㸀ഀ㰀㌀ 㴀∀∀㸀㰀⼀㌀㸀ഀ㰀㸀ഀ 㰀㸀 㰀⼀㸀ഀ 㰀㸀䈀 ⼀ 㰀⼀㸀ഀ 㰀㸀䄀 㰀⼀㸀ഀ 㰀㸀 㰀⼀㸀ഀ 㰀㸀䴀 ⠀ ⤀㰀⼀㸀ഀ㰀⼀㸀