Re: [請益] 請問使用C語言寫俄羅斯方塊
我歸納成三點旋轉法
三點旋轉就是 畫成九宮格 旋轉後中心點不動,
四格就只要轉三格, 方向性是一樣的
我用 console 寫2char當一格, 參考看看吧
直條不適用
wiki 有寫到好幾種方式 和踢牆 後期任天堂有改
看看 wiki應該就會轉了
void SquareRotation( Sqr *pSqr )
{
ClearThisSquare( pSqr ) ;
switch( pSqr->sqrtype )
{
//正方形不旋轉
case Type1Square:
return;
//作三點旋轉
case Type2Seven:
case Type3InvSeven:
case Type4N:
case Type5InvN:
case Type6Hill:
PointRotation( pSqr, &pSqr->pt11, &pSqr->pt12, &pSqr->pt11.loc ) ;
PointRotation( pSqr, &pSqr->pt21, &pSqr->pt22, &pSqr->pt21.loc ) ;
PointRotation( pSqr, &pSqr->pt41, &pSqr->pt42, &pSqr->pt41.loc ) ;
break;
//直條就用暴力法寫一寫
case Type7Line:
switch( pSqr->rot ){
case R1://橫的轉直的
pSqr->pt11.x = pSqr->pt31.x ; pSqr->pt12.x = pSqr->pt32.x ;
pSqr->pt21.x = pSqr->pt31.x ; pSqr->pt22.x = pSqr->pt32.x ;
pSqr->pt41.x = pSqr->pt31.x ; pSqr->pt42.x = pSqr->pt32.x ;
pSqr->pt11.y = pSqr->pt31.y-2 ; pSqr->pt12.y = pSqr->pt32.y-2 ;
pSqr->pt21.y = pSqr->pt31.y-1 ; pSqr->pt22.y = pSqr->pt32.y-1 ;
pSqr->pt41.y = pSqr->pt31.y+1 ; pSqr->pt42.y = pSqr->pt32.y+1 ;
pSqr->rot = R2 ;
break;
case R2://直的轉橫的
pSqr->pt11.x = pSqr->pt31.x-4 ; pSqr->pt12.x = pSqr->pt32.x-4 ;
pSqr->pt21.x = pSqr->pt31.x-2 ; pSqr->pt22.x = pSqr->pt32.x-2 ;
pSqr->pt41.x = pSqr->pt31.x+2 ; pSqr->pt42.x = pSqr->pt32.x+2 ;
pSqr->pt11.y = pSqr->pt31.y ; pSqr->pt12.y = pSqr->pt32.y ;
pSqr->pt21.y = pSqr->pt31.y ; pSqr->pt22.y = pSqr->pt32.y ;
pSqr->pt41.y = pSqr->pt31.y ; pSqr->pt42.y = pSqr->pt32.y ;
pSqr->rot = R1 ;
break;
}
break;
default:
QuitGame(255);
break;
}
}
※ 引述《cooper6334 (小恐龍)》之銘言:
: 來分享一下我的做法好了
: 我用win32api來貼圖
: 基本架構就是一個12x23的陣列(10*20+左右牆+底+生成方塊的位置)
: 陣列內容有 狀態 -1牆 0空 1正在操作 2定住的方快
: 顏色 根據方塊種類而定
: 然後就是當狀態!=0的時候就依顏色印出來
: 第0,1列是不印的,我拿來放剛生成的方塊
: 每隔一小段時間就把狀態是1的往下移,
: 直到下面一格不是空的,就把方塊固定住並在最上面產生新的方塊
: 移動也是把狀態是1的往左或右移一格,除非要移的地方已經被佔走了
: 刪除的部份就設一個參數d=0,從底下往上搜,
: 假如碰到一整列滿的就d++,其他的列就往下移d列
: ▓▓▓▓▓▓▓▓▓ d=2,往下搬2列
: ▓▓▓▓▓▓▓▓▓▓▓ d=2
: ▓▓▓▓▓▓▓▓ ▓▓ d=1,往下搬1列 => ▓▓▓▓▓▓▓▓▓
: ▓▓▓▓▓▓▓▓▓▓▓ d=1 ▓▓▓▓▓▓▓▓ ▓▓
: ▓▓▓▓▓▓▓▓▓ ▓ d=0 ▓▓▓▓▓▓▓▓▓ ▓
: 最麻煩的是旋轉的部份,我的做法就是一格一格轉
: 就看這方塊轉過去會佔到那幾格就一一轉過去,
: 假如會碰到牆壁還要分成不同的狀況來寫
: 其實我主要是想看看大家旋轉的部份怎麼處理
: 因為我覺得我這部份寫得很囧,一開始沒寫好轉一轉還會飛天
: 我的寫法有什麼問題都請多指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.161.59.189
→
12/15 22:18, , 1F
12/15 22:18, 1F
→
12/15 22:18, , 2F
12/15 22:18, 2F
推
12/15 23:31, , 3F
12/15 23:31, 3F
→
12/16 00:35, , 4F
12/16 00:35, 4F
→
12/16 00:35, , 5F
12/16 00:35, 5F
→
12/16 00:36, , 6F
12/16 00:36, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):