Maruf
Rahman

2048

2048 is a popular mobile game that is quite easy to learn how to play. In the game, number blocks with values of various powers of two are merged with number blocks with the same value. Upon merging the two number blocks into one block, the value in the block is doubled. On every move, a new block with value two is added to a random available position. The goal of the game is to keep merging identical number blocks until the number 2048 is reached. However, there are only a limited number of blocks in the board available. The players loses when all the slots are filled before the number 2048 is reached.

Game controls:
Arrow keys: move the pieces (up, down, left, right)

The project was designed using the standard Java library and Princeton's StdDrawPlus library which contributed in structuring the GUI and the controls.

Quick Weather

This website presents the users with current weather conditions of their current city. It also brings to the user current weather conditions and local time of many major cities around the world.

Written in Javascript, the website uses Yahoo Weather API and JSON to fetch weather information from the Yahoo website. The website uses IP information to determine the user's current city; so if the user is using a VPN, the information will not be accurate.

Flee

The idea of this game came to me when I was self-teaching how to animate objects by themselves in the web browser. I already had prior knowledge about animation implementation in Java and so I decided to try it out in Javascript. It is a simple game that consists of moving balls and a square controlled by the player with a mouse.

The goal of the game is to evade the moving balls as the balls move around inside a box with changing speed. The player controls the red square inside the box with a mouse and tries to avoid contact with any of the moving balls. The player is at times provided with power which lowers the difficulty for a short period of time (more details on the game site). The game halts when the square touches any of the balls during the gameplay. The score is the duration of the player's survival inside the box.

Using a mouse highly recommended when playing this game since it requires swift movement of the cursor.

Tic-Tac-Toe with AI

I was inspired to work on this project while I was taking a class on Artificial Intelligence. In the class, we develop an AI for the pacman game which deploys various strategies before it efficiently beats the game. One of the strategies that we learned was called Minimax which has a highly effective application on the game of tic-tac-toe. Even though we did not delve deep into the study of that particular strategy, I decided to try it in my leisure time which gave birth to this project.

The AI that I have designed for this game is quite solid. I personally have not been able to defeat it. However, if you feel confident, give it a try.

Checkers

This is not the typical checkers game you play. It comes with multiple new features. In addition to the pawn piece, it contains bomb and shield pieces. All pieces move diagonally and capture opponent's pieces by hoping over them which can also be done in chains. However, the bomb piece can only capture once and upon capturing it will explode neutralizing all adjacent pieces except the shield pieces. The player that loses all his pieces before the other loses the game.

Game controls:
Mouse: move the pieces
Space: change turn
N: undo move

The game was designed using the standard Java library and Princeton's StdDrawPlus library which contributed in structuring the GUI and the controls.

Gitlet

Gitlet is one of the heavy-duty projects I have built. It comes with a lot of features and functionalities. Gitlet is a simpler and a smaller version of the famous version control system called Git. This app is very user-friendly and works quite similar to Git. The local version of this app works perfectly well but the remote version needs further development.

As of now, the following commands are fully functional:
  • init
  • add [filename]
  • commit [message]
  • rm [filename]
  • log
  • global-log
  • find [commit-message]
  • status
  • checkout [filename] / [commit-id] [filename] / [branch name]
  • branch [branch name]
  • rm-branch [branch name]
  • reset [commit id]
  • merge [branch name]
  • rebase [branch name]
  • i-rebase [branch name]

To try it out, download the zipped folder on the left and run the Gitlet.bat file (Windows Batch File). Make sure to copy the two files to the folder where you want to create the repository.

NGordNet

This app closely deals with the usage of the English language words over time. It explores the following:
  • The relative popularity of words over time.
  • The relative popularity of categories of words over time.
  • The hyponyms of a given word.
  • The length of words.
  • Zipf's law.

The app generates the statistics based on Google NGrams. It uses the Xeiam-Xchart API to plot the graphs and a custom data structure to keep track of the yearly records of the words.

To try it out, download the zipped folder on the right and run the NGordNet.bat file (Windows Batch File). For further information, type 'help' in the app.

Autocomplete

The functionality of this app is quite common in today's websites. The app autocompletes or suggests words for prefixes as the user types. As the user types in letters, the app will generate a certain number of top choices depending on the weights of the words. Upon clicking on any of the suggested words, the app opens up the default browser and presents the user with its search results.

The logic of the app has been implemented using a prefix-tree also known as a Trie (in this case, a Ternary Search Trie). In addition to the Java Standard library, a few supporting classes from the Princeton CS library was used in the app's development.

To try it out, download the file on the left. The attached version of the app is run on a database of city names around the world with their populations as their weights. Please, note that the name of the cities are case-sensitive.

BookmarkApp

This app is one of the earliest projects of my Java coding life. URLs can be saved on an executable file as bookmarks.

The functionality is very similar to the bookmark feature on many browsers. However, websites are just one click away after the computer boots up. Having the app start automatically when the computer boots up saves the user a little time every time he visits one of his frequently visited websites. Clicking on a bookmark in the app will open up the user's default browser and present the requested page.

Closing the app will retain all the saved bookmarks and will be available on subsequent accesses. In addition, an image file can also be associated with the saved bookmark. The app was designed using the standard Java library.

Credit Card Number Checker

This application checks if a sequence of numbers is a valid credit card number from one of the following vendors:
  • Visa
  • MasterCard
  • Discover
  • American Express

The project was designed using the standard Java library.