俄罗斯方块- 源码文件 - 点击下载
说明:本程序使用DEV即可编译
效果截图:

1024.c

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include "order_b_1.h"
#include "help_fun_1.h"
#include "order_fun_1.h"
#include "order_fun_2.h"
/*#########################分隔线#########################*/
//head(),程序初始函数
void head(){console();//控制窗口srand((unsigned)time(NULL ));// 设置随机种子f_all_bianliang();//全局变量初始化 f_shuzhu_m();//m数组初始化f_data();//初始化data set_cursor(0);//隐藏光标 f_beijing();//窗口背景初始化copyright();//版权说明d_jieshao();//游戏介绍printf("按任意键继续.....\n");command(2);command(1);d_ditu();//显示地图d_shuoming();//游戏操作说明
}
/*#########################分隔线#########################*/
//body(),程序主体
void body(){c_weizhi();//新方块位置生成d_fankuai(mx,my);//显示方块r_m_data();//将地图记录进data while(G){if(kbhit()){//判断是否有键按下 switch(getch()){//获取用户按下的按键 case 0xE0:switch(getch()){//分析按键 case 72:t_yidong(1);break;case 80:t_yidong(2);break;case 75:t_yidong(3);break;case 77:t_yidong(4);break;default:break;}break;case 32:command(2);break;default:break;}}}
}
/*#########################分隔线#########################*/
//food(),程序末尾
void food(){set_color(0,15);command(1);printf("游戏结束!\n");printf("游戏得分:%d\n",F);printf("重新开始:1 结束:0\n");
}
/*#########################分隔线#########################*/
//程序运行函数
void run(){ do{head();//程序初始函数body();//程序主体food();//程序末尾}while(input_int(0,1));
}
/*#########################分隔线#########################*/
void main(){run();
}

help_fun_1.h

//基础函数头文件 /*
0 = 黑色       8 = 灰色
1 = 蓝色       9 = 淡蓝色
2 = 绿色       10 = 淡绿色
3 = 浅绿色     11 = 淡浅绿色
4 = 红色       12 = 淡红色
5 = 紫色       13 = 淡紫色
6 = 黄色       14 = 淡黄色
7 = 白色       15 = 亮白色
*/
//设置字符前景色和底色,ForeColor:字色,BackColor:背景色,基本颜色0-7,8-15是亮度加强的基本色
void set_color(int ForeColor,int BackColor){HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;SetConsoleTextAttribute(hConsole,BackColor*16+ForeColor) ;
}
//设置光标,flg=1:显示光标 flg=0:隐藏光标
void set_cursor(int flg){HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO cursor_info={100,flg};SetConsoleCursorInfo(hOut,&cursor_info);
}
//设置字符显示位置
void set_cocate(int x,int y)
{x*=2;//增加 HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);COORD loc={x,y};SetConsoleCursorPosition(hOut,loc);
}
//执行系统命令
void command(int a){
/*
1 = 清屏
2 = 暂停
*/
switch(a){case 1:system("cls");break;case 2:system("pause>command.txt");break;default:break;}
}
//整形数据输入
int input_int(int i,int j){int a=-100,k=0;printf("请输入 %d~%d 的数值,并按回车确定;\n",i,j);while(a>j||a<i){if(k!=0){printf("输入错误,请重新输入 %d~%d 的数值,并按回车确定;\n",i,j); }scanf("%d",&a);k++;}return a;
}
//版权说明
void copyright(){set_cocate(0,0);set_color(12,15);printf("########################################\n");printf("#Created At:20170909                   #\n");printf("#Algorithm Gossip:tetris               #\n");printf("#Developer:wunanhui                    #\n");printf("#Referenced By:http://www.wunanhui.wang#\n");printf("########################################\n");
}
//控制窗口
void console(){HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo(hOut, &bInfo );SetConsoleTitle("1024"); // 设置窗口的标题COORD size = {30, 30};//设置窗口大小SetConsoleScreenBufferSize(hOut,size);  //SMALL_RECT rc = {0,0,63,31};//SetConsoleWindowInfo(hOut,true,&rc);
}

order_b_1.h

/*#########################分隔线#########################*/
//常量定义区
//#define MAX_X 8
#define DT 4//地图大小 /*#########################分隔线#########################*/
//全局变量定义区
int m[DT][DT];//地图数组
int mx,my;//新方块坐标
int fi,fj;//for循环专用变量
int G;//游戏生命
int F;//游戏得分 /*#########################分隔线#########################*/
//结构体定义区
/*
typedef struct node{int x;int y;struct node *next;}slink;
*/

order_fun_1.h

/*
函数命名规则说明 动作_实体
1.初始化 =  f_
2.显示 =  d_
3.设置 =  s_
4.运行 = t_
5.生产 = c_
6.记录 = r_
*/
/*#########################分隔线#########################*/
//f_all_bianliang(),全局变量初始化
void f_all_bianliang(){fi=fj=mx=my=F=0;G=1;
}
/*#########################分隔线#########################*/
//f_shuzhu(),m数组初始化
void f_shuzhu_m(){for(fi=0;fi<DT;++fi){for(fj=0;fj<DT;++fj){m[fi][fj]=0; }}
}
/*#########################分隔线#########################*/
//f_beijing(),窗口背景初始化
void f_beijing(){int fanwei_x=80;int fanwei_y=25;set_color(0,15);for(fi=0;fi<fanwei_x;++fi){for(fj=0;fj<fanwei_y;++fj){set_cocate(fi,fj);printf("  ");}}
}
/*#########################分隔线#########################*/
// r_m_data(),将地图记录进data
void r_m_data(){if(1){FILE *fp;int i,j;fp=fopen("data.txt","a");for(fi=0;fi<DT;fi++){fprintf(fp,"|");for(fj=0;fj<DT;fj++){fprintf(fp,"%4d|",m[fi][fj]);}fprintf(fp,"\n");}   fprintf(fp,"\n");fclose(fp);}
}
/*#########################分隔线#########################*/
//f_data(),初始化data
void f_data(){FILE *fp;fp=fopen("data.txt","w");fclose(fp);
}
/*#########################分隔线#########################*/
//d_shuoming(),游戏操作说明
void d_shuoming(){set_color(0,15);set_cocate(0,19);printf("↑:上移 ↓:下移 ←:左移 →:右移 空格:暂停");
}
/*#########################分隔线#########################*/
//d_jieshao(),游戏介绍
void d_jieshao(){set_color(0,15);printf("1024是一款简单有趣的休闲益智游戏,有点像是求合体。\n");printf("滑动屏幕,移动数字,相同的数就可以叠加翻倍,直到方框被数字填满,看你能得多少高分。\n");
}

order_fun_2.h

/*
函数命名规则说明 动作_实体
1.初始化 =  f_
2.显示 =  d_
3.设置 =  s_
4.运行 = t_
5.生产 = c_
6.记录 = r_
*/
/*#########################分隔线#########################*/
//d_ditu(),显示地图
void d_ditu(){int fanwei=18;set_color(15,0);for(fi=0;fi<fanwei;++fi){for(fj=0;fj<fanwei;++fj){if(fi==0||fj==0||fi==fanwei-1||fj==fanwei-1){set_cocate(fi,fj);printf("  ");}}}
}
/*#########################分隔线#########################*/
//d_fengshu(),显示分数
void d_fengshu(){set_color(12,15);set_cocate(0,18);printf("游戏得分:%d",F+=m[mx][my]);
}
/*#########################分隔线#########################*/
//c_weizhi(),新方块位置生成
void c_weizhi(){int max=0,kailv;if(t_siwang()){G=0;return;}mx=rand()%DT;my=rand()%DT;while(m[mx][my]){mx=rand()%DT;my=rand()%DT;}for(fi=0;fi<DT;++fi){for(fj=0;fj<DT-1;++fj){if(max<m[fi][fj]){max=m[fi][fj];}}}m[mx][my]=2;if(max>=4&&rand()%100==0){m[mx][my]=4;}if(max>=8&&rand()%200==0){m[mx][my]=8;}if(max>=16&&rand()%300==0){m[mx][my]=16;}if(max>=32&&rand()%400==0){m[mx][my]=32;}d_fengshu();//显示分数
}
/*#########################分隔线#########################*/
//d_xinfankuai(),显示方块
void d_fankuai(int x,int y){switch(m[x][y]){case 0 :set_color(15,15);break;case 2 :set_color(15,1);break;case 4 :set_color(15,2);break;case 8 :set_color(15,3);break;case 16 :set_color(15,4);break;case 32 :set_color(15,5);break;case 64 :set_color(15,6);break;case 128 :set_color(15,9);break;case 256 :set_color(15,10);break;case 512 :set_color(15,11);break;case 1024 :set_color(15,12);break;case 2048 :set_color(15,13);break;case 4096 :set_color(15,14);break;case 8192 :set_color(15,8);break;default:break;}for(fi=x*4+1;fi<x*4+5;++fi){for(fj=y*4+1;fj<y*4+5;++fj){set_cocate(fi,fj);printf("  ");}}set_cocate(x*4+1,y*4+2);switch(m[x][y]){case 2 :printf("%4d",m[x][y]);break;case 4 :printf("%4d",m[x][y]);break; case 8 :printf("%4d",m[x][y]);break;case 16 :printf("%4d",m[x][y]);break;case 32 :printf("%4d",m[x][y]);break;case 64 :printf("%4d",m[x][y]);break;case 128 :printf("%5d",m[x][y]);break;case 256 :printf("%5d",m[x][y]);break;case 512 :printf("%5d",m[x][y]);break;case 1024 :printf("%6d",m[x][y]);break;case 2048 :printf("%6d",m[x][y]);break;case 4096 :printf("%6d",m[x][y]);break;case 8192 :printf("%6d",m[x][y]);break;default:break;}
}
/*#########################分隔线#########################*/
//t_yidong(),移动方块
void t_yidong(int a){int b=1;switch(a){case 1 :while(b){b=0;for(fi=0;fi<DT;++fi){for(fj=0;fj<DT-1;++fj){if(m[fi][fj]==0&&m[fi][fj+1]!=0){m[fi][fj]=m[fi][fj+1];m[fi][fj+1]=0;b=1;}}}}for(fi=0;fi<DT;++fi){for(fj=0;fj<DT-1;++fj){if(m[fi][fj]==m[fi][fj+1]&&m[fi][fj]!=0){m[fi][fj]*=2;m[fi][fj+1]=0;break;}}}b=1; while(b){b=0;for(fi=0;fi<DT;++fi){for(fj=0;fj<DT-1;++fj){if(m[fi][fj]==0&&m[fi][fj+1]!=0){m[fi][fj]=m[fi][fj+1];m[fi][fj+1]=0;b=1;}}}}break;case 2 :while(b){b=0;for(fi=0;fi<DT;++fi){for(fj=DT-1;fj>0;--fj){if(m[fi][fj]==0&&m[fi][fj-1]!=0){m[fi][fj]=m[fi][fj-1];m[fi][fj-1]=0;b=1;}}}}for(fi=0;fi<DT;++fi){for(fj=DT-1;fj>0;--fj){if(m[fi][fj]==m[fi][fj-1]&&m[fi][fj]!=0){m[fi][fj]*=2;m[fi][fj-1]=0;break;}}}b=1; while(b){b=0;for(fi=0;fi<DT;++fi){for(fj=DT-1;fj>0;--fj){if(m[fi][fj]==0&&m[fi][fj-1]!=0){m[fi][fj]=m[fi][fj-1];m[fi][fj-1]=0;b=1;}}}}break;case 3 :while(b){b=0;for(fj=0;fj<DT;++fj){for(fi=0;fi<DT-1;++fi){if(m[fi][fj]==0&&m[fi+1][fj]!=0){m[fi][fj]=m[fi+1][fj];m[fi+1][fj]=0;b=1;}}}}for(fj=0;fj<DT;++fj){for(fi=0;fi<DT-1;++fi){if(m[fi][fj]==m[fi+1][fj]&&m[fi][fj]!=0){m[fi][fj]*=2;m[fi+1][fj]=0;break;}}}b=1; while(b){b=0;for(fj=0;fj<DT;++fj){for(fi=0;fi<DT-1;++fi){if(m[fi][fj]==0&&m[fi+1][fj]!=0){m[fi][fj]=m[fi+1][fj];m[fi+1][fj]=0;b=1;}}}}break;case 4 :while(b){b=0;for(fj=0;fj<DT;++fj){for(fi=DT-1;fi>0;--fi){if(m[fi][fj]==0&&m[fi-1][fj]!=0){m[fi][fj]=m[fi-1][fj];m[fi-1][fj]=0;b=1;}}}}for(fj=0;fj<DT;++fj){for(fi=DT-1;fi>0;--fi){if(m[fi][fj]==m[fi-1][fj]&&m[fi][fj]!=0){m[fi][fj]*=2;m[fi-1][fj]=0;break;}}}b=1; while(b){b=0;for(fj=0;fj<DT;++fj){for(fi=DT-1;fi>0;--fi){if(m[fi][fj]==0&&m[fi-1][fj]!=0){m[fi][fj]=m[fi-1][fj];m[fi-1][fj]=0;b=1;}}}}break;default:break;}r_m_data();//将地图记录进dataint i,j;for(i=0;i<DT;++i){for(j=0;j<DT;++j){d_fankuai(i,j);//显示方块}}c_weizhi();//新方块位置生成d_fankuai(mx,my);//显示方块
}
/*#########################分隔线#########################*/
//t_siwang(),死亡检测
int t_siwang(){for(fi=0;fi<DT;++fi){for(fj=0;fj<DT;++fj){if(m[fi][fj]==0){return 0;}}}return 1;
}

小游戏1024纯C语言相关推荐

  1. flash编程可以用c语言,C语言写的小游戏和FLASH小游戏有何区别呢-c语言编程手机软件...

    C语言写的小游戏和FLASH小游戏有何区别呢-c语言编程手机软件 (2010-12-05 17:12:08) 标签: 杂谈 分类: 随笔 同题有大大的区分c语言写游戏可以直接挪用体系api举行编著,合 ...

  2. C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

    一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...

  3. c语言小游戏10例,C语言的应用 小游戏为例.doc

    C语言的应用 小游戏为例 贪吃蛇游戏设计 姓 名: 学 号: 班 级: 103511 指导老师: 张 印 2012年05月29日 <c语言程序设计>课程期末论文 PAGE I 目 录 TO ...

  4. c语言 字母小游戏,详细讲解C语言单机小游戏——打字母游戏

    要用C语言编写一个单机小游戏,首先得安装一个图形库.在这里我用的是EasyX 图形库,EasyX 是针对 C++ 的图形库,可以帮助 C++语言初学者快速上手图形和游戏编程. 比如,可以用 VC + ...

  5. c语言小游戏出拳,C语言--拳击小游戏

    原标题:C语言--拳击小游戏 #include //标准输入输出头文件 #include //通用工具库头文件 #include //时间头文件 int main() { //游戏规则:回合制(我方先 ...

  6. c语言小游戏 三子棋,C语言实现简单的三子棋小游戏

    学习完数组就能用C语言写出的简单小游戏: 编译器使用的为VS2013 代码分为三个部分 1.头文件 game.h 2.源文件 game.c 用来存放游戏中所有的函数 3.源文件 test.c 用来存放 ...

  7. C++复原2048小游戏(纯文字)

    2048可谓是一款十分经典的小游戏,在智能手机刚刚起步时风靡全球,所要求的算法也不是很难.我花了两天时间复刻了2048,在此和大家分享一下. 首先,游戏要有一个4×4的界面.因此我选择定义了一个Gam ...

  8. 4399曾经最火的黄金矿工小游戏,用Java语言2小时学会

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  9. 赛车小游戏c语言代码,网页赛车小游戏(纯JavaScript编写)

    赛车(改良版) 利用js实现以下功能: 在四个赛道随记生成路障,其移动速度随用户生存的时间增加而增加 用户可以通过方向键或者A.D键控制用户小车左右移动,躲避路障 当路障与用户小车碰撞,游戏结束 实时 ...

  10. c语言猜拳游戏实验报告,《猜拳小游戏》--一个c语言写的小项目

    很久以前写的一个小项目,有兴趣的可以进来看看. 这个小项目主要包含以下信息和功能: 1.玩家信息--->(结构体)包含名字,密码,赢的场数, 总的场数,胜利比率 2.创建玩家 3.销毁玩家 4. ...

最新文章

  1. 第十六周项目3:max带来的冲突
  2. leetcode:Plus One
  3. linux x window system下载,为Ubuntu 添加 KDE X WINDOW SYSTEM
  4. java 继承与派生4.6-4.7 2020.3.27
  5. VTK:网格之FillHoles
  6. jQuery使用(八):运动方法
  7. 线性代数拾遗(四):线性方程组的应用
  8. Cocoa编程中视图控制器与视图类详解
  9. 在JS中获取页面form中的一个TEXT元素的坐标值
  10. 在Winhex中搜索文本字符时注意
  11. Rational Rose—概述
  12. python tox
  13. 【leetcode】字符串(KMP、滑动窗口)
  14. Spherical Harmonic Lighting(球谐光照)
  15. 【Java校招你不知道的那些事儿】java内推是坑吗?纯忽悠,一点用没有?
  16. Stata面板:Granger-因果检验
  17. 「SymPy」符号运算(5) Vector向量及运算
  18. ios本地文件读取方法详解
  19. Avatar状态机设计
  20. Sqli-labs全通关教程(手工注入+工具使用sqlmap)

热门文章

  1. 路飞学城Python-Day23
  2. 2019年任正非给全体华为员工的信
  3. wps计算机里wps云盘图标,我的电脑中的wps网盘图标怎么设置删除
  4. wps启用编辑按钮在哪里_wps页面设置在哪里?wps页面设置使用教程
  5. SAS-配对设计资料秩和检验
  6. openflow通信流程总结
  7. (6.0系统)安卓神器XPOSED框架无需ROOT安装指南
  8. C++实现二阶行列式的计算
  9. 【采用】金融知识图谱技术与银行业应用研究
  10. 公众号平台服务号、订阅号、企业号区别