CSE1301 Computer Programming: Lecture 29 Group Project: “Quabble”

Download Report

Transcript CSE1301 Computer Programming: Lecture 29 Group Project: “Quabble”

CSE1301 Computer Programming: Lecture 29 Group Project: “Quabble”

Topics

• Motivation • Tasks • The Game:

Quabble

• Design Document

Motivation

• Experience developing software with others • Go through phases of software development cycle • Produce a design document, write code from it • Write code using functions, arrays and structs • Construct test sets: – for functions – for complete program.

• Combine functions written by different people

Tasks

• Analyse a problem specification • Decompose a large program into smaller pieces – combine top-down and bottom-up design • Design data structures • Write algorithms for functions • Turn algorithms into code • Test functions and complete program

“Quabble”

• The Bag of Tiles, each tile: • The Game Board: W 4

Quabs:

A 1 I 1 W 4 D 2 A 1 M 3 E 1 N 1 • The Main Aim: – form words using tiles on the board – word must include all quabs – score: sum of the points on the tiles

Example

Quabs:

A 1 I 1

Valid Words:

aid (4) aide (5) aim (5) aimed (8) amid (7) anemia (8) maiden (9) median (9)

Score:

55 W 4 D 2 A 1 M 3 E 1 N 1

Invalid Words:

men (no A and I) dawn (no I) wait (T not in board) aided (two D’s)

Possibly Valid Words: (Depending on the “official” dictionary)

Aida (5) Damian (9) Weidman (13)

The Blank Tile

• • Can be used as a substitute to any letter • Does not earn points

Example: Quabs:

Y 4 D 2 T 1 Z 10  M 3 I 1 C 3

Valid words:

D A Y (6), DI R TY (8), DIZ Z Y (17)

Bonus Points

• Double Points: – If there are no blank tiles on the board, and – player forms a word using all the tiles – Then, player earns twice the points for that word. • Extra Points: – If the player is able to guess all the valid words found by the program – Then, player earns twice the number of words found

Dictionary File

• Lists all (almost) known English words • Plain text (not Word document!) • One word per line • Not necessarily alphabetically sorted • Some words may be capitalised • Sample dictionary:

words.txt

– used by a spell checker – contains proper nouns – US English spelling

Configuration File

• Sample configuration file:

quabble.cfg

8 2 words.txt

* 2 0 A 9 1 B 2 3 C 2 3 D 4 2 E 12 1 ...

The Program: Initialization

• Reads configuration file to determine: – number of tiles on the board – number of quabs – how many tiles per letter (including blank) – how many points per letter • Set up the bag of tiles

The Program: Board Setup

• Pick the tiles from the bag at random • Find all valid words – while there is no solution, put the tiles aside and pick a new set of tiles from the bag – Q: What if no valid words can be formed, and the bag ran out of tiles?

– A: Put all tiles back into the bag and re-mix.

• Compute maximum total points the player can earn

The Program: Interaction

• Must be case insensitive –

Eg

: “Maiden”, “maiden”, “maIdEN”, “MAIDEN” • Must show: – player’s current score – number of valid words the player has found so far – number of words yet to be found – total points left for the player to earn • Correct guess: show points earned • Wrong guess: preferably, say why

The Program: End of Game

• Game finishes when: – player found all the valid words (and earns extra points) – player gives up • If player gave up: – show all words missed by the player – show total points the player could have earned • Show: – player’s cumulative score on all boards played – cumulative maximum total points

The Program: New Game

• At the end of each game, the player can: – end program, or – play a new board (game): • If player wants to play a new board: – Tiles on the board are set aside, and a new set is taken from the bag – If there are not enough tiles left in the bag, put all tiles back into the bag and re-mix.

– (Recall: Board must have at least one solution)

How Do We Start?

• How do we represent the data?

• What are the data sources, sinks and storage?

• What operations / actions / manipulations can we do with each of those data?

• How can we use these operations as building blocks to accomplish the task?

– top-down – bottom-up • Design Document

Design Document

• Sections: – data – modules – algorithms – test data – Program I/O – Group Organization • Marked as a group effort

Data Structures

• How do we represent the data?

– a tile – a board – a bag of tiles – a word – the program’s answer key – the player’s answer sheet – a game – transaction data • Actual C code

Data and Modules

• Bottom-Up approach: – From simple operations on simple data to complex operations on complex data – Example: • operations on a tile : initialize, print • operations on a board : initialize, print • printing a board : print a tile at a time

Modules

• Top-Down Approach: – From biggest to smallest task – Example: Main algorithm • initialization • board setup • interaction • validation • end game

Modules

• Top-Down Approach: – From biggest to smallest task – Example: Main algorithm • initialization – read configuration file – initialize bag of tiles – initialize score • board setup • interaction • validation • end game

Modules

• Structure chart – control coupling – data coupling • avoid implicit data coupling (global variables) • size of data coupling corresponds roughly to level • Purpose and functionality of each module • Actual C function name and prototype (parameters and return type)

Algorithms

• Describe in pseudo-code or flow-chart • Review structure chart: – Do the parameters provide all the information we need?

– Can the encapsulation of the parameters and return values into a single transaction data structure help produce a cleaner algorithm for the module?

– Are the modules coherent?

Test Data

• How do we test that modules, and the whole program, are correct?

• Test data: Valid, Invalid, Boundary • Test all possible execution paths • Need for small test programs which pass test data into a function, and show the results.

• Possible limitations with respect to invalid test data.

Program I/O

• • Input and Output: Data-flow diagram

Not

just user interface: I/O to file, printer, etc as well • Simple text-based user interface: okay

Group Organization

• Equal distribution of labor • Demonstrator’s approval • Basis for marking Part 2.

Individual Modules

• Code, compile, test, document • “The C Style Guide” • Need for test programs (simple

main()

) • Marking: Individual – proportional to how much of your assigned tasks you were able to complete – no extra marks for doing other people’s tasks

System Integration

• Usual cause of problems: – global variables (implicit coupling) – poor design: overlapping modules – module’s functionality not clearly defined – conflicting data structure or function name – data coupling (parameters and return values) do not match – embedded numbers in the code, rather than using

const

or

#define

.

– poor documentation (functions and in-line)

Advanced Component

• Specification 1 – Dictionary Update – Multiple Players • Specification 2 – Unique Boards • Specification 3 – Timer

Miscellaneous

• Sample Bingo Program – Randomization (also: Dietel & Dietel 5.9) – Avoiding duplicates – Validating numerical input – Use of #include and #define • Tip: No need to load the whole dictionary file into memory • Group coordination: Contact details!

• Questions? • Have fun!