Sunday, October 28, 2018

(10-28) Achievements

This week, I extensively studied different achievement types and their purposes.

The definition of an achievement is a goal set by either the player, or something hard-coded into the game. The purpose of achievements is to increase the "life expectancy" of the game. That is, encourage the player to want to play for a longer period of time. Having an effective achievement system tied to our game and Canvas would lead to a successful study.

There are many types of achievements. Following are the types I believe would be beneficial to our system.

Challenge: Achievements that add difficulty to the game, or encourage a non-conventional play style. We would not want to encourage anything non-conventional, but we could have a challenge such as "score a 95 or higher on 5 quizzes in a row", that would unlock a rare card for the game.

Tutorial: Achievements emphasizing mastery of basic game mechanics. This would be incredibly useful for our system, for then we could have achievements such as "upload 5 assignments on time" or "log into the game every day for a week".

Progress: Achievements formed by mastering certain gameplay mechanics. In our system, this could apply to achievements such as "maintain a 90+ grade for a month", "finish the semester with an 80+", and "submit a total of 20 assignments on time".

Multiplayer: Achievements focused on your progress compared to other players. This one would be difficult, but could take the form of some kind of leaderboard.

In order for achievements to be effective, you have to have a way to visualize them. In our system, we would have a location within canvas and the game in which users can see what achievements and cards they have unlocked.

Next week, I will finalize exactly what our achievements will be, and continue trying to pull data from the game server into our system.

Sunday, October 21, 2018

(10-21) Planning Continued

This week was midterms week, so I was not able to get as much work done as I would like. However, I was able to get my site 100% working with PHP.

Now, I'm reading research papers that involve commonly used achievement systems used in video games in order to decide which system would be most effective in our game. Additionally, I am now trying to pull data from our game server to my site as well, so I'll be able to display data from canvas and the game server.

To display data, I'm using AJAX to display data sent by my PHP script without having to reload the page, which is nice. I'm still parsing through the JSON data so the information I'm displaying is easier to read. 

Sunday, October 14, 2018

(10-14) More Servers and Planning

This week, I was able to get the sysadmins at my school to give me a virtual machine on the school's network, along with a public domain name and apache. I configured apache to work with PHP and successfully implemented a site that has a button. When this button is pressed, it loads canvas data using php and ajax.

At first, nothing was running on the domain name I was given. After spending a few hours ensuring apache was configured correctly and everything was correct on my end, I approached the sysadmins for help. It turned out, my school's DNS didn't update and add my site. I didn't know what DNS was prior to this week, and I now know it stands for Domain Name System, and it essentially translates a web url to it's corresponding IP address.

This week, I'm going to finalize the processing of the Canvas API response in my site, add data from the game server my team is working on, and decide what reward system I would like to use in this project. At the moment, I am proposing simple XBOX Live-like "achievements" that show up as badges on the student's profile. The student would also be able to share these badges on facebook and display them on their profile. Additionally, some achievements can unlock in-game content.

In terms of in-game content, I would not like to reward students with items that would change gameplay in any way. For example, unlocking ultra-rare, stronger cards that would give users a boost in matches. I would like to work with my team to implement some kind of "skin" type reward. That is, have all cards of the same type have a simple design, such as cards in Magic the Gathering, and these rewards would reward users with cards that look different, glow, maybe have animations instead of static pictures, etc.

Sunday, October 7, 2018

(10/7) Web Servers

So, this week, I was able to teach myself enough html and PHP to host a webpage that, when a button is clicked, prints student canvas data.

I first tried to do this with HTML and JavaScript. However, my last entry explains why that wouldn't work. I knew since I could easily pull data from Canvas using Python, the issue was my use of a client side language vs. a server side one.

Same Origin Policy is incredibly important because, without it, a malicious site could easily pull a user's data from any source they please as long as the user is logged in. However, this isn't possible using a server-side language, such as Python and PHP, because the browser isn't being used.

In order to use PHP, I had to learn how to host a web server. I installed and configured a simple instance of Apache on my mac and visited my site via just typing localhost in the browser address bar. I then hosted a page I called "index.html" and had a button that called "script.php" that loaded the data.

I have 2 steps I plan on taking this week. I first need to parse through the JSON data that Canvas returns in order to receive data that would be useful to our project. Additionally, I need to have a permanent server that will host my site, as well as a public domain name, so my site could be reached anywhere and anytime. Rather than hosting it at home and paying for a domain name, I am going to ask the sysadmins in my CS department if I could get a virtual machine running on their servers, as well as a public domain name (such as cs.nmt.edu/creuproject/index.html).

Monday, October 1, 2018

(9/29) Web Design

This week, I learned a lot about web design.

I began by learning the basics of HTML and JavaScript. I not only learned what it means to be a client-side language and a server-side one, but the benefits of using one over the other.

For example, my goal was to have a site that displays data provided by another site's API (Canvas). However, I learned that due to Same Origin Policy, this simply isn't possible from the browser, and it's a good thing it isn't due to security reasons.

I now know I'd have to achieve this goal using a server side language to pull data, then include it in my site. The language I have chosen is PHP. At first, I was wondering why simply including PHP code in my site didn't work, and that's how I was introduced to the big world of web servers and databases.

So, in conclusion, I learned web design is incredibly complicated and in order to achieve my goal, I have to first learn how to host a web server and manage a database. Until next time!