ผลต่างระหว่างรุ่นของ "418383/418587 ภาคปลาย 2553/คะแนนการบ้าน 2"
Cardcaptor (คุย | มีส่วนร่วม)  (→คะแนน)  | 
				Cardcaptor (คุย | มีส่วนร่วม)   | 
				||
| (ไม่แสดง 38 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
| แถว 1: | แถว 1: | ||
== คะแนน ==  | == คะแนน ==  | ||
=== คนที่ไม่ได้ 0 คะแนน ===  | === คนที่ไม่ได้ 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 คะแนนเนื่องจากลอกเพื่อนหรือให้เพื่อนลอก ===  | === คนที่ได้ 0 คะแนนเนื่องจากลอกเพื่อนหรือให้เพื่อนลอก ===  | ||
| + | * 51180537  | ||
| + | * 51180628  | ||
| + | * 51180727  | ||
| + | * 51180644  | ||
| + | * 5210400433  | ||
| + | * 5210404803  | ||
| + | * 5210450040  | ||
| + | * 5210450058  | ||
| + | * 5210450104  | ||
| + | * 5210450147  | ||
| + | * 5210450597  | ||
| − | + | == การลอกกันที่ผมจับได้ ==  | |
| − | + | === โค้ดเปลี่ยนด่านใน PlayScreen.cs ===  | |
<table>  | <table>  | ||
<tr>  | <tr>  | ||
<td align="center">51180537</td>  | <td align="center">51180537</td>  | ||
<td align="center">51180628</td>  | <td align="center">51180628</td>  | ||
| + | <td align="center">51180727</td>  | ||
</tr>  | </tr>  | ||
<tr>  | <tr>  | ||
| แถว 92: | แถว 126: | ||
                     playScreen.ChangeState(playScreen.pauseState);  |                      playScreen.ChangeState(playScreen.pauseState);  | ||
             }  |              }  | ||
| + | </geshi>  | ||
| + | </td>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | </tr>  | ||
| + | </table>  | ||
| + | |||
| + | * 51180537 และ 51180644  | ||
| + | [[ไฟล์:Breakout-playscreen-51180537-51180644.JPG|300px]]  | ||
| + | |||
| + | === 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 ช่องเหมือนๆ กัน  | ||
| + | นอกจากนี้ไฟล์ของนิสิตบางคู่ัยังเหมือนกันทุกไบต์ จึงสันนิษฐานเอาไว้ว่าลอกกัน  | ||
| + | <table>  | ||
| + | <tr>  | ||
| + | <td align="center">5210450058</td>  | ||
| + | <td align="center">5210450147</td>  | ||
| + | <td align="center">5210450597</td>  | ||
| + | </tr>  | ||
| + | <tr>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | </tr>  | ||
| + | </table>  | ||
| + | |||
| + | ==== อีกรูปแบบหนึ่งที่คล้ายๆ กัน ====  | ||
| + | <table>  | ||
| + | <tr>  | ||
| + | <td align="center">5210450040</td>  | ||
| + | <td align="center">5210450104</td>  | ||
| + | </tr>  | ||
| + | <tr>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | </tr>  | ||
| + | </table>  | ||
| + | |||
| + | === Bullet.cs (Pattern 2) ===  | ||
| + | เหมือนทุกไบต์  | ||
| + | <table>  | ||
| + | <tr>  | ||
| + | <td align="center">5210400433</td>  | ||
| + | <td align="center">5210404803</td>  | ||
| + | </tr>  | ||
| + | <tr>  | ||
| + | <td>  | ||
| + | <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>  | ||
| + | </td>  | ||
| + | <td>  | ||
| + | <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>  | ||
</td>  | </td>  | ||
รุ่นแก้ไขปัจจุบันเมื่อ 09:53, 21 มีนาคม 2554
เนื้อหา
คะแนน
คนที่ไม่ได้ 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>  |