OK update.
I went to see my proffessor, and the level of idiocy is astounding to me. FIrst of all, he didnt set the grade, someone else independant did so he cant do squat about it. Second is the way it was judged. It was judged as a whole, and my contribution significantly drove the entire projects grade up, it was the best thing about it all by far he said(he even knew who i was right at the start when i entered the room and said i wanted to complain about a grade, figures) so he was on my side here, sorta. The individual part he explained, was pretty much only to drag someone down in grades if they for example hadn´t done so much work on the entire thing. And while my contribution drove the entire project up, it couldn ´t bring me up personally(due to the "system" and the way it was judged he said).
I asked then what was all this fuzz about "individual grades" and he yet again said that it was just to drag people down. He gave som examples that had i for instance done absolutely nothing, nill, nada of the other parts of the project then maybe that would´ve helped my cause but again it wouldn´t since everyone was supposed to do a lil of everything(i did like 5% of the animations). So in other words, my hard effort could only drag the project up, not my own grade. While the work of the other people could drag me down personally...(and it did)
And in order to write a formal complaint, i have to get the entire group to complain. I cannot do it alone since its a group assignment(again why then state youre gonna give individual grades based on performance?) and while he told me i should just try and do that, since he felt sorry for me, he said that it would probably just be judged the exact same way yet again.
I am just... dumbfound and angry. Had i known this i would´ve pushed my group members alot or done the thing myself. Im taking this thing one step higher on the power ladder so to say and see where that takes me, probably to the same bullshit answers. Shit im angry, wasted so much time and work and even let another course suffer a bit since i figured i had a shot at a really good grade in this one.
/update
Full story:
+ Show Spoiler +
Hi TL, today i got the result from an exam assignment i worked my ass off for, and i am pissed. The assignment was for a introductionary class to flash programing, called "Gamepograming for flash" and it assumed people only had the very basic knowledge in programing such as knowing what a function is and what it does etc. It was a group assignment but we were supposed to recieve individual grades(To clarify you were graded after what YOU did, if i did 100% coding id be judged by the code, if i did 100% graphics id be judged by the graphics), this assignment is 100% of the grade for the class, its college level.
Of the workload in the group i did pretty much all programing and my two partners did the graphical aspect, not that i mind it but the work i put in was probably 5x more then what my group partners put in, they are cool guys so im not raging at them or anything - its how we divided it and i didnt mind it.
So the results come in, fairly quickly mind you, and my two group buddies tells me they both got D's, which didnt surprise me all that much, the game could've looked alot better and i think they know it too, they hated the class and just wanted to pass it i think. So at this time i figure i have maybe a B, but at the very least a C. Since i was pretty proud about the code and i had a Master grade student look it over before i handed it in and he said it looked pretty sweet compared to the requirements for the class it was fairly advanced. So i login to my student webpage, and i've recieved a D. A freaking D, the same grade my two group buddies got and i did 5x the work, and the code looks good.
The code(programing stuff here, if u dont know this, just skip this part)
The other games i looked at had all code in one file down in the flash timeline. My coding was object oriented with classes for major elements such as enemies, weapons, sound and a main class for most functions. It had "methoding" or however you call it, and it was fairly clean and adaptable. I worked on this pretty much all semester, im comparisment i got a D on a PHP programing exam last year which i studied for a grand total of one week, and before that week i knew nothing about programing or PHP. So i half assed that majorly, so i didnt really mind the D. I also dont mind showing the code if anyone wants to judge it a bit. So i work my ass off, get really satisified with the code and get a freaking D, same grade my group mates got mind you, vs i learn PHP programing in one week and get a D...
Code here for anyone that wants to take a look, this is the main class:
+ Show Spoiler +
The one grading it should know the workload as we wrote a report about it and filled out a form of how we divided the workload, i think it said i did 80% of the code or so.
So where does one go from here? I'm gonna complain tomorrow but anything i should ask for? How they rated it? WHat their motivation was to grade me as low as my two group members? How big is the chance i can get this bumped to like a C or something?
edit
Also something i want to add, the course avg was a B in grades. 6 out of 48 recieved a D, nobody recieved lower. So me and my buddies are 3 of the 6 lowest grades, and i certainly dont feel like i belong that far down with the work i put in and how my code looks...
Of the workload in the group i did pretty much all programing and my two partners did the graphical aspect, not that i mind it but the work i put in was probably 5x more then what my group partners put in, they are cool guys so im not raging at them or anything - its how we divided it and i didnt mind it.
So the results come in, fairly quickly mind you, and my two group buddies tells me they both got D's, which didnt surprise me all that much, the game could've looked alot better and i think they know it too, they hated the class and just wanted to pass it i think. So at this time i figure i have maybe a B, but at the very least a C. Since i was pretty proud about the code and i had a Master grade student look it over before i handed it in and he said it looked pretty sweet compared to the requirements for the class it was fairly advanced. So i login to my student webpage, and i've recieved a D. A freaking D, the same grade my two group buddies got and i did 5x the work, and the code looks good.
The code(programing stuff here, if u dont know this, just skip this part)
The other games i looked at had all code in one file down in the flash timeline. My coding was object oriented with classes for major elements such as enemies, weapons, sound and a main class for most functions. It had "methoding" or however you call it, and it was fairly clean and adaptable. I worked on this pretty much all semester, im comparisment i got a D on a PHP programing exam last year which i studied for a grand total of one week, and before that week i knew nothing about programing or PHP. So i half assed that majorly, so i didnt really mind the D. I also dont mind showing the code if anyone wants to judge it a bit. So i work my ass off, get really satisified with the code and get a freaking D, same grade my group mates got mind you, vs i learn PHP programing in one week and get a D...
Code here for anyone that wants to take a look, this is the main class:
+ Show Spoiler +
This isn't "superadvanced" by any means, but for a sorta beginners course of flash i'd say its pretty good, at least a C, but please tell me waht u think. THis is the main class btw, other classes are enemyFire/Ice/Earth etc and weapontypes, thePlayer, MySound and one more which i cant remember(lol tired).
package // Main code/class
{
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;
import flash.text.TextField;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class main extends MovieClip
{
private var player:thePlayer;
private var enemyTime:int = 0;
private var enemyLimit:int = 100;
private var myHitsNo:int;
private var mybullets:Array;
private var enemys:Array;
private var weaponType:int;
private var myLives:int;
private var fireTimer:Timer; //delay between shots
private var canFire:Boolean = true;
private var mySound:MySound;
private var bulletSpeed:Number = -450;
//public var soundFX = new Sound();
public var spawnPoint1:int = 295;
public var spawnPoint2:int = 385;
public var spawnPoint3:int = 475;
public var spawnPoint4:int = 567;;
public var enemySpeed:int = 4;
public function main()
{
//load sounds
mySound = new MySound();
}
private function playGame(event:MouseEvent)
{
gotoAndStop(2);
// initialize
myLives = 5;
myHitsNo = 0;
weaponType = 1;
mybullets = new Array();
enemys = new Array();
myScoreTxt.text = "Score: " + myHitsNo;
myLivesTxt.text = "Lives: " + myLives;
fireTimer = new Timer(400, 1);
fireTimer.addEventListener(TimerEvent.TIMER, shootTimerHandler, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_DOWN, listenKeyDown);
stage.addEventListener(Event.ENTER_FRAME, addEnemy);
stage.addEventListener(Event.ENTER_FRAME, checkCollision);
player = new thePlayer(stage.stageWidth-40, spawnPoint2);// stage.stageHeight/2);
stage.focus = player;
addChild(player);
mySound.playBgSound();
}
private function cleanUp()
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, listenKeyDown);
stage.removeEventListener(Event.ENTER_FRAME, addEnemy);
stage.removeEventListener(Event.ENTER_FRAME, checkCollision);
// remove all children manually
// copy the array so we dont delete items in the array
// we`re working in
var tmpArray = new Array();
for(var i in mybullets)
{
tmpArray.push(mybullets[i]);
}
for (var j in tmpArray)
{
tmpArray[j].deleteBullet();
}
tmpArray = new Array();
for(var k in enemys)
{
tmpArray.push(enemys[k]);
}
for(var l in tmpArray)
{
tmpArray[l].deleteEnemy();
}
removeChild(player);
fireTimer = null;
mySound.stopBgSound();
}
private function gotoStartScreen(event:MouseEvent)
{
cleanUp();
gotoAndStop(1);
}
public function listenKeyDown(event:KeyboardEvent) // Controls and weapontype selector
{
if (event.keyCode == 37) //left
{
player.movethePlayerDown();
}
if (event.keyCode == 39) //right
{
player.movethePlayerUp();
}
if (event.keyCode == Keyboard.SPACE) //space
{
shootBullet();
//soundFX.attachSound("Pistol Fire.wav");
//soundFX.start();
}
if (event.keyCode == Keyboard.NUMBER_1)
{
weaponType = 1;
}
if (event.keyCode == Keyboard.NUMBER_2)
{
weaponType = 2;
}
if (event.keyCode == Keyboard.NUMBER_3)
{
weaponType = 3;
}
if (event.keyCode == Keyboard.NUMBER_4)
{
weaponType = 4;
}
}
public function shootBullet() // Self explanatory, shoots the bullet and which type of bullet
{
if (canFire)
{
if(weaponType == 1) // fire
{
mySound.playFireSound();
var b:shotFire = new shotFire(player.x,player.y, bulletSpeed);
addChild(b);
mybullets.push(b);
}
if(weaponType == 2) // water
{
mySound.playWaterSound();
var c:shotWater = new shotWater(player.x,player.y, bulletSpeed);
addChild(c);
mybullets.push(c);
}
if(weaponType == 3) // light
{
mySound.playLightSound();
var d:shotLight = new shotLight(player.x,player.y, bulletSpeed);
addChild(d);
mybullets.push(d);
}
if(weaponType == 4) // earth
{
mySound.playEarthSound();
var e:shotEarth = new shotEarth(player.x,player.y, bulletSpeed);
addChild(e);
mybullets.push(e);
}
canFire = false;
fireTimer.start();
}
}
private function shootTimerHandler(e:TimerEvent) : void
{
//timer ran, we can shoot again.
canFire = true;
}
public function removeBullet(mybullet) // Removes bullet
{
for(var i in mybullets)
{
if (mybullets[i] == mybullet)
{
mybullets.splice(i,1);
break;
}
}
}
public function removeEnemy(myEnemy) // Removes enemies
{
for(var i in enemys)
{
if (enemys[i] == myEnemy)
{
enemys.splice(i,1);
break;
}
}
}
// returns true if im out of lives; dead
public function decreaseLivesAndCheckIfDead() : Boolean // decreases lives with 1 and updates the status text
{
myLives--;
myLivesTxt.text = "Lives: " + myLives;
if (myLives < 0)
{
var score = myHitsNo; // save the score before cleanUp()
cleanUp();
gotoAndStop(3); // go to the game over screen
finalScoreTxt.text = "Your score: " + score;
return true;
}
return false;
}
public function checkCollision(event:Event) // Collision detection, but also block speed increase,
{
// copy the arrays so we dont delete items in our working arrays
var tmpArrayEnemys = new Array();
for (var k in enemys)
{
tmpArrayEnemys.push(enemys[k]);
}
var tmpArrayBullets = new Array();
for (var l in mybullets)
{
tmpArrayBullets.push(mybullets[l]);
}
for(var j in tmpArrayEnemys)
{
// check if any of the blocks hit my ship!
if (tmpArrayEnemys[j].hitTestObject(player))
{
if (decreaseLivesAndCheckIfDead())
return; // stop the collision detection if i`m dead!!
tmpArrayEnemys[j].deleteEnemy();
}
for(var i in tmpArrayBullets)
{
// check if any of the bullets on the screen hits any enemies on the screen
//if (tmpArrayBullets[i].hitTestObject(tmpArrayEnemys[j]))
if(PixelPerfectCollisionDetection.isColliding(tmpArrayBullets[i],tmpArrayEnemys[j],this,true)==true)
{
if (tmpArrayEnemys[j].hitEnemy(tmpArrayBullets[i]))
{ //count only if we actually hits the block
myHitsNo++;
myScoreTxt.text = "Score: " + myHitsNo;
if (myHitsNo % 7 == 0)
{ // increase the speed every 7th hit
enemySpeed = enemySpeed + 1;
if (enemyLimit > 30)
{
enemyLimit = enemyLimit - 10;
}
}
}
tmpArrayBullets[i].deleteBullet();
}
}
}
}
public function addEnemy(event:Event):void // How enemies are added and randomized
{
if(enemyTime < enemyLimit)
{
enemyTime ++;
}
else
{
var newEnemy;
// randomize which enemy that should spawn
var number = Math.ceil(Math.random()*4);
if (number == 1)
{
newEnemy = new enemyEarth();
}
else if (number == 2)
{
newEnemy = new enemyFire();
}
else if (number == 3)
{
newEnemy = new enemyWater();
}
else if (number == 4)
{
newEnemy = new enemyIce();
}
newEnemy.x = -1 * newEnemy.width;
// randomize the spawn point for the enemy
var spawnPoint = Math.ceil(Math.random()*4);
if (spawnPoint == 1)
{
newEnemy.y = spawnPoint1;
}
else if (spawnPoint == 2)
{
newEnemy.y = spawnPoint2;
}
else if (spawnPoint == 3)
{
newEnemy.y = spawnPoint3;
}
else if (spawnPoint == 4)
{
newEnemy.y = spawnPoint4;
}
enemys.push(newEnemy);
addChild(newEnemy);
enemyTime = 0;
}
}
}
}
package // Main code/class
{
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;
import flash.text.TextField;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class main extends MovieClip
{
private var player:thePlayer;
private var enemyTime:int = 0;
private var enemyLimit:int = 100;
private var myHitsNo:int;
private var mybullets:Array;
private var enemys:Array;
private var weaponType:int;
private var myLives:int;
private var fireTimer:Timer; //delay between shots
private var canFire:Boolean = true;
private var mySound:MySound;
private var bulletSpeed:Number = -450;
//public var soundFX = new Sound();
public var spawnPoint1:int = 295;
public var spawnPoint2:int = 385;
public var spawnPoint3:int = 475;
public var spawnPoint4:int = 567;;
public var enemySpeed:int = 4;
public function main()
{
//load sounds
mySound = new MySound();
}
private function playGame(event:MouseEvent)
{
gotoAndStop(2);
// initialize
myLives = 5;
myHitsNo = 0;
weaponType = 1;
mybullets = new Array();
enemys = new Array();
myScoreTxt.text = "Score: " + myHitsNo;
myLivesTxt.text = "Lives: " + myLives;
fireTimer = new Timer(400, 1);
fireTimer.addEventListener(TimerEvent.TIMER, shootTimerHandler, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_DOWN, listenKeyDown);
stage.addEventListener(Event.ENTER_FRAME, addEnemy);
stage.addEventListener(Event.ENTER_FRAME, checkCollision);
player = new thePlayer(stage.stageWidth-40, spawnPoint2);// stage.stageHeight/2);
stage.focus = player;
addChild(player);
mySound.playBgSound();
}
private function cleanUp()
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, listenKeyDown);
stage.removeEventListener(Event.ENTER_FRAME, addEnemy);
stage.removeEventListener(Event.ENTER_FRAME, checkCollision);
// remove all children manually
// copy the array so we dont delete items in the array
// we`re working in
var tmpArray = new Array();
for(var i in mybullets)
{
tmpArray.push(mybullets[i]);
}
for (var j in tmpArray)
{
tmpArray[j].deleteBullet();
}
tmpArray = new Array();
for(var k in enemys)
{
tmpArray.push(enemys[k]);
}
for(var l in tmpArray)
{
tmpArray[l].deleteEnemy();
}
removeChild(player);
fireTimer = null;
mySound.stopBgSound();
}
private function gotoStartScreen(event:MouseEvent)
{
cleanUp();
gotoAndStop(1);
}
public function listenKeyDown(event:KeyboardEvent) // Controls and weapontype selector
{
if (event.keyCode == 37) //left
{
player.movethePlayerDown();
}
if (event.keyCode == 39) //right
{
player.movethePlayerUp();
}
if (event.keyCode == Keyboard.SPACE) //space
{
shootBullet();
//soundFX.attachSound("Pistol Fire.wav");
//soundFX.start();
}
if (event.keyCode == Keyboard.NUMBER_1)
{
weaponType = 1;
}
if (event.keyCode == Keyboard.NUMBER_2)
{
weaponType = 2;
}
if (event.keyCode == Keyboard.NUMBER_3)
{
weaponType = 3;
}
if (event.keyCode == Keyboard.NUMBER_4)
{
weaponType = 4;
}
}
public function shootBullet() // Self explanatory, shoots the bullet and which type of bullet
{
if (canFire)
{
if(weaponType == 1) // fire
{
mySound.playFireSound();
var b:shotFire = new shotFire(player.x,player.y, bulletSpeed);
addChild(b);
mybullets.push(b);
}
if(weaponType == 2) // water
{
mySound.playWaterSound();
var c:shotWater = new shotWater(player.x,player.y, bulletSpeed);
addChild(c);
mybullets.push(c);
}
if(weaponType == 3) // light
{
mySound.playLightSound();
var d:shotLight = new shotLight(player.x,player.y, bulletSpeed);
addChild(d);
mybullets.push(d);
}
if(weaponType == 4) // earth
{
mySound.playEarthSound();
var e:shotEarth = new shotEarth(player.x,player.y, bulletSpeed);
addChild(e);
mybullets.push(e);
}
canFire = false;
fireTimer.start();
}
}
private function shootTimerHandler(e:TimerEvent) : void
{
//timer ran, we can shoot again.
canFire = true;
}
public function removeBullet(mybullet) // Removes bullet
{
for(var i in mybullets)
{
if (mybullets[i] == mybullet)
{
mybullets.splice(i,1);
break;
}
}
}
public function removeEnemy(myEnemy) // Removes enemies
{
for(var i in enemys)
{
if (enemys[i] == myEnemy)
{
enemys.splice(i,1);
break;
}
}
}
// returns true if im out of lives; dead
public function decreaseLivesAndCheckIfDead() : Boolean // decreases lives with 1 and updates the status text
{
myLives--;
myLivesTxt.text = "Lives: " + myLives;
if (myLives < 0)
{
var score = myHitsNo; // save the score before cleanUp()
cleanUp();
gotoAndStop(3); // go to the game over screen
finalScoreTxt.text = "Your score: " + score;
return true;
}
return false;
}
public function checkCollision(event:Event) // Collision detection, but also block speed increase,
{
// copy the arrays so we dont delete items in our working arrays
var tmpArrayEnemys = new Array();
for (var k in enemys)
{
tmpArrayEnemys.push(enemys[k]);
}
var tmpArrayBullets = new Array();
for (var l in mybullets)
{
tmpArrayBullets.push(mybullets[l]);
}
for(var j in tmpArrayEnemys)
{
// check if any of the blocks hit my ship!
if (tmpArrayEnemys[j].hitTestObject(player))
{
if (decreaseLivesAndCheckIfDead())
return; // stop the collision detection if i`m dead!!
tmpArrayEnemys[j].deleteEnemy();
}
for(var i in tmpArrayBullets)
{
// check if any of the bullets on the screen hits any enemies on the screen
//if (tmpArrayBullets[i].hitTestObject(tmpArrayEnemys[j]))
if(PixelPerfectCollisionDetection.isColliding(tmpArrayBullets[i],tmpArrayEnemys[j],this,true)==true)
{
if (tmpArrayEnemys[j].hitEnemy(tmpArrayBullets[i]))
{ //count only if we actually hits the block
myHitsNo++;
myScoreTxt.text = "Score: " + myHitsNo;
if (myHitsNo % 7 == 0)
{ // increase the speed every 7th hit
enemySpeed = enemySpeed + 1;
if (enemyLimit > 30)
{
enemyLimit = enemyLimit - 10;
}
}
}
tmpArrayBullets[i].deleteBullet();
}
}
}
}
public function addEnemy(event:Event):void // How enemies are added and randomized
{
if(enemyTime < enemyLimit)
{
enemyTime ++;
}
else
{
var newEnemy;
// randomize which enemy that should spawn
var number = Math.ceil(Math.random()*4);
if (number == 1)
{
newEnemy = new enemyEarth();
}
else if (number == 2)
{
newEnemy = new enemyFire();
}
else if (number == 3)
{
newEnemy = new enemyWater();
}
else if (number == 4)
{
newEnemy = new enemyIce();
}
newEnemy.x = -1 * newEnemy.width;
// randomize the spawn point for the enemy
var spawnPoint = Math.ceil(Math.random()*4);
if (spawnPoint == 1)
{
newEnemy.y = spawnPoint1;
}
else if (spawnPoint == 2)
{
newEnemy.y = spawnPoint2;
}
else if (spawnPoint == 3)
{
newEnemy.y = spawnPoint3;
}
else if (spawnPoint == 4)
{
newEnemy.y = spawnPoint4;
}
enemys.push(newEnemy);
addChild(newEnemy);
enemyTime = 0;
}
}
}
}
The one grading it should know the workload as we wrote a report about it and filled out a form of how we divided the workload, i think it said i did 80% of the code or so.
So where does one go from here? I'm gonna complain tomorrow but anything i should ask for? How they rated it? WHat their motivation was to grade me as low as my two group members? How big is the chance i can get this bumped to like a C or something?
edit
Also something i want to add, the course avg was a B in grades. 6 out of 48 recieved a D, nobody recieved lower. So me and my buddies are 3 of the 6 lowest grades, and i certainly dont feel like i belong that far down with the work i put in and how my code looks...