作者clanguage (C语言)
看板GameDesign
标题Re: [请益] 请问使用C语言写俄罗斯方块
时间Tue Dec 15 22:03:05 2009
我归纳成三点旋转法
三点旋转就是 画成九宫格 旋转後中心点不动,
四格就只要转三格, 方向性是一样的
我用 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
1F:→ Splash5:其实大家可以多去玩ds的tetris 或是tetris:the grand mast 12/15 22:18
2F:→ Splash5:master 可以参考这些游戏的旋转模式 12/15 22:18
3F:推 chchwy:wiki有这种东西阿XDDD 请问是哪个条目? 12/15 23:31
4F:→ clanguage:我记得wikipedia是有, 可能被修改了 12/16 00:35
6F:→ clanguage:有很多旋转系统 这是有发展历史的 12/16 00:36