Skip to content

juanpabloduqueo/PortfolioProject1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Portfolio-Project

This project was the final assignment of the Intro to Computer Science course (CS162) at Oregon State University. It is written in Python 3.

Write a class named HasamiShogiGame for playing an abstract board game called hasami shogi. We'll be using the rules for "Variant 1" on the Wikipedia page, including the diagram of the starting position. Custodian captures may be made on multiple sides (up to 3 sides) of the moved piece. For example if the black piece on square h6 in the diagram below moves to square c6, then the red pieces at c4, c5, and b6 would be captured. If instead, the black piece at h6 moves to h1, then the red pieces at e1, f1, g1, and i1 would be captured.

  1 2 3 4 5 6 7 8 9
a . . . . . B . . .
b . . . . . R . . .
c . . B R R . . . .
d B . . . . . . . .
e R . . . . . . . .
f R . . . . . . . .
g R . . . . . . . .
h . . . . . B . . .
i R B . . . . . . .

Locations on the board will be specified using "algebraic notation", with rows labeled a-i and rows labeled 1-9, as shown in the diagram of the starting position shown on the Wikipedia page.

You're not required to print the board, but you will probably find it very useful for testing purposes.

Tip: Probably the easiest way of representing the board is to use a list of lists.

Your HasamiShogiGame class must include the following:

  • An init method that initializes any data members.
  • A method called get_game_state that takes no parameters and returns 'UNFINISHED', 'RED_WON' or 'BLACK_WON'.
  • A method called get_active_player that takes no parameters and returns whose turn it is - either 'RED' or 'BLACK'.
  • A method called get_num_captured_pieces that takes one parameter, 'RED' or 'BLACK', and returns the number of pieces of that color that have been captured.
  • A method called make_move that takes two parameters - strings that represent the square moved from and the square moved to. For example, make_move('b3', 'b9'). If the square being moved from does not contain a piece belonging to the player whose turn it is, or if the indicated move is not legal, or if the game has already been won, then it should just return False. Otherwise it should make the indicated move, remove any captured pieces, update the game state if necessary, update whose turn it is, and return True.
  • A method called get_square_occupant that takes one parameter, a string representing a square (such as 'i7'), and returns 'RED', 'BLACK', or 'NONE', depending on whether the specified square is occupied by a red piece, a black piece, or neither.

Feel free to add whatever other classes, methods, or data members you want. All data members must be private. Every class should have an init method that initializes all of the data members for that class.

Here's a very simple example of how the class could be used:

game = HasamiShogiGame()
move_result = game.make_move('i6', 'e3')
print(game.get_active_player())
print(game.get_square_occupant('a4'))
print(game.get_game_state())

The file must be named: HasamiShogiGame.py

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages