case study : Xna Tetris III

posted on 02 Nov 2007 11:43 by xnanoob  in Tutorials

สวัสดีค่ะ

วันนี้มามั่วถั่วกันต่อกับ Tetris

จากครั้งที่แล้ว เราได้ทำตารางฉากหลังเอาเสก block ขึ้นมา

ลองทำให้ block หมุนดูนะค่ะ เพราะตอนเล่น มันจะเลื่อนๆ หมุนๆ ได้

จากรูป คือ ตัวอย่าง block แบบนึงนะค่ะ

ก้อกดหมุน แล้วให้มันพลิกไป

จะสังเกตได้ว่าขนาดของ matrix จะเปลี่ยนไป(ในตัวอย่างนี้เป็น array แบบสองมิตินะค่ะ)

จุดสีน้ำเงินคือไม่แสดง จุดสีแดงคือแสดง

(3,2) คือ สามแถว สองหลัก  (2,3) คือแบบ สองแถว สามหลัก  เป็นต้น

.....

ก้อหมุนๆ พลิกๆ กันไป

ตามอัลกอของแต่หละคน

แสดงดังนี้

int[,] xd = new int[M,N]; // แสดงการกำหนด array แบบ สองมิติใน c#

รูป 1 เอาขวาหลักสอง ไปแทนแถว 1 รูปที่ 2

รูป 1 เอาหลักแรกไปแทน รูปสอง แถวสอง

....

รูปสอง เอาหลักสาม ไปแทน แถว 1 รูป 3

รูปสอง เอาหลักสอง ไปแทน แถว 2 รูป 3

...... วนไปเลื่อยซ้ำปายนะค่ะ  มั่ง

อันนี้แสดง method Rotation ที่หนูมั่วขึ้นมาเอง

public void rotation(int blockcounttime)

{

int[,] xs;//source

xs = ((blockx)mgBlock[0]).itemBlock[((blockx)mgBlock[0]).blocktype];

// xd is temo destination

int[,] xd = new int[xs.GetLength(1), xs.GetLength(0)];

xs = ((blockx)mgBlock[0]).itemBlock[((blockx)mgBlock[0]).blocktype];

 int m = 0; int n = 0;

for (int i = 0;i<=xs.GetLength(1)-1; i++)

{ n=0;

for (int j = xs.GetLength(0)-1; j >= 0; j--)

{

int x = j; int y = i;

xd[m,n] = xs[j, i];

n++;

}

m++;

}

((blockx)mgBlock[0]).itemBlock[((blockx)mgBlock[0]).blocktype] = xd;

}

.......

ต้องพยายามไล่ index ให้ดีๆ  ไม่งั้น array แตก

ไม่รู้ทำไม มักจะเลย บวกหนึ่งหรือไม่ก้อลบหนึ่งตลอด ?

ใครมีวิธี หมุนของ แบบอื่นๆ แนะนำบ้างค่ะ ?

แต่มันก้อหมุนนะ

ถ้าไงอย่าลืมทำแรงดึงดูดนะ ให้ block มันตกลงมาข้างล่าง

 

ผลการทดลอง

 

จบแระค่ะ บายค่ะ

งุงิ งุงิ

บริการเว็บสำเร็จรูป ราคา ประหยัด สวย ถูก เร็ว

ปล. เพียงคุณบอกว่า รู้ข่าว smewell มาจาก xnanoob ลดทันที 10% นะค่ะ

edit @ 1 Dec 2007 17:52:04 by xnanoob

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

แจ่มเลย

ชักอยากทำบ้างอ่ะ

ช่วยแนะนำ XNA ตั้งแต่แรกๆได้ไหมครับ

ใช้กับโปรแกรมอะไร ลงอย่างไร มีอะไรต้องทำพิเศษ แบบนี้หน่ะครับ


ขอบคุณครับ

#1 By เอกน้อย on 2007-11-02 14:50

เขียนโปรแกรมด้วยภาษา c# นะค่ะ
ตอนลงต้องใช้กับ

Microsoft Visual C# 2005 Express Edition

แล้วก้อลง xna framework (XNA GSE 1.0)

คนหละตัวกับ .net framework นะค่ะ

http://xnanoob.exteen.com/20070903/install-xna

หรือที่
http://www.xnanoob.com/?p=12

โดยในส่วนตัวแล้ว อันนี้เป็น link แรกที่หนูอ่านด้วยอะ
ลูกพี่หนูเค้าทำไว้ หนูเลยอยากเขียนเป็นบ้าง
อะงิ

เย้ ดีใจจะ จะได้แก๊งเพิ่มแระ

#2 By xnanoob on 2007-11-02 15:42