- Notifications
You must be signed in to change notification settings - Fork53
Pa2 bit board storage#9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Open
Ahmedbennaji wants to merge13 commits intomasterChoose a base branch fromPA2_Bit_Board_Storage
base:master
Could not load branches
Branch not found:{{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline, and old review comments may become outdated.
Uh oh!
There was an error while loading.Please reload this page.
Open
Changes fromall commits
Commits
Show all changes
13 commits Select commitHold shift + click to select a range
6891a71
initial assignment code commit
mwittiebf68f80
updated the assignment text
mwittie23d335b
updated the assignment text
mwittie5f8fa9a
added architectural diagram and link to lecture video
mwittie5b4c7e1
converted to linux line endings and added an extra line
mwittieb1f9236
converted to linux line endings and added an extra line
mwittie9b45d96
added dos2unix conversion to cmake files
mwittiee073da0
changed tests to use a 10 by 10 board
mwittiea45d455
added PA2 code template
mwittie317884d
Updated the assignment text
mwittiee49423c
updated the assignment to request private repositories
mwittiee9ac5fd
change comment from set to check array bounds
mwittieec79d68
add cmake dependencies for run_server and run_client
mwittieFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
55 changes: 55 additions & 0 deletions.gitignore
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
# Prerequisites | ||
*.d | ||
# Object files | ||
*.o | ||
*.ko | ||
*.obj | ||
*.elf | ||
# Linker output | ||
*.ilk | ||
*.map | ||
*.exp | ||
# Precompiled Headers | ||
*.gch | ||
*.pch | ||
# Libraries | ||
*.lib | ||
*.a | ||
*.la | ||
*.lo | ||
# Shared objects (inc. Windows DLLs) | ||
*.dll | ||
*.so | ||
*.so.* | ||
*.dylib | ||
# Executables | ||
*.exe | ||
*.out | ||
*.app | ||
*.i*86 | ||
*.x86_64 | ||
*.hex | ||
# Debug files | ||
*.dSYM/ | ||
*.su | ||
*.idb | ||
*.pdb | ||
# Kernel Module Compile Results | ||
*.mod* | ||
*.cmd | ||
.tmp_versions/ | ||
modules.order | ||
Module.symvers | ||
Mkfile.old | ||
dkms.conf | ||
.idea/* | ||
cmake-build-debug/* |
9 changes: 9 additions & 0 deletions.gitmodules
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
[submodule "cereal"] | ||
path = cereal | ||
url = git@github.com:USCiLab/cereal.git | ||
[submodule "googletest"] | ||
path = googletest | ||
url = git@github.com:google/googletest.git | ||
[submodule "dtl"] | ||
path = dtl | ||
url = git@github.com:cubicdaiya/dtl.git |
15 changes: 15 additions & 0 deletionsCMakeLists.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
cmake_minimum_required(VERSION 3.6) | ||
project(Battleship) | ||
enable_language(ASM_NASM) | ||
set(CMAKE_CXX_STANDARD 14) | ||
add_subdirectory(googletest) | ||
add_subdirectory(src) | ||
add_subdirectory(test) | ||
80 changes: 79 additions & 1 deletionREADME.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,79 @@ | ||
# CSCI 466 PA2 - Bit Board Storage | ||
## Instructions | ||
Complete the following assignment individually. | ||
Submit your work on D2L into the "Programming Assignment 2" folder. | ||
## Learning Objectives | ||
In this programming assignment you will: | ||
- Implement a class to store the setup board as bits. The core functionality of your class will be implemented in the | ||
Netwide Assembler (NASM). | ||
## Overview | ||
Your objective is to extend your basic implementation of the | ||
[Battleship](https://en.wikipedia.org/wiki/Battleship_\(game\)) | ||
game to store the player setup boards in two dimensional bit arrays. | ||
The core of the idea is that the `Server` reads in the player setup boards and instead of referencing the file to | ||
evaluate each shot, it saves the board in internal memory. | ||
You might wonder why not store the board in a two dimensional vector? | ||
Well, since all we want to store is whether a ship is present in a given position, using a vector, even just of bytes, still uses 8 bits for every ship position. | ||
We want to get this down to one bit. | ||
Of course you could use something like an array of [bitsets](http://www.cplusplus.com/reference/bitset/bitset/), but | ||
you can save even more memory by implementing a two dimensional bit storage yourself in assembly. | ||
For very large data sets, or on very memory-constrained devices, every bit counts! | ||
To complete this assignment you will extend your current implementation of Battleship. | ||
I have added some functions that you'll need to implement, but most of your `Server` code should carry over. | ||
Your `Client` code will remain unchanged. | ||
I have also added a few tests to check the new functionality, while keeping all the old tests in tact. | ||
So, if you have those working, great! | ||
If not, you can earn back some points by getting your code to pass the tests you missed in PA1. | ||
## Program Invocation | ||
To play Battleship you should first start the server by running the `run-server` executable. | ||
Then start the player clients by running two instances of the `run-client` executable. | ||
Unfortunately, the client and server executables will not do anything interesting until you implement `Client.cpp` | ||
and `Server.cpp`. | ||
As you progress in these implementations, your code will pass more and more tests in `tests.cpp`. | ||
When your code passes all the tests, you will be able to run the client and server executables to play the game. | ||
## Bonus | ||
I will award __one bonus point__ for each of the following: | ||
* Server sends a different result when a ship is sunk. The client implementation notifies the player when they sink a | ||
ship (implementation and tests). | ||
This will require you to store more than 1 bit in the setup board array - you will also need to store ship type. | ||
## What to Submit | ||
Submit your work on D2L into the "Programming Assignment 2" folder. | ||
* A text file containing a link to a GitHub repository with your solution for the base assignment. | ||
Please not that your repository should be private, so that other students cannot see your solutions. | ||
You can create an unlimited number of private repositories by upgrading your github account to the pro version for | ||
free using the [academic discount](https://help.github.com/en/github/teaching-and-learning-with-github-education/applying-for-an-educator-or-researcher-discount) with your school email. | ||
In order for us to be able to see your solution, please add github users `cooperstrahan` and `mwittie` as | ||
collaborators through repository settings. | ||
* If you implement the bonus solution, please submit a YouTube video of your implementation. | ||
Be sure to show the tests you have written as well as your assembly code. | ||
## Grading | ||
We will grade your submissions based on how many test cases in `tests.cpp` your solution passes. | ||
1 change: 1 addition & 0 deletionscereal
1 change: 1 addition & 0 deletionsdtl
1 change: 1 addition & 0 deletionsgoogletest
Submodulegoogletest added at 8b4817
Binary file addedimages/system_architecture.png
Loading
Sorry, something went wrong.Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletionsplayer_1.setup_board.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CCCCC_____ | ||
BBBB______ | ||
RRR_______ | ||
SSS_______ | ||
D_________ | ||
D_________ | ||
__________ | ||
__________ | ||
__________ | ||
__________ |
10 changes: 10 additions & 0 deletionsplayer_2.setup_board.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
C________D | ||
C_________ | ||
C_________ | ||
C_________ | ||
CBBBB_____ | ||
_______RRR | ||
_________S | ||
_________S | ||
_________S | ||
D_________ |
38 changes: 38 additions & 0 deletionssrc/BitArray2D.asm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
global set_bit_elem | ||
global get_bit_elem | ||
section .text | ||
set_bit_elem: | ||
push rbp ; save the base pointer on the stack (at rsp+8) | ||
mov rbp, rsp ; set up the rbp for the bottom of this frame | ||
; rdi contains array pointer | ||
; rsi contains row width | ||
; rdx contains row | ||
; rcx contains col | ||
; add your code here | ||
mov rsp, rbp ; restore stack pointer to before we pushed parameters onto the stack | ||
pop rbp ; remove rbp from the stack to restore rsp to initial value | ||
ret ; return value in rax | ||
get_bit_elem: | ||
push rbp ; save the base pointer on the stack (at rsp+8) | ||
mov rbp, rsp ; set up the rbp for the bottom of this frame | ||
; rdi contains array pointer | ||
; rsi contains row width | ||
; rdx contains row | ||
; rcx contains col | ||
; add your code here - for now returning 0 | ||
mov rax, 0 | ||
mov rsp, rbp ; restore stack pointer to before we pushed parameters onto the stack | ||
pop rbp ; remove rbp from the stack to restore rsp to initial value | ||
ret ; return value in rax |
44 changes: 44 additions & 0 deletionssrc/BitArray2D.cpp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// Battleship game assignment for MSU CSCI 366 | ||
// Copyright (C) 2020 Mike P. Wittie | ||
// | ||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
#include <math.h> | ||
#include "BitArray2D.hpp" | ||
BitArray2D::BitArray2D(unsigned int rows, unsigned int columns) { | ||
} | ||
BitArray2D::~BitArray2D() { | ||
} | ||
bool BitArray2D::get(unsigned int row, unsigned int column){ | ||
// check array bounds | ||
// get the element | ||
return get_bit_elem(array, columns, row, column); | ||
} | ||
void BitArray2D::set(unsigned int row, unsigned int column){ | ||
// check array bounds | ||
// set the element | ||
set_bit_elem(array, columns, row, column); | ||
} |
110 changes: 110 additions & 0 deletionssrc/BitArray2D.hpp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
// Battleship game assignment for MSU CSCI 366 | ||
// Copyright (C) 2020 Mike P. Wittie | ||
// | ||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
#include <iostream> | ||
#include <exception> | ||
#ifndef BATTLESHIP_BITARRAY2D_HPP | ||
#define BATTLESHIP_BITARRAY2D_HPP | ||
using namespace std; | ||
class BitArray2DException: public exception | ||
{ | ||
private: | ||
char *cstr; | ||
public: | ||
BitArray2DException(string message){ | ||
cstr = new char[message.size() + 1]; | ||
message.copy(cstr, message.size() + 1); | ||
cstr[message.size()] = '\0'; | ||
} | ||
~BitArray2DException(){ | ||
delete cstr; | ||
} | ||
virtual const char* what() const throw(){ | ||
return cstr; | ||
} | ||
}; | ||
/** | ||
* Sets a bit in a two dimensional bit array | ||
* @param array - pointer to a bit array | ||
* @param row_width - the number of bits in a row of the two dimensional array | ||
* @param row - row index (0 indexed) | ||
* @param col - column index (0 indexed) | ||
*/ | ||
extern "C" void set_bit_elem(char *array, unsigned int row_width, unsigned int row, unsigned int col); | ||
/** | ||
* Gets a bit in a two dimensional bit array | ||
* @param array - pointer to a bit array | ||
* @param row_width - the number of bits in a row of the two dimensional array | ||
* @param row - row index (0 indexed) | ||
* @param col - column index (0 indexed) | ||
* @return a boolean containing the bit at [row][column] | ||
*/ | ||
extern "C" bool get_bit_elem(char *array, unsigned int row_width, unsigned int row, unsigned int col); | ||
class BitArray2D { | ||
private: | ||
/** | ||
* The 'char' types does not mean that each bit is stored as a character - we just need the pointer | ||
* to have some type since there is no type for bit. | ||
*/ | ||
char* array = nullptr; | ||
unsigned int rows; | ||
unsigned int columns; | ||
public: | ||
/** | ||
* Sets up the array to store rows * columns bits | ||
* @param rows - number of rows | ||
* @param columns - number of columns | ||
*/ | ||
BitArray2D(unsigned int rows, unsigned int columns); | ||
/** | ||
* Deallocate memory used for array | ||
*/ | ||
~BitArray2D(); | ||
/** | ||
* Get bit at row and column | ||
* @param row | ||
* @param column | ||
* @return bit at row and column as bool | ||
*/ | ||
bool get(unsigned int row, unsigned int column); | ||
/** | ||
* Set bit to true at row and column | ||
* @param row | ||
* @param column | ||
*/ | ||
void set(unsigned int row, unsigned int column); | ||
}; | ||
#endif //BATTLESHIP_BIT_ARRAY_HPP |
Oops, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.