俄罗斯方块
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
是否有键按下
是否ESC键 判断键值,并执 行相应动作
是否产生 Newbox
消除满行,更新 分数及速度
方块自由下落
游戏结束
2. 屏幕作图与窗口实现
• struct BOARD /*游戏底板结构,表示每个点所具有 的属性*/ • { • int var; /*当前状态 只有0和1,1表示此点已被占用*/ • int color; /*颜色,游戏底板的每个点可以拥有不同 的颜色.增强美观*/ • }Table_board[Vertical_boxs][Horizontal_boxs];
6. 游戏方块操作判断处理
游戏方块操作判断处理主要执行对当前操作 (右移、左移、下移、旋转)进行条件判 断,若满足条件,则返回true。 移动时,要逐行逐列进行判断,采用与方法 进行比较。
6. 游戏方块操作判断处理
• /* 判断是否可以移动 • * x,y为当前方块位置 • * box_numb为方块号 • * direction 方向标志 • * 返回true 和false • #define MoveLeft -1 • #define MoveRight 1 • #define MoveDown 0 • */ • int MoveAble(int x,int y,int box_numb,int direction)
5. 满行处理
• /**********初始化界面*******
– – – – – – *参数说明: * x,y为左上角坐标 * m,n对应于Vertical_boxs,Horizontal_boxs * 分别表示纵横方向上方块的个数(以方块为单位) * BSIZE Sys_x Sys_y **********************************/
• void initialize(int x,int y,int m,int n)
5. 满行处理
/*找到一行满的情况*/ • void setFullRow(int t_boardy) • /* 删除一行满的情况 • * 这里的y为具体哪一行为满 • */ • int DelFullRow(int y)
7.扩展新的功能
• 成绩 • 速度 • 帮助
4 .中断计时与方块自由下落
• • • • • • /* 新的时钟中断处理函数 */ void interrupt newtimer(void) /* 设置新的时钟中断处理过程 */ void SetTimer(void interrupt(*IntProc)(void)) /* 恢复原有的时钟中断处理过程 */ void KillTimer()
• struct SHAPE shapes[MAX_BOX]
3. 方块的构造与产生
• 方块的显示 • Show_box(x,y,box_numb,color)
– – – – – bar(x,y,x+BSIZE,y+BSIZE); line(x,y,x+BSIZE,y); line(x,y,x,y+BSIZE); line(x,y+BSIZE,x+BSIZE,y+BSIZE); line(x+BSIZE,y,x+BSIZE,y+BSIZE);
4 .中断计时与方块自由下落
• 系统为我们提供了一个时钟中断,时钟中 断大约每秒钟发生18.2次。我们可以设置一 个全局的计时变量TimerCounter=0,这个 变量会在每次发生中断后加1。在按键检测 之后,判断这个变量是否大于我们设置的 门限值,就可以确定方块是否该自由下落 了。这种方法比起延时要节省系统资源, 而且按键响应也会更好。
• /* 擦除( Erase_box(x,y,box_numb)
4 .中断计时与方块自由下落
• 传统的俄罗斯方块都有这样的特性,就是 不管你的怎么移动或者翻转方块形状,每 隔一定时间这个方块都会自由下落一格。 而且,这个自由下落的速度还可能随你达 到的分数或是等级而不断增加。这种功能 是怎么实现的呢?
俄罗斯方块
简介
• 俄罗斯方块的游戏规则是:在游戏界面中, 不停的有游戏方块从窗口上方往下落。游 戏者需要根据游戏方块的形状,操作控制 键对方块进行移动,旋转,尽可能将一层 铺满。当一层被铺满后,该层会消失,否 则层会迭高。当层数迭高到不能落下游戏 广场后,该游戏结束。
功能描述
• • • • • 游戏方块预览功能 游戏方块控制功能 游戏显示更新功能 游戏速度分数更新功能 游戏帮助功能
总体设计
• • • • • • • 1. 总体设计; 2. 屏幕作图与窗口实现; 3. 方块的构造与产生; 4. 中断计时与方块自由下落; 5. 满行处理 ; 6. 游戏方块操作判断处理 7. 扩展新的功能;
游戏开始
进入图形模式
1. 总 体 设 计
调用initialize()初 始化 调用while(1),进入 主循环
• 通过初始化,生成游戏窗口
– void initialize(int x,int y,int m,int n)
3. 方块的构造与产生
• • • • • • • • • • • • 游戏方块Shape结构体 struct SHAPE { char box[2]; /*一个字节等于8位,每4位来表示一个方块的一行 如:box[0]="0x88",box[1]="0xc0"表示的是: 1000 1000 1100 0000*/ int color; /*每个方块的颜色*/ int next; /*下个方块的编号*/ };
是否ESC键 判断键值,并执 行相应动作
是否产生 Newbox
消除满行,更新 分数及速度
方块自由下落
游戏结束
2. 屏幕作图与窗口实现
• struct BOARD /*游戏底板结构,表示每个点所具有 的属性*/ • { • int var; /*当前状态 只有0和1,1表示此点已被占用*/ • int color; /*颜色,游戏底板的每个点可以拥有不同 的颜色.增强美观*/ • }Table_board[Vertical_boxs][Horizontal_boxs];
6. 游戏方块操作判断处理
游戏方块操作判断处理主要执行对当前操作 (右移、左移、下移、旋转)进行条件判 断,若满足条件,则返回true。 移动时,要逐行逐列进行判断,采用与方法 进行比较。
6. 游戏方块操作判断处理
• /* 判断是否可以移动 • * x,y为当前方块位置 • * box_numb为方块号 • * direction 方向标志 • * 返回true 和false • #define MoveLeft -1 • #define MoveRight 1 • #define MoveDown 0 • */ • int MoveAble(int x,int y,int box_numb,int direction)
5. 满行处理
• /**********初始化界面*******
– – – – – – *参数说明: * x,y为左上角坐标 * m,n对应于Vertical_boxs,Horizontal_boxs * 分别表示纵横方向上方块的个数(以方块为单位) * BSIZE Sys_x Sys_y **********************************/
• void initialize(int x,int y,int m,int n)
5. 满行处理
/*找到一行满的情况*/ • void setFullRow(int t_boardy) • /* 删除一行满的情况 • * 这里的y为具体哪一行为满 • */ • int DelFullRow(int y)
7.扩展新的功能
• 成绩 • 速度 • 帮助
4 .中断计时与方块自由下落
• • • • • • /* 新的时钟中断处理函数 */ void interrupt newtimer(void) /* 设置新的时钟中断处理过程 */ void SetTimer(void interrupt(*IntProc)(void)) /* 恢复原有的时钟中断处理过程 */ void KillTimer()
• struct SHAPE shapes[MAX_BOX]
3. 方块的构造与产生
• 方块的显示 • Show_box(x,y,box_numb,color)
– – – – – bar(x,y,x+BSIZE,y+BSIZE); line(x,y,x+BSIZE,y); line(x,y,x,y+BSIZE); line(x,y+BSIZE,x+BSIZE,y+BSIZE); line(x+BSIZE,y,x+BSIZE,y+BSIZE);
4 .中断计时与方块自由下落
• 系统为我们提供了一个时钟中断,时钟中 断大约每秒钟发生18.2次。我们可以设置一 个全局的计时变量TimerCounter=0,这个 变量会在每次发生中断后加1。在按键检测 之后,判断这个变量是否大于我们设置的 门限值,就可以确定方块是否该自由下落 了。这种方法比起延时要节省系统资源, 而且按键响应也会更好。
• /* 擦除( Erase_box(x,y,box_numb)
4 .中断计时与方块自由下落
• 传统的俄罗斯方块都有这样的特性,就是 不管你的怎么移动或者翻转方块形状,每 隔一定时间这个方块都会自由下落一格。 而且,这个自由下落的速度还可能随你达 到的分数或是等级而不断增加。这种功能 是怎么实现的呢?
俄罗斯方块
简介
• 俄罗斯方块的游戏规则是:在游戏界面中, 不停的有游戏方块从窗口上方往下落。游 戏者需要根据游戏方块的形状,操作控制 键对方块进行移动,旋转,尽可能将一层 铺满。当一层被铺满后,该层会消失,否 则层会迭高。当层数迭高到不能落下游戏 广场后,该游戏结束。
功能描述
• • • • • 游戏方块预览功能 游戏方块控制功能 游戏显示更新功能 游戏速度分数更新功能 游戏帮助功能
总体设计
• • • • • • • 1. 总体设计; 2. 屏幕作图与窗口实现; 3. 方块的构造与产生; 4. 中断计时与方块自由下落; 5. 满行处理 ; 6. 游戏方块操作判断处理 7. 扩展新的功能;
游戏开始
进入图形模式
1. 总 体 设 计
调用initialize()初 始化 调用while(1),进入 主循环
• 通过初始化,生成游戏窗口
– void initialize(int x,int y,int m,int n)
3. 方块的构造与产生
• • • • • • • • • • • • 游戏方块Shape结构体 struct SHAPE { char box[2]; /*一个字节等于8位,每4位来表示一个方块的一行 如:box[0]="0x88",box[1]="0xc0"表示的是: 1000 1000 1100 0000*/ int color; /*每个方块的颜色*/ int next; /*下个方块的编号*/ };