设为首页 加入收藏

TOP

从零实现俄罗斯方块(c语言+思路分析)(三)
2023-07-23 13:38:34 】 浏览:182
Tags:从零实 罗斯方 语言 路分析
ot; "); //打印空格覆盖(两个空格) } //把被清除行上面的行整体向下挪一格 for (int m = i; m >1; m--) { sum = 0; //记录上一行的方块个数 for (int n = 1; n < COL - 1; n++) { sum += face.data[m - 1][n]; //统计上一行的方块个数 face.data[m][n] = face.data[m - 1][n]; //将上一行方块的标识移到下一行 face.color[m][n] = face.color[m - 1][n]; //将上一行方块的颜色编号移到下一行 if (face.data[m][n] == 1) //上一行移下来的是方块,打印方块 { CursorJump(2 * n, m); //光标跳转到该位置 color(face.color[m][n]); //颜色设置为还方块的颜色 printf("■"); //打印方块 } else //上一行移下来的是空格,打印空格 { CursorJump(2 * n, m); //光标跳转到该位置 printf(" "); //打印空格(两个空格) } } if (sum == 0) //上一行移下来的全是空格,无需再将上层的方块向下移动(移动结束) return 1; //返回1,表示还需调用该函数进行判断(移动下来的可能还有满行) } } } //判断游戏是否结束 for (int j = 1; j < COL - 1; j++) { if (face.data[1][j] == 1) //顶层有方块存在(以第1行为顶层,不是第0行) { Sleep(1000); //留给玩家反应时间 system("cls"); //清空屏幕 color(7); //颜色设置为白色 CursorJump(2 * (COL / 3), ROW / 2 - 3); if (grade>max) { printf("恭喜你打破最高记录,最高记录更新为%d", grade); WriteGrade(); } else if (grade == max) { printf("与最高记录持平,加油再创佳绩", grade); } else { printf("请继续加油,当前与最高记录相差%d", max - grade); } CursorJump(2 * (COL / 3), ROW / 2); printf("GAME OVER"); while (1) { char ch; CursorJump(2 * (COL / 3), ROW / 2 + 3); printf("再来一局?(y/n):"); scanf("%c", &ch); if (ch == 'y' || ch == 'Y') { system("cls"); main(); } else if (ch == 'n' || ch == 'N') { CursorJump(2 * (COL / 3), ROW / 2 + 5); exit(0); } else { CursorJump(2 * (COL / 3), ROW / 2 + 4); printf("选择错误,请再次选择"); } } } } return 0; //判断结束,无需再调用该函数进行判断 } //游戏主体逻辑函数 void StartGame() { int shape = rand() % 7, form = rand() % 4; //随机获取方块的形状和形态 while (1) { int t = 0; int nextShape = rand() % 7, nextForm = rand() % 4; //随机获取下一个方块的形状和形态 int x = COL / 2 - 2, y = 0; //方块初始下落位置的横纵坐标 color(nextShape); //颜色设置为下一个方块的颜色 DrawBlock(nextShape, nextForm, COL + 3, 3); //将下一个方块显示在右上角 while (1) { color(shape); //颜色设置为当前正在下落的方块 DrawBlock(shape, form, x, y); //将该方块显示在初始下落位置 if (t == 0) { t = 15000; //这里t越小,方块下落越快(可以根据此设置游戏难度) } while (--t) { if (kbhit() != 0) //若键盘被敲击,则退出循环 break; } if (t == 0) //键盘未被敲击 { if (IsLegal(shape, form, x, y + 1) == 0) //方块再下落就不合法了(已经到达底部) { //将当前方块的信息录入face当中 //face:记录界面的每个位置是否有方块,若有方块还需记录该位置方块的颜色。 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (block[shape][form].space[i][j] == 1) { face.data[y + i][x + j] = 1; //将该位置标记为有方块 face.color[y + i][x + j] = shape; //记录该方块的颜色数值 } } } while (JudeFunc()); //判断此次方块下落是否得分以及游戏是否结束 break; //跳出当前死循环,准备进行下一个方块的下落 } else //未到底部 { DrawSpace(shape, form, x, y); //用空格覆盖当前方块所在位置 y++; //纵坐标自增(下一次显示方块时就相当于下落了一格了) } } else //键盘被敲击 { char ch = getch(); //读取keycode switch (ch) { case DOWN: //方向键:下 if (IsLegal(shape, form, x, y + 1) == 1) //判断方块向下移动一位后是否合法 { //方块下落后合法才进行以下操作 DrawSpace(shape, form, x, y); //用空格覆盖当前方
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇What is Point? 下一篇函数执行顺序

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目