418383/418587 ภาคปลาย 2553/คะแนนการบ้าน 2
เนื้อหา
คะแนน
คนที่ไม่ได้ 0 คะแนน
- 47180278 ได้ 83 คะแนน
- -5 for only adding one ball
- -5 for not shooting the ball immediately
- -5 for shooting only one bullet
- -2 for having no music when the player clears a stage
- 51180198 ได้ 100 คะแนน
- 51180248 ได้ 100 คะแนน
- 5210400425 ได้ 100 คะแนน
- 5210400514 ได้ 93 คะแนน
- -2 for no background music"
- -5 for not changing the background image
- 5210404889 ได้ 100 คะแนน
- 5210404897 ได้ 98 คะแนน
- -2 for not having music when player clears a stage
- 5210405036 ได้ 98 คะแนน
- -2 for not having music when player clears a stage
- 5210450937 ได้ 94 คะแนน
- -2 for no sound when bar hits wall
- -2 for no sound when bar dies
- -2 for not playing a song when the player clears a stage
- 5210450562 ได้ 100 คะแนน
คนที่ได้ 0 คะแนนเนื่องจากลอกเพื่อนหรือให้เพื่อนลอก
- 51180537
- 51180628
- 51180727
- 51180644
- 5210400433
- 5210404803
- 5210450040
- 5210450058
- 5210450104
- 5210450147
- 5210450597
การลอกกันที่ผมจับได้
โค้ดเปลี่ยนด่านใน PlayScreen.cs
51180537 | 51180628 | 51180727 |
<geshi lang="csharp"> else if (playScreen.gameState.BrickCount <= 0) { if (lv == 3) { Constants.MAP_NAME = "map03";
} else { Constants.MAP_NAME = "map02"; lv = 3; } playScreen.LoadContent(); if (lv2 != 3) { lv2 += 1; MediaPlayer.Stop(); MediaPlayer.Play(song3); playScreen.Game.SwitchScreen(Constants.NEXT_LV_SCREEN_NAME); } else { lv = 1; lv2 = 1; Constants.MAP_NAME = "map01.txt"; playScreen.LoadContent(); playScreen.Game.SwitchScreen(Constants.GAME_CLEARED_SCREEN_NAME); } } else if (playScreen.keySensor.IsKeyTyped(KeyMapping.pauseKey)) playScreen.ChangeState(playScreen.pauseState); } </geshi> |
<geshi lang="csharp"> else if (playScreen.gameState.BrickCount <= 0) { if (lv == 3) { Constants.MAP_NAME = "map03"; MediaPlayer.Stop(); } else { Constants.MAP_NAME = "map02"; MediaPlayer.Stop(); lv = 3; } playScreen.LoadContent(); if (lv2 != 3) { lv2 += 1; MediaPlayer.Play(song4); playScreen.Game.SwitchScreen(Constants.NEXT_LV_SCREEN_NAME); } else { lv = 1; lv2 = 1; Constants.MAP_NAME = "map01"; MediaPlayer.Play(song5); Constants.ascore = 0; playScreen.LoadContent(); playScreen.Game.SwitchScreen(Constants.GAME_CLEARED_SCREEN_NAME); } } else if (playScreen.keySensor.IsKeyTyped(KeyMapping.pauseKey)) playScreen.ChangeState(playScreen.pauseState); } </geshi> |
<geshi lang="csharp"> else if (playScreen.gameState.BrickCount <= 0) { if (lv == 3) { Constants.MAP_NAME = "map03";
} else { Constants.MAP_NAME = "map02"; lv = 3; } playScreen.LoadContent(); if (lv2 != 3) { lv2 += 1; playScreen.Game.SwitchScreen(Constants.NEXT_LV_SCREEN_NAME); } else { lv = 1; lv2 = 1; Constants.MAP_NAME = "map01.txt"; playScreen.Game.SwitchScreen(Constants.GAME_CLEARED_SCREEN_NAME); } } else if (playScreen.keySensor.IsKeyTyped(KeyMapping.pauseKey)) playScreen.ChangeState(playScreen.pauseState); </geshi> |
- 51180537 และ 51180644
Bullet.cs (Pattern 1)
นิสิตหลายคนทำการคัดลอก Ball.cs มาเป็น Bullet.cs (47180278, 51180248, 5210404889, 5210404897, 5210400425, และ 5210405036) นี่ไม่นับเป็นการลอกเนื่องจากเป็นการใช้โค้ดเก่าของอาจารย์ อย่างไรก็ดีโค้ดของนิสิต 7 คนข้างล่างนี้มีลักษณะเด่นเหมือนๆ กัน ดังต่อไปนี้ คือ
- เหลือเมธอด CollideOnTopSurface และ ColildeOnButtomSurface ไว้ ไม่คง CollideOnLeftSurface และ CollideOnRightSurface ของ Ball.cs เดิมไว้
- กำหนดให้ Bullet มีขนาด 5 x 5 ช่องเหมือนๆ กัน
นอกจากนี้ไฟล์ของนิสิตบางคู่ัยังเหมือนกันทุกไบต์ จึงสันนิษฐานเอาไว้ว่าลอกกัน
5210450058 | 5210450147 | 5210450597 | |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using GameLib.Animation; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } private Vector2 velocity; public Vector2 Velocity { get { return velocity; } set { velocity = value; } } private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { velocity = new Vector2(0.0f, -0.2f); animation = new TranslationAnimation(bulletAnimation); attackPower = 1; } public void UpdatePosition(GameTime gameTime) { Position = Position + velocity * (float)(gameTime.ElapsedGameTime.TotalMilliseconds); }
public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X), (int)(Position.Y), (int)5, (int)5); } }
private bool CollidedOnTopSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y > brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } public void CollideWithBrick(Brick brick) { } private bool CollidedOnBottomSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y < brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } } } </geshi> |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using GameLib.Animation; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } private Vector2 velocity; public Vector2 Velocity { get { return velocity; } set { velocity = value; } } private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { velocity = new Vector2(0.0f, -0.2f); animation = new TranslationAnimation(bulletAnimation); attackPower = 1; } public void UpdatePosition(GameTime gameTime) { Position = Position + velocity * (float)(gameTime.ElapsedGameTime.TotalMilliseconds); }
public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X), (int)(Position.Y), (int)5, (int)5); } }
private bool CollidedOnTopSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y > brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } public void CollideWithBrick(Brick brick) { } private bool CollidedOnBottomSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y < brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } } } </geshi> |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using GameLib.Animation; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } private Vector2 velocity; public Vector2 Velocity { get { return velocity; } set { velocity = value; } } private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { velocity = new Vector2(0.0f, -0.2f); animation = new TranslationAnimation(bulletAnimation); attackPower = 1; } public void UpdatePosition(GameTime gameTime) { Position = Position + velocity * (float)(gameTime.ElapsedGameTime.TotalMilliseconds); }
public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X), (int)(Position.Y), (int)5, (int)5); } }
private bool CollidedOnTopSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y > brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } public void CollideWithBrick(Brick brick) { } private bool CollidedOnBottomSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y < brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } } } </geshi> |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using GameLib.Animation; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X), (int)(Position.Y), (int)5, (int)10); } } private Vector2 velocity; public Vector2 Velocity { get { return velocity; } set { velocity = value; } } private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { velocity = new Vector2(0, -0.5f); animation = new TranslationAnimation(bulletAnimation); attackPower = 1; } public void UpdatePosition(GameTime gameTime) { Position = Position + velocity * (float)(gameTime.ElapsedGameTime.TotalMilliseconds); } public void CollideWithBrick(Brick brick) { //this.attackPower = 0; } private bool CollidedOnTopSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y > brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } private bool CollidedOnBottomSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y < brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } } } </geshi> |
อีกรูปแบบหนึ่งที่คล้ายๆ กัน
5210450040 | 5210450104 |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using GameLib.Animation; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content;
public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X), (int)(Position.Y), (int)5, (int)5); } } private Vector2 velocity; public Vector2 Velocity { get { return velocity; } set { velocity = value; } } private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { velocity = new Vector2(0, -0.2f); animation = new TranslationAnimation(bulletAnimation); attackPower = 1; } public void UpdatePosition(GameTime gameTime) { Position = Position + velocity * (float)(gameTime.ElapsedGameTime.TotalMilliseconds); } private bool CollidedOnTopSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y > brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } private bool CollidedOnBottomSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y < brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } } } </geshi> |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using GameLib.Animation; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X), (int)(Position.Y), (int)5, (int)5); } } private Vector2 velocity; public Vector2 Velocity { get { return velocity; } set { velocity = value; } } private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { velocity = new Vector2(0, -0.2f); animation = new TranslationAnimation(bulletAnimation); attackPower = 1; } public void UpdatePosition(GameTime gameTime) { Position = Position + velocity * (float)(gameTime.ElapsedGameTime.TotalMilliseconds); } private bool CollidedOnTopSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y > brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } private bool CollidedOnBottomSurface(Brick brick, Rectangle intersectingArea) { if (intersectingArea.Center.Y < brick.CollisionRect.Center.Y) return false; if (intersectingArea.Height > intersectingArea.Width) return false; return true; } } } </geshi> |
Bullet.cs (Pattern 2)
เหมือนทุกไบต์
5210400433 | 5210404803 |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using GameLib; using GameLib.Animation; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } public int Radius { get { return (int)Constants.BALL_RADIUS; } } public int Diameter { get { return Radius * 2; } } public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X - Radius), (int)(Position.Y - Radius), (int)Diameter, (int)Diameter); } }
private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { animation = new TranslationAnimation(bulletAnimation); attackPower = 1; xPositionFromBarCenter = Radius; } public void UpdatePosition(GameTime gameTime) { Position = new Vector2(Position.X, Position.Y - Constants.BALL_VERTICAL_SPEED * (float)gameTime.ElapsedGameTime.TotalMilliseconds); } } } </geshi> |
<geshi lang="csharp"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using GameLib; using GameLib.Animation; namespace BreakoutLib { public class Bullet : GameObject { private static Animation bulletAnimation; public static void LoadContent(ContentManager content) { bulletAnimation = Animation.Load("bullet.anim", content); } private TranslationAnimation animation; public override GameLib.Animation.Animation Animation { get { return animation; } } public Vector2 Position { set { animation.Displacement = value; } get { return animation.Displacement; } } public int Radius { get { return (int)Constants.BALL_RADIUS; } } public int Diameter { get { return Radius * 2; } } public Rectangle CollisionRect { get { return new Rectangle( (int)(Position.X - Radius), (int)(Position.Y - Radius), (int)Diameter, (int)Diameter); } }
private int attackPower; public int AttackPower { get { return attackPower; } } private float xPositionFromBarCenter; public float XPositionFromBarCenter { get { return xPositionFromBarCenter; } set { xPositionFromBarCenter = value; } } public Bullet() { animation = new TranslationAnimation(bulletAnimation); attackPower = 1; xPositionFromBarCenter = Radius; } public void UpdatePosition(GameTime gameTime) { Position = new Vector2(Position.X, Position.Y - Constants.BALL_VERTICAL_SPEED * (float)gameTime.ElapsedGameTime.TotalMilliseconds); } } } </geshi> |