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









ชักอยากทำบ้างอ่ะ
ช่วยแนะนำ XNA ตั้งแต่แรกๆได้ไหมครับ
ใช้กับโปรแกรมอะไร ลงอย่างไร มีอะไรต้องทำพิเศษ แบบนี้หน่ะครับ
ขอบคุณครับ
#1 By เอกน้อย on 2007-11-02 14:50