如何用VC 60实现俄罗斯方块游戏
整理:yaobaiwang.com 时间:07月17日
[想用VC 60动手写俄罗斯方块但不知到如何下手请各位给点思路]谁有俄罗斯方块的游戏设计思路啊或者经验。谢谢了:简单说一下算法: 俄罗斯方块由四个小方块组成,假设你定义没每个小方块大小为20 * 20px,方块活动区域大小为:300宽 * 400高,那么...+阅读
如何用VC 6 0实现俄罗斯方块游戏
简单说一下算法: 俄罗斯方块由四个小方块组成,假设你定义没每个小方块大小为20 * 20px,方块活动区域大小为:300宽 * 400高,那么你需要定义一个bool型二维数组来标记该活动区域方块的填充情况(以填记1或未填记0),那么该数组可以这么定义:bool isEmpty[20][15]; (20=400/20 15=300/20)。每当方块要落下来时先判断下一个位置是否为空,即 if ( isEmpty[][] == 0 ),若空则允许落下来,否则就停在当前位置,接着生成新的方块,重复刚才判断...... 好了,关于方块活动区域的算法已经大致清楚那么一点了,那么怎么生成一块完整的俄罗斯方块呢?我们知道,漂亮一些的俄罗斯方块通常有多种颜色,最常见的写法是使用GDI的FillRect()函数产生小色块,然后根据4个小方块的坐标填充出一个大的完整的俄罗斯方块(每个俄罗斯方块由四个小方块组成)假如我们要生成“口口口口”(长条),它的坐标可能是(0,0)(1,0)(2,0)(3,0),我们需要定义4个坐标来表示俄罗斯方块:POINT ptBlock[4]; 那么我们把ptBlock里记录的4个坐标填充完就生成一个完整的俄罗斯方块了。
好了,关于怎么生成一个俄罗斯方块我们也了解那么一点了,可是,我们玩游戏的时候不能预知下一块方块是什么形状(这个可以有提示),也就是说每个方块都是随机的,我们该这么做呢? 一般常见的俄罗斯方块有7种形状,那么我们可以每次产生一个0 ~ 6的随机数,然后根据这个数字生成随机方块:int iType = rand() % 7;switch( iType )...
C编俄罗斯方块方块旋转的程序
这是我用的一个旋转程序,a[][4]是个定义方块的4*4的数组,你看看
void turn(int a[][4],int w,int h,int *x,int y)
{
int b[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int sign=0,line=0;
for(int i=h-1;i>=0;i--)
{
for(int j=0;j if(a[i][j]) { b[j][line]=a[i][j]; sign=1; } if(sign) { line++; sign=0; } } for(i=0;i<4;i++) if(isavailable(&b[0][0],*x-i,y,w,h)) { *x-=i; for(int k=0;k for(int j=0;j a[k][j]=b[k][j]; break; } } 问题描述不完整,给你我作业里德旋转函数好了,//...#define LONG_SIZE 15#define WIDE_SIZE 10//...char img[LONG_SIZE][WIDE_SIZE]; /*定义游戏区方块移动范围*/int x_[4],y_[4],x,y; /*存放移动方块在游戏区的位置序号和方块的坐标*///...void rotate() /*旋转*/{ int tmx[4],tmy[4]; int tf=1; int i; int k; if((x_[0]==x_[1])&(x_[2]==x_[3])&(y_[0]==y_[2])&(y_[1]==y_[3])) /*排除"田"字形*/ return; for(i=0;i img[x_[i]][y_[i]]=0; for(i=0;i { tmx[i]=x+(y_[i]-y); tmy[i]=y-(x_[i]-x); if(tmx[i]LONG_SIZE-1) { tf=0; break; } if(tmy[i]WIDE_SIZE-1) { tf=0; break; } if((tmx[i]==x_[i])||(tmy[i]==y_[i])) { if(tmx[i]==x_[i]) { if(img[tmx[i]][tmy[i]]==1||img[tmx[i]][y]==1) { tf=0; break; } } else if(tmy[i]==y_[i]) { if(img[tmx[i]][tmy[i]]==1||img[x][tmy[i]]==1) { tf=0; break; } } else continue; } if((tmx[i]y_[i])||(tmx[i]>x_[i]&tmy[i] k=1; else k=0; while(tmx[i]!=x_[i]||tmy[i]!=y_[i]) { if(img[tmx[i]][tmy[i]]==1) { tf=0; break; } if(k%2==0) tmx[i] else tmy[i] k++; } } if(tf) { for(i=0;i { tmx[i]=x+(y_[i]-y); tmy[i]=y-(x_[i]-x); x_[i]=tmx[i]; y_[i]=tmy[i]; } } for(i=0;i img[x_[i]][y_[i]]=1;} 几个月前写的,可能因为之前的水平原因代码有点乱(现在懒的编),不过是可行的.. 以下为关联内容: 象棋的一类词语如:马后炮过河卒子中国象棋中双方第一步都走中炮叫什么如图所示。:直车 横车 直横车 过河车 巡河车 骑河车 横车将路 贴身车 通头车 中车 单车宝剑 重叠车 无车棋 过门 鸳鸯马 连环马 窝心马...C语言写俄罗斯方块旋转算法