俄罗斯方块比上一个项目贪吃蛇的难度大,

需要考虑到初始化方块的形状,以及对方块变形的存储

随机产生方块图形可以类比贪吃蛇食物的随机产生 srand()实现

初始化边界

方块的自动下落 用sleep()控制下落速度

控制范围,当靠近边界空间不够时,不能进行形状的变换

当某一行被方块铺满时,消除

...........................

不多说了

直接上代码吧

// 方块 简单.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h" //

#include

#include

#include

#include

#include

#define MOD 28

#define SIZE_N 19

#define SIZE_M 12

int cur_x, cur_y;

int score, mark, next, map[SIZE_N][SIZE_M], Gamespeed = 300;

int shape[28][6] = {//这是个比较偷懒的方法,就是7种方块,加上旋转总共28种

{ 0,-1,0,-2,1,0 },{ 0,1,1,0,2,0 },{ -1,0,0,1,0,2 },{ 0,-1,-1,0,-2,0 },

{ 0,-1,0,1,-1,0 },{ 0,1,1,0,-1,0 },{ 1,0,0,-1,0,1 },{ 1,0,-1,0,0,-1 },

{ -1,1,0,1,1,0 },{ 0,-1,1,0,1,1 },{ -1,0,0,-1,1,-1 },{ -1,-1,-1,0,0,1 },

{ -1,0,0,1,1,1 },{ 0,1,1,-1,1,0 },{ -1,0,0,1,1,1 },{ 0,1,1,-1,1,0 },

{ -1,0,0,-1,0,-2 },{ -1,0,-2,0,0,1 },{ 0,1,0,2,1,0 },{ 0,-1,1,0,2,0 },

{ 0,1,1,0,1,1 },{ 0,-1,1,0,1,-1 },{ -1,0,0,-1,-1,-1 },{ -1,0,-1,1,0,1 },

{ 0,1,0,2,0,3 },{ 1,0,2,0,3,0 },{ 0,-1,0,-2,0,-3 },{ -1,0,-2,0,-3,0 }

};

void gotoxy(int x, int y) {//gotoxy在TC中是在system.h库文件里的一个函数//功能就是在屏幕上输出字符

COORD c;

c.X = x - 1;

c.Y = y - 1;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);

}

void Gameover() {//游戏结束的判断

int i, j, flag = 0;

for (j = 1;j

if (map[1][j] != 0) {

flag = 1;

break;

}

}

if (flag == 1) {

for (i = 1;i

gotoxy(2, i + 1);

for (j = 1;j

printf("□");

}

puts("");

}

gotoxy(7, 9);

printf("GAME OVER!");

gotoxy(1, SIZE_N + 1);

exit(0);

}

}

void ShowMap(int id) {

int i, j;

gotoxy(1, 1);

if (id != -1) {

for (i = 0;i

for (j = 0;j

if (i == 0 && j == 0 || i == 0 && j == SIZE_M - 1 || j == 0 && i == SIZE_N - 1 || j == SIZE_M - 1 && i == SIZE_N - 1)

printf(" ");//四个角落

else if (i == 0 || i == SIZE_N - 1)

printf("--");//绘制顶部边界

else if (j == 0 || j == SIZE_M - 1)

printf("|");//两侧边界

else if (map[i][j] == 2)

printf("■");//接触到底部,固定显示

else if (i == cur_x + shape[id][0] && j == cur_y + shape[id][1] ||

i == cur_x + shape[id][2] && j == cur_y + shape[id][3] ||

i == cur_x + shape[id][4] && j == cur_y + shape[id][5] ||

i == cur_x && j == cur_y)

printf("■");//初始话方块的图形,从上方下落

else if (map[i][j] == 0)

printf(" ");//非方框产生和下落部分,清空

}

/*//边框右侧的显示区域**

****

*/

if (i == 1)

printf(" next:");

if (i == 11)

printf(" score : %d", score);

if (i == 14)

printf(" speed : %d", score / 100 + 1);

puts("");

}

}

else {

mark = 1;

for (i = 0;i

for (j = 0;j

if (i == 0 && j == 0 || i == 0 && j == SIZE_M - 1 || j == 0 && i == SIZE_N - 1 || j == SIZE_M - 1 && i == SIZE_N - 1)

printf(" ");//四个角落

else if (i == 0 || i == SIZE_N - 1)

printf("--");// 消除底层的话,用符号覆盖

else if (j == 0 || j == SIZE_M - 1)

printf("|");

else if (map[i][j] == 2)

printf("■");

else if (map[i][j] == 0)

printf(" ");

}

if (i == 1)

printf(" next:");

if (i == 11)

printf(" score : %d", score);

if (i == 14)

printf(" speed : %d", score / 100 + 1);

puts("");

}

}

/*对于 next 方块的处理,

先擦除再画图

*****

*/

gotoxy(30, 6);

printf(" ");

for (i = 0;i<6;i = i + 2) {

gotoxy(30 + 2 * shape[id][i + 1], 6 + shape[id][i]);

printf(" ");

}

gotoxy(30, 6);

printf("■");

for (i = 0;i<6;i = i + 2) { //显示next方块的形状在右侧区域

gotoxy(30 + 2 * shape[next][i + 1], 6 + shape[next][i]);

printf("■");

}

Sleep(Gamespeed);

}

void init(int id) {//初始化函数,cur_x,cur_y是全局变量,标记了移动方块的位置

memset(map, 0, sizeof(map)); //用o对map内存空间初始化

for (int i = 0;i

for (int j = 0;j

if (i == SIZE_N - 1 || j == 0 || j == SIZE_M - 1)

map[i][j] = -1;

}

cur_x = 0; cur_y =5;

ShowMap(id);

}

/*判断是否出界,或者说是否合法**

**********

**********/

int judge_in(int x, int y, int id) {//判断是否出界,或者说是否合法

if (map[x][y] != 0)

return 0;

for (int i = 0;i<6;i = i + 2) {

if (map[x + shape[id][i]][y + shape[id][i + 1]] != 0)

return 0;

}

return 1;

}

void fun_score() {//得分,擦除行的闪烁,还有图形的向下平移

for (int i = 1;i

int flag = 0;

for (int j = 1;j

if (map[i][j] != 2) {

flag = 1;

break;

}

}

if (flag == 0) {

int k = 3;

while (k--) {

gotoxy(2, i + 1);

for (int ii = 1;ii

if (map[i][ii] == 2) {

if (k % 2 == 1)

printf(" ");

else

printf("■");

}

}

Sleep(100);

}

for (int ii = i;ii>1;ii--) {

for (int jj = 1;jj

map[ii][jj] = map[ii - 1][jj];

}

ShowMap(-1);

score += 10;

if (score % 100 == 0 && score != 0)

Gamespeed -= 50;

}

}

}

void main() {

int i, id, set = 1;

srand((unsigned)time(NULL));

id = rand() % MOD;

id = (id + MOD) % MOD;

next = rand() % MOD;

next = (next + MOD) % MOD;

init(id);

while (1) {

Here:mark = 0;

if (set == 0) {

id = next;

next = rand() % MOD;

next = (next + MOD) % MOD;

cur_x = 0;

cur_y = 5;

set = 1;

}

while (!_kbhit()) {

Gameover();

if (judge_in(cur_x + 1, cur_y, id) == 1)

cur_x++;

else {

map[cur_x][cur_y] = 2;

for (i = 0;i<6;i = i + 2)

map[cur_x + shape[id][i]][cur_y + shape[id][i + 1]] = 2;

fun_score();

set = 0;

}

if (mark != 1)ShowMap(id);

goto Here;

}//end of while(!kbhit())

char key;

key = _getch();

if (key == 72) {

int tmp = id;

id++;

if (id % 4 == 0 && id != 0)

id = id - 4;

if (judge_in(cur_x, cur_y, id) != 1)

id = tmp;

}

else if (key == 80 && judge_in(cur_x + 1, cur_y, id) == 1)

cur_x++;

else if (key == 75 && judge_in(cur_x, cur_y - 1, id) == 1)

cur_y--;

else if (key == 77 && judge_in(cur_x, cur_y + 1, id) == 1)

cur_y++;

else if (key == 27) { gotoxy(1, SIZE_N + 1);

exit(0); }

}

}

学生用计算机怎么玩俄罗斯方块,计算机专业项目二 俄罗斯方块相关推荐

  1. 科学计算机怎么玩游戏,计算机也能玩文本游戏

    计算机也能玩文本游戏 已具备自主探究词义的能力 2015-10-10科技日报 刘岁晗 [字体:大 中 小] 语音播报 美国麻省理工学院近日设计了一种计算机系统,可在没有任何关于语言是如何运作的预先设定 ...

  2. Qt及Qt Quick开发实战精解项目二俄罗斯方块 items方法报错

    在练习<Qt及Qt Quick开发实战精解>第二章的项目时,在MyView::clearFullRows中有这样一行代码 QList<QGraphicsItem*> list ...

  3. 学生专用计算机玩俄罗斯方块,c++编程俄罗斯方块计算机实习报告模板.doc

    c编程俄罗斯方块计算机实习报告模板 c++编程俄罗斯方块计算机实习报告模板c++编程俄罗斯方块计算机实习报告模板 姓名: 班级: 学号: 小班序号: 指导老师: 题目:用c++编程俄罗斯方块 邮箱: ...

  4. 【调剂】欢迎材料、机械、计算机、化工等相关专业学生调剂(专业开头08,需考数一或数二)...

    公众号[计算机与软件考研]每天都会发布最新的计算机考研调剂信息! 点击公众号界面左下角的调剂信息或者公众号回复"调剂"是计算机/软件等专业的所有调剂信息集合,会一直更新的. 欢迎材 ...

  5. 南华大学计算机学院龚向坚,以培养学生计算思维能力为目标的计算机专业主干课程教学改革探讨龚向坚.pdf...

    以培养学生计算思维能力为目标的计算机专业主干课程教学改革探讨龚向坚 31 1 2014 3 第 卷第 期 高等教育研究 年 月 以培养学生计算思维能力为目标的计算机 专业主干课程教学改革探讨* 龚向坚 ...

  6. 计算机专业可以考航空航天专业研究生吗,我是信息与计算科学专业的大二学生,想考北京航空航天计算机专业方向的研究生,那么从现在起我该做些什么...

    我是信息与计算科学专业的大二学生,想考北京航空航天计算机专业方向的研究生,那么从现在起我该做些什么 答案:4  信息版本:手机版 解决时间 2019-10-05 23:10 已解决 2019-10-0 ...

  7. 学计算机可以用算盘吗,看图猜成语黑板学生算盘计算机答案玩法经验分享

    看图猜成语黑板学生算盘计算机答案玩法经验分享是小编今天给各位玩家老爷到来的内容,这道题是什么呢,4张不同形式的表达效果,每张图所指的方向都是同一点,还不了解的玩家跟着小编一起看看接下来的分析吧,希望能 ...

  8. 制药工程专业可以跨考计算机,我是学音乐大三学生想考研,想考别的专业请问能考什么专业比较好考...

    我是学音乐大三学生想考研,想考别的专业请问能考什么专业比较好考以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我是学音乐 ...

  9. 景观专业结合计算机基础的论文,计算机基础应用论文

    计算机应用日益普及,且发展飞速,提高大学计算机基础课程的教学质量对高职院校教育质量工程有着非常重要的意义.下面是学习啦小编为大家整理的计算机基础应用论文,供大家参考. 计算机基础应用论文范文一:计算机 ...

最新文章

  1. maven(3)------maven构建web项目详细步骤
  2. offsetLeft 、offsetWidth、scrollHeight等的区别
  3. 《中国人工智能学会通讯》——2.31 跨环境抽象(Abstracting Across Environments)
  4. 河南职称计算机啥时间考试,河南省2020年高级职称考试时间与具体安排
  5. C#开源项目:SiMay远程控制管理系统
  6. JAX-RS 2.0:自定义内容处理
  7. 为什么百度统计里面的广告那么多_里面东西一模一样的桶装方便面为什么比袋装贵那么多?...
  8. 递归——数的计算(洛谷 P1028)
  9. 关于CSS与HTML知识点总结(二)
  10. 微信公众号开发--.Net Core实现微信消息加解密
  11. FFT(快速傅里叶) c语言版
  12. rest api是什么_如何选择合适的API测试工具
  13. Hbase与zookeeper
  14. 结对编程项目总结(王开207, 唐彬170)
  15. python语法32[装饰器decorator](转)
  16. OpenDDS项目练习指南
  17. 为什么有的计算机没有ppt,电脑上没有ppt怎么办
  18. Qt编写安防视频监控系统46-视频存储
  19. js知识点 掘金_掘金js
  20. 【MFC】动态加载Picture Control控件中的图片

热门文章

  1. 终端上网行为管理开源框架(柏晓技术deskvideosys)
  2. python爬取歌词生成词云图
  3. 电信获取光猫超级密码
  4. 青云QingCloud:重剑无锋 大巧不工
  5. XML采用Boost::regex解析实例
  6. Windows下PySpark的配置
  7. 2017春节~人生智慧箴言
  8. 怎样快速将PDF文件旋转
  9. (第五章) UI--PS基础 调色与校色
  10. Android蓝牙音乐(基于Android10)