扫雷程序代码c语言 俄罗斯方块

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Sina Visitor System没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!学了C语言,如何开发一个有声有色的俄罗斯方块游戏? - 好知网-重拾学习乐趣-Powered By Howzhi
学过C语言的同学往往有这样一种感觉:语法知识倒是学了不少,卷子上的题目也会做,可是就是不知道如何用这些知识来做一个实际能用的真正的软件。本课程就是用来解决这个问题的。大家在掌握基本的C语言知识之后,可以在本课程的引导下,利用我们学到的C语言知识,一步一步地实现一个有声有色的俄罗斯方块游戏。在这个过程中,大家可以学习到如何设计实现一个软件,如何运用我们学到的C语言知识来实现我们的设计意图,了解到一个比较复杂的软件是如何一步步从一个最小原型扩展形成的。因为这个程序涉及到了一些Windows编程方面的知识,学完之后,大家对Windows编程也会有一定的了解。在这个过程中,我们不仅能学到知识,还能在学习的过程中获得快乐,当我们玩着自己开发的俄罗斯方块,那该是怎样的一种成就感?不罗嗦了,开始吧!如果有疑问,可以到这里提出:
Powered by
扫一扫 关注好知微信先给大家看一看运行截图
想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
//////////////////////////////////////////////////////////////
// 名称: 俄罗斯方块 彩色版1.0.0//
// 语言: C语言//
// 环境: Microsoft Visual C++ 6.0//
// 日期: 号//
// 作者: 鼠标猎人//
//////////////////////////////////////////////////////////////
void gotoxy(int x, int y);//控制光标。X表示横坐标,Y表示纵坐标
void console();//设置控制台窗口大小,为了让程序运行得更好看
void my_print();//设置界面
void my_randout();//随机出现方块,并打印在提示区
void my_printblock();//打印 4*4 的方格来显示方块
void my_up();//旋转
void my_down();//下移
void my_lift();//左移
void my_right();//右移
void clear();//消除整行
void gameover();//游戏结束
void my_stop();//游戏暂停
int tem[4][4];//用4*4的方格来控制方块的操作和显示 这个作为传值媒介想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
int block[4][4];//提示区的方块
int BLOCK[4][4];//正在下落的方块
int scope[25][34] = { 0 };//操作的范围 这里要注意,一个方格是占两个横坐标单位的
int point_x, point_y;//方格的左上角坐标
int fen = 0;//得分
bool check =//检查方块还能不能下落
int block0[4][4] = { { 0,1,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,0,0 } };// 7 个方块 用数组表示 正“7”
int block1[4][4] = { { 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,0,0,0 } };// 反“7”
int block2[4][4] = { { 0,0,0,0 },{ 0,0,1,1 },{ 0,1,1,0 },{ 0,0,0,0 } };// 反“z”
int block3[4][4] = { { 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 },{ 0,0,0,0 } };// 正“z”
int block4[4][4] = { { 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 },{ 0,0,0,0 } };// 倒“T”
int block5[4][4] = { { 0,0,0,0 },{ 0,1,1,0 },{ 0,1,1,0 },{ 0,0,0,0 } };// 正方形
int block6[4][4] = { { 0,0,0,0 },{ 0,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 } };// 直条
void main()
srand((unsigned)time(NULL));//设置随机数种子
int time=0;//控制下落时间
console();
my_print();
my_randout();
while (true)//死循环
if (check)//如果没有正在下落的方块就执行if里面的
point_x = 14;//方块最初出现的地方
point_y = 0;
for (i = 0; i
for (j = 0; j
BLOCK[i][j] = block[i][j];//将提示区的方块数组传到下落的方块数组
my_printblock();//在point_x,point_y显示方块。
my_randout();//提示区随机换一个方块
if (_kbhit()) //检测,如果有按键就执行if里面的
key = _getch();//捕获按键
switch (key)
case 72:my_up();//上
case 75:my_lift();//左
case 77:my_right();//右
case 80:my_down();//下
case 32:my_stop();//空格 暂停或开始
想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
case 27:exit(0);//Esc 退出
Sleep(30);//等待0.03秒 0.03秒才能执行一个按键 也降低CPU
if (0 == ++time % 30)//控制下落的时间=30*30毫秒
my_down();//时间到自动下落一格
if (true == check)//当不能下落时
for (i = 0; i
for (j = 0; j
if (1 == BLOCK[i][j])
scope[point_x / 2 + j][point_y + i] = BLOCK[i][j];//把下落的方块赋值给操作区的数组
//这里的point_x除以2是因为一个小格子占两个横坐标
my_printblock();
clear();//如果有某一行满了就消除
//设置窗口位置和大小,为了让程序运行得更好看
void console()
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
CONSOLE_SCREEN_BUFFER_INFO bI // 窗口缓冲区信息
GetConsoleScreenBufferInfo(hOut, &bInfo);// 获取窗口缓冲区信息
SetConsoleTitle("俄罗斯方块 C版"); // 设置窗口的标题
COORD size = { 80, 32 };//不能小于默认大小(80,25)
SetConsoleScreenBufferSize(hOut, size); // 重新设置缓冲区大小*/
SMALL_RECT rc = { 0,0, 63, 31 }; //不能大于缓冲区大小
SetConsoleWindowInfo(hOut, true, &rc);// 重置窗口大小
void my_print()
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY);//黑底亮蓝字。
for (int i = 1; i
printf("\t\t\t\t | |\n");
printf(" |---------------------------|\n");//框架
gotoxy(36, 0);
printf("---------------------------");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);//黑底亮黄字。
gotoxy(40, 3);
printf("分 数: %d", fen);
gotoxy(36, 6);
printf("下一个方块:");
gotoxy(36, 14);
printf("操作方法:");
gotoxy(40, 16);
printf(":旋转 :沉淀");
gotoxy(40, 18);
printf(":右移 :左移");
gotoxy(39, 20);
printf("空格键:开始 / 暂停");
gotoxy(39, 22);
printf(" Esc:退出");
gotoxy(36, 25);
printf("关 于:");
gotoxy(40, 26);
printf("俄罗斯方块 1.0.0");
gotoxy(49, 27);
printf("作者:鼠标猎人");
gotoxy(50, 28);
printf("日");
//设置光标输出的位置函数。坐标不能为负数
void gotoxy(int x, int y)//X表示横坐标,Y表示纵坐标。
app = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(app, pos);
void my_up()
for (i = 0; i
for (j = 0; j
tem[i][j] = BLOCK[i][j];
if (1 == BLOCK[i][j])
gotoxy(point_x + j * 2, point_y + i);
printf(" ");
for (i = 0; i
for (j = 0; j
BLOCK[j][3 - i] = tem[i][j];
//以上为旋转。
//下面为防止旋转后超出框架范围
for (j = 0; j
for (i = 0; i
if (1 == BLOCK[i][j] && point_x
point_x += 2;
else if (1 == BLOCK[i][3 - j] && point_x & 24)
point_x -= 2;
my_printblock();//旋转之后立即显示出来
void my_lift()
for (i = 0; i
for (j = 0; j
if (1 == BLOCK[j][i] && (point_x + 2 * i - 1
//如果到边缘 或者是左边已经有了方块
for (i = 0; i
for (j = 0; j
if (1 == BLOCK[i][j])
gotoxy(point_x + j * 2, point_y + i);
printf(" ");//把之前的擦掉
point_x -= 2;
my_printblock();
void my_right()
for (i = 3; i & 0; i--)
for (j = 0; j
if (1 == BLOCK[j][i] && (point_x + 2 * i + 2 & 30 || 1 == scope[point_x / 2 + i + 1][point_y + j]))
//如果到边缘 或者是右边已经有了方块
for (i = 0; i
for (j = 0; j
if (1 == BLOCK[i][j])
gotoxy(point_x + j * 2, point_y + i);
printf(" ");//把之前的擦掉
point_x += 2;
my_printblock();
void my_down()
if (true == check)
//不能下落直接不执行
gotoxy(point_x, point_y);
for (i = 3; i & 0; i--)//检测该方格还能不能下落
for (j = 0; j
if (1 == BLOCK[i][j])
if (1 == scope[point_x / 2 + j][point_y + i + 1] || point_y + i + 1 & 28) //到最下边或是下面已经有方格
for (i = 0; i
for (j = 0; j
if (1 == BLOCK[i][j])
gotoxy(point_x + j * 2, point_y + i);
printf(" ");//能下落,擦除以前的方格
point_y++;
my_printblock();//在下一格显示
void my_stop()
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoxy(10, 10);printf(" ");
gotoxy(10, 11);printf("
gotoxy(10, 12);printf("
gotoxy(10, 13);printf("
gotoxy(10, 14);printf("
gotoxy(10, 15);printf("
gotoxy(10, 16);printf("
gotoxy(10, 17);printf("
gotoxy(10, 18);printf(" ");
if (32 == _getch()) //用等待输入字符实现暂停 32为空格
gotoxy(10, 10);printf(" ");
gotoxy(10, 11);printf("
gotoxy(10, 12);printf("
gotoxy(10, 13);printf("
gotoxy(10, 14);printf("
gotoxy(10, 15);printf("
gotoxy(10, 16);printf("
gotoxy(10, 17);printf("
gotoxy(10, 18);printf(" ");
Sleep(1000);
gotoxy(10, 10);printf(" ");
gotoxy(10, 11);printf("
gotoxy(10, 12);printf("
gotoxy(10, 13);printf("
gotoxy(10, 14);printf("
gotoxy(10, 15);printf("
gotoxy(10, 16);printf("
gotoxy(10, 17);printf("
gotoxy(10, 18);printf(" ");
Sleep(1000);
gotoxy(10, 10);printf(" ");
gotoxy(10, 11);printf("
gotoxy(10, 12);printf("
gotoxy(10, 13);printf("
gotoxy(10, 14);printf("
gotoxy(10, 15);printf("
gotoxy(10, 16);printf("
gotoxy(10, 17);printf("
gotoxy(10, 18);printf(" ");
Sleep(1000);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
for (int i = 0; i
想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
gotoxy(10, 10 + i);
for (int j = 0; j
if (1 == scope[5 + j][10 + i])
printf("");
printf(" ");
void clear()
int i, j, k, m = 0;
for (i = point_y + 3; i &= point_y; i--)
for (j = 1; j
if (0 == scope[j][i])
if (16 == j)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
for (k = k&3; k--)
for (j = 1; j
scope[j][k] = scope[j][k - 1];
gotoxy(j * 2, k);
if (1 == scope[j][k])
printf("");
printf(" ");
for (j = 1; j
scope[j][4] = 0;
switch (m) {//判断一次消除了几行,来设置得分数
case 1: fen += 100;
case 2: fen += 230;
case 3: fen += 438;
case 4: fen += 854;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);//黑底亮黄色字。
想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
gotoxy(40, 3);
printf("分 数: %d", fen);
for (j = 7; j
if (1 == scope[j][4])
gameover();
//随机出现方块
void my_randout()
switch (rand() % 7)
case 0:for (i = 0; i
for (j = 0; j
block[i][j] = block0[i][j];
case 1: for (i = 0; i
for (j = 0; j
block[i][j] = block1[i][j];
case 2: for (i = 0; i
for (j = 0; j
block[i][j] = block2[i][j];
case 3: for (i = 0; i
for (j = 0; j
block[i][j] = block3[i][j];
case 4: for (i = 0; i
for (j = 0; j
block[i][j] = block4[i][j];
case 5: for (i = 0; i
for (j = 0; j
block[i][j] = block5[i][j];
case 6: for (i = 0; i
for (j = 0; j
block[i][j] = block6[i][j];
for (i = 0; i
for (j = 0; j
tem[i][j] = block[i][j];
switch (rand() % 4)//再设置随机旋转的方向
想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
case 1: for (i = 0; i
for (j = 0; j
block[j][3 - i] = tem[i][j];
case 2: for (i = 0; i
for (j = 0; j
block[3 - i][3 - j] = tem[i][j];
case 3: for (i = 0; i
for (j = 0; j
block[3 - j][i] = tem[i][j];
//打印提示区的方块
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);//黑底亮红字。
for (i = 0; i
gotoxy(44, 8 + i);
for (j = 0; j
if (1 == block[i][j])
printf("");
printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);//黑底白字
//显示方格
void my_printblock()
for (i = 0; i
for (j = 0; j
if (point_x / 2 + j & 0)
if (1 == scope[point_x / 2 + j][point_y + i])
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
gotoxy(point_x + j * 2, point_y + i);
printf("");
else if (1 == BLOCK[i][j])
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
gotoxy(point_x + j * 2, point_y + i);
printf("");
void gameover()
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
gotoxy(4, 10);printf(" ");
gotoxy(4, 11);printf("
gotoxy(4, 12);printf("");
gotoxy(4, 13);printf("
gotoxy(4, 14);printf("
gotoxy(4, 15);printf("
gotoxy(4, 16);printf(" ");
gotoxy(32, 17);printf("空格键:重来\tEsc:退出");
switch (_getch())
case 32: system("cls");//清屏
console();
my_print();//输出界面
my_randout();
memset(scope, 0, sizeof(int) * 25 * 34);//数组清零
case 27: exit(0);
想要一起学习C 的可以加裙二四八八九四四三零,有很多大神一起学习交流,有资源,然后可以订阅一下
文章转载自网络,作者观点不代表本网站立场,如需处理请联系客服
C加加其它文章
现在有很多朋友都在学习编程语言,大家在学习的过程中难免遇到困难。很多人在遇到困难的时候都会想到放弃,也有那么一部分人会一直坚持下去。今天小编要介绍一个网友他学习编程的经历。他现在职位是高级软件编程工程师,领导着一个由10名工程师组成的团队,负责多个核心
这几天没事的时候,翻了翻这本书,中间有一节通过一个问题讲述了一种比较巧妙的排序方法—位图排序。我们还是先看问题吧。问题描述编程珠玑这本书给出的问题如下:输入:一个至多包含n个非负整数的文件,每个数都小于n; 且这些整数都不重复;数据之间也不存在关联关系。
初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始
二维数组:数组元素是双下标变量的数组。想要一起学习C++的可以加裙二四八八九四四三零,裙内有各种资料满足大家,欢迎加裙数据类型数组名[行][列];仍然是连续存放的。1、初始化A、一般形式int arr[3][3] = {{ 18, 20, 26 },{ 35, 10, 23 },{ 24, 32, 58 } };B、省去里
有很多小伙伴呢经常会问小编学习C语言和C++难不难今天我跟大家分享一下吧其实还好,坚持下去就可以了,看你的态度,是不是相信自己对自己有没有那个信心,看你自己将来想走一个什么样的路,如果想走程序的路子,还是告诉你做好准备的 C语言是比较灵活的东西,如果你有兴
这个代码将链表类的声明、定义及测试写在一起了。可供初学者更好的学习链表。想要一起学习C++的可以加裙二四八八九四四三零,裙内有各种资料满足大家,欢迎加裙想要一起学习C++的可以加裙二四八八九四四三零,裙内有各种资料满足大家,欢迎加裙想要一起学习C++的可以加裙
.函数计算器是电子计算器的一种,可进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称科学型计算器。仅供参考:/*---------------------------------------函数型计算器(VC++6.0,Win32 Console)功能:目前提供了10多个常用数学函数:正弦sin余弦cos正切tan开
结构体1、什么是结构体基本数据类型:int char float double short long unsigned (一个变量)数组:很多个变量 只能保存一种类型的数据结构体:也是一种数据类型,这种数据类型,是程序员自己定义。可以包含多种数据类型。2、声明结构体structstudents ----------------
很多人的编程第一门语言都是C语言吧,但是C语言入门简单,但是想深入就要下一番功夫了,下面这三本有”C语言圣经”之称的经典中的经典可以帮助你进阶C语言内功想要一起学习C++的可以加裙二四八八九四四三零,裙内有各种资料满足大家,欢迎加裙C专家编程《C专家编程》:展
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。像数组、字符串、动态分配的内存等
适合用来打基础,代码最后。如果想运行把背景音乐代码注释掉,食物有很多种可以加分减分,增长身体减少,超级果实等等,编译器CodeBlocks。需要源码自己进来吧,刚建立想要一起学习C++的可以加裙二四八八九四四三零,裙内有各种资料满足大家,欢迎加裙...
学习C语言之前,你必须首先要有一个正确的态度,没有一个正确态度的人是学不好任何东西的。你如果真想学好C语言的话,你就要做好好好学它的准备,不要三心二意.面向对象是高级也是最流行的语言,所有的面向对象语言几乎都是通用的,结构和特性都差不多,只要掌握和归纳好
int fact(int n);{{return 1;}else{return n*fact(n-1);}}int main(){scanf(%d,&i);printf(%d,fa
由于预处理命令不是 C 语言本身的组成部分,所以 C 编译程序不能识别它们,也就不能直接对它们进行编译,所以在 C 程序编译之前,必须先对预处理命令进行处理,处理后程序中不再包括预处理命令了,再由编译程序处理得到目标代码。C 语言提供的预处理命令共有三中:宏定义
现在有很小伙伴都在学习C/C++编程,其中有很大部分是大学生。大学生还需要自学?其实是的,应为大学光只是课堂上的内容远远不够支撑他们毕业以后找到一份薪资不错的工作。还有一部分人就是现在已经在社会上打拼的人,他们也是为了以后可以找到一份薪酬满意的工作,所以选
这是一个简单的小程序,让你与电脑对决。你可以自己学则出拳,电脑则随机出拳,最后判断胜负。启动程序后,让用户出拳,截图如下:当自己出拳之后,显示对决结果:截图:想要一起学习C++的可以加裙二四八八九四四三零,裙内有各种资料满足大家,欢迎加裙代码实现:是不是
我介绍几个办法,学习办法,期望你能找到爱好1。必定要和喜爱编程的,或编程凶猛的,或常常编程的人,在一同,常常探讨问题!初学编程会有许多问题呈现,你自己很 难处理 c是我们必定要学的,它是一种很挨近底层的言语!如果你要成为高手,应该学这个!C是个纯面向进程的
今天我们来一个好玩的,用c语言,制作一个心形图案。送给c语言初学者#include intmain() {for(floaty = 1.5f; y & -1.5f; y -= 0.1f) {for(floatx = -1.5f; x (expression) type是转换的目标类型而expression是要转换的值。cast-name包括static_cast / dynamic_cast
从性别上来讲,C语言是一位女性:各种游戏开发视频教程+初级入门C/C++资料可以加群:、无论你让她干什么,她绝对不可能自己找到方法。2、总是用复杂的方法解决简单的问题。3、不可能自主认识到本身错误。4、浪费时间是十分正常的事情。5、无论跟她说什么,都得
#include #include int main(){char title[200];//能存放200个字符的字符数组,用于保存窗口的标题HWND //窗口的句柄RECT //矩形结构体int width,//窗口的宽度和高度POINT ptC //窗口的中心点HDC //窗口的设备上下文HBRUSH hBrush,hClear

我要回帖

更多关于 c语言源代码 的文章

 

随机推荐