当前位置:   article > 正文

小游戏1024纯C语言_写一个c语言1024游戏流程图

写一个c语言1024游戏流程图

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

1024.c

  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <time.h>
  4. #include "order_b_1.h"
  5. #include "help_fun_1.h"
  6. #include "order_fun_1.h"
  7. #include "order_fun_2.h"
  8. /*#########################分隔线#########################*/
  9. //head(),程序初始函数
  10. void head(){
  11. console();//控制窗口
  12. srand((unsigned)time(NULL ));// 设置随机种子
  13. f_all_bianliang();//全局变量初始化
  14. f_shuzhu_m();//m数组初始化
  15. f_data();//初始化data
  16. set_cursor(0);//隐藏光标
  17. f_beijing();//窗口背景初始化
  18. copyright();//版权说明
  19. d_jieshao();//游戏介绍
  20. printf("按任意键继续.....\n");
  21. command(2);
  22. command(1);
  23. d_ditu();//显示地图
  24. d_shuoming();//游戏操作说明
  25. }
  26. /*#########################分隔线#########################*/
  27. //body(),程序主体
  28. void body(){
  29. c_weizhi();//新方块位置生成
  30. d_fankuai(mx,my);//显示方块
  31. r_m_data();//将地图记录进data
  32. while(G){
  33. if(kbhit()){//判断是否有键按下
  34. switch(getch()){//获取用户按下的按键
  35. case 0xE0:switch(getch()){//分析按键
  36. case 72:t_yidong(1);break;
  37. case 80:t_yidong(2);break;
  38. case 75:t_yidong(3);break;
  39. case 77:t_yidong(4);break;
  40. default:break;
  41. }
  42. break;
  43. case 32:command(2);break;
  44. default:break;
  45. }
  46. }
  47. }
  48. }
  49. /*#########################分隔线#########################*/
  50. //food(),程序末尾
  51. void food(){
  52. set_color(0,15);
  53. command(1);
  54. printf("游戏结束!\n");
  55. printf("游戏得分:%d\n",F);
  56. printf("重新开始:1 结束:0\n");
  57. }
  58. /*#########################分隔线#########################*/
  59. //程序运行函数
  60. void run(){
  61. do{
  62. head();//程序初始函数
  63. body();//程序主体
  64. food();//程序末尾
  65. }
  66. while(input_int(0,1));
  67. }
  68. /*#########################分隔线#########################*/
  69. void main(){
  70. run();
  71. }

help_fun_1.h

  1. //基础函数头文件
  2. /*
  3. 0 = 黑色 8 = 灰色
  4. 1 = 蓝色 9 = 淡蓝色
  5. 2 = 绿色 10 = 淡绿色
  6. 3 = 浅绿色 11 = 淡浅绿色
  7. 4 = 红色 12 = 淡红色
  8. 5 = 紫色 13 = 淡紫色
  9. 6 = 黄色 14 = 淡黄色
  10. 7 = 白色 15 = 亮白色
  11. */
  12. //设置字符前景色和底色,ForeColor:字色,BackColor:背景色,基本颜色0-7,8-15是亮度加强的基本色
  13. void set_color(int ForeColor,int BackColor){
  14. HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
  15. SetConsoleTextAttribute(hConsole,BackColor*16+ForeColor) ;
  16. }
  17. //设置光标,flg=1:显示光标 flg=0:隐藏光标
  18. void set_cursor(int flg){
  19. HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
  20. CONSOLE_CURSOR_INFO cursor_info={100,flg};
  21. SetConsoleCursorInfo(hOut,&cursor_info);
  22. }
  23. //设置字符显示位置
  24. void set_cocate(int x,int y)
  25. {
  26. x*=2;//增加
  27. HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
  28. COORD loc={x,y};
  29. SetConsoleCursorPosition(hOut,loc);
  30. }
  31. //执行系统命令
  32. void command(int a){
  33. /*
  34. 1 = 清屏
  35. 2 = 暂停
  36. */
  37. switch(a){
  38. case 1:system("cls");break;
  39. case 2:system("pause>command.txt");break;
  40. default:break;
  41. }
  42. }
  43. //整形数据输入
  44. int input_int(int i,int j){
  45. int a=-100,k=0;
  46. printf("请输入 %d~%d 的数值,并按回车确定;\n",i,j);
  47. while(a>j||a<i){
  48. if(k!=0){
  49. printf("输入错误,请重新输入 %d~%d 的数值,并按回车确定;\n",i,j);
  50. }
  51. scanf("%d",&a);
  52. k++;
  53. }
  54. return a;
  55. }
  56. //版权说明
  57. void copyright(){
  58. set_cocate(0,0);
  59. set_color(12,15);
  60. printf("########################################\n");
  61. printf("#Created At:20170909 #\n");
  62. printf("#Algorithm Gossip:tetris #\n");
  63. printf("#Developer:wunanhui #\n");
  64. printf("#Referenced By:http://www.wunanhui.wang#\n");
  65. printf("########################################\n");
  66. }
  67. //控制窗口
  68. void console(){
  69. HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  70. CONSOLE_SCREEN_BUFFER_INFO bInfo;
  71. GetConsoleScreenBufferInfo(hOut, &bInfo );
  72. SetConsoleTitle("1024"); // 设置窗口的标题
  73. COORD size = {30, 30};//设置窗口大小
  74. SetConsoleScreenBufferSize(hOut,size);
  75. //SMALL_RECT rc = {0,0,63,31};
  76. //SetConsoleWindowInfo(hOut,true,&rc);
  77. }

order_b_1.h

  1. /*#########################分隔线#########################*/
  2. //常量定义区
  3. //#define MAX_X 8
  4. #define DT 4//地图大小
  5. /*#########################分隔线#########################*/
  6. //全局变量定义区
  7. int m[DT][DT];//地图数组
  8. int mx,my;//新方块坐标
  9. int fi,fj;//for循环专用变量
  10. int G;//游戏生命
  11. int F;//游戏得分
  12. /*#########################分隔线#########################*/
  13. //结构体定义区
  14. /*
  15. typedef struct node{
  16. int x;
  17. int y;
  18. struct node *next;
  19. }slink;
  20. */

order_fun_1.h

  1. /*
  2. 函数命名规则说明 动作_实体
  3. 1.初始化 = f_
  4. 2.显示 = d_
  5. 3.设置 = s_
  6. 4.运行 = t_
  7. 5.生产 = c_
  8. 6.记录 = r_
  9. */
  10. /*#########################分隔线#########################*/
  11. //f_all_bianliang(),全局变量初始化
  12. void f_all_bianliang(){
  13. fi=fj=mx=my=F=0;
  14. G=1;
  15. }
  16. /*#########################分隔线#########################*/
  17. //f_shuzhu(),m数组初始化
  18. void f_shuzhu_m(){
  19. for(fi=0;fi<DT;++fi){
  20. for(fj=0;fj<DT;++fj){
  21. m[fi][fj]=0;
  22. }
  23. }
  24. }
  25. /*#########################分隔线#########################*/
  26. //f_beijing(),窗口背景初始化
  27. void f_beijing(){
  28. int fanwei_x=80;
  29. int fanwei_y=25;
  30. set_color(0,15);
  31. for(fi=0;fi<fanwei_x;++fi){
  32. for(fj=0;fj<fanwei_y;++fj){
  33. set_cocate(fi,fj);
  34. printf(" ");
  35. }
  36. }
  37. }
  38. /*#########################分隔线#########################*/
  39. // r_m_data(),将地图记录进data
  40. void r_m_data(){
  41. if(1){
  42. FILE *fp;
  43. int i,j;
  44. fp=fopen("data.txt","a");
  45. for(fi=0;fi<DT;fi++){
  46. fprintf(fp,"|");
  47. for(fj=0;fj<DT;fj++){
  48. fprintf(fp,"%4d|",m[fi][fj]);
  49. }
  50. fprintf(fp,"\n");
  51. }
  52. fprintf(fp,"\n");
  53. fclose(fp);
  54. }
  55. }
  56. /*#########################分隔线#########################*/
  57. //f_data(),初始化data
  58. void f_data(){
  59. FILE *fp;
  60. fp=fopen("data.txt","w");
  61. fclose(fp);
  62. }
  63. /*#########################分隔线#########################*/
  64. //d_shuoming(),游戏操作说明
  65. void d_shuoming(){
  66. set_color(0,15);
  67. set_cocate(0,19);
  68. printf("↑:上移 ↓:下移 ←:左移 →:右移 空格:暂停");
  69. }
  70. /*#########################分隔线#########################*/
  71. //d_jieshao(),游戏介绍
  72. void d_jieshao(){
  73. set_color(0,15);
  74. printf("1024是一款简单有趣的休闲益智游戏,有点像是求合体。\n");
  75. printf("滑动屏幕,移动数字,相同的数就可以叠加翻倍,直到方框被数字填满,看你能得多少高分。\n");
  76. }

order_fun_2.h

  1. /*
  2. 函数命名规则说明 动作_实体
  3. 1.初始化 = f_
  4. 2.显示 = d_
  5. 3.设置 = s_
  6. 4.运行 = t_
  7. 5.生产 = c_
  8. 6.记录 = r_
  9. */
  10. /*#########################分隔线#########################*/
  11. //d_ditu(),显示地图
  12. void d_ditu(){
  13. int fanwei=18;
  14. set_color(15,0);
  15. for(fi=0;fi<fanwei;++fi){
  16. for(fj=0;fj<fanwei;++fj){
  17. if(fi==0||fj==0||fi==fanwei-1||fj==fanwei-1){
  18. set_cocate(fi,fj);
  19. printf(" ");
  20. }
  21. }
  22. }
  23. }
  24. /*#########################分隔线#########################*/
  25. //d_fengshu(),显示分数
  26. void d_fengshu(){
  27. set_color(12,15);
  28. set_cocate(0,18);
  29. printf("游戏得分:%d",F+=m[mx][my]);
  30. }
  31. /*#########################分隔线#########################*/
  32. //c_weizhi(),新方块位置生成
  33. void c_weizhi(){
  34. int max=0,kailv;
  35. if(t_siwang()){G=0;return;}
  36. mx=rand()%DT;
  37. my=rand()%DT;
  38. while(m[mx][my]){
  39. mx=rand()%DT;
  40. my=rand()%DT;
  41. }
  42. for(fi=0;fi<DT;++fi){
  43. for(fj=0;fj<DT-1;++fj){
  44. if(max<m[fi][fj]){
  45. max=m[fi][fj];
  46. }
  47. }
  48. }
  49. m[mx][my]=2;
  50. if(max>=4&&rand()%100==0){m[mx][my]=4;}
  51. if(max>=8&&rand()%200==0){m[mx][my]=8;}
  52. if(max>=16&&rand()%300==0){m[mx][my]=16;}
  53. if(max>=32&&rand()%400==0){m[mx][my]=32;}
  54. d_fengshu();//显示分数
  55. }
  56. /*#########################分隔线#########################*/
  57. //d_xinfankuai(),显示方块
  58. void d_fankuai(int x,int y){
  59. switch(m[x][y]){
  60. case 0 :set_color(15,15);break;
  61. case 2 :set_color(15,1);break;
  62. case 4 :set_color(15,2);break;
  63. case 8 :set_color(15,3);break;
  64. case 16 :set_color(15,4);break;
  65. case 32 :set_color(15,5);break;
  66. case 64 :set_color(15,6);break;
  67. case 128 :set_color(15,9);break;
  68. case 256 :set_color(15,10);break;
  69. case 512 :set_color(15,11);break;
  70. case 1024 :set_color(15,12);break;
  71. case 2048 :set_color(15,13);break;
  72. case 4096 :set_color(15,14);break;
  73. case 8192 :set_color(15,8);break;
  74. default:break;
  75. }
  76. for(fi=x*4+1;fi<x*4+5;++fi){
  77. for(fj=y*4+1;fj<y*4+5;++fj){
  78. set_cocate(fi,fj);
  79. printf(" ");
  80. }
  81. }
  82. set_cocate(x*4+1,y*4+2);
  83. switch(m[x][y]){
  84. case 2 :printf("%4d",m[x][y]);break;
  85. case 4 :printf("%4d",m[x][y]);break;
  86. case 8 :printf("%4d",m[x][y]);break;
  87. case 16 :printf("%4d",m[x][y]);break;
  88. case 32 :printf("%4d",m[x][y]);break;
  89. case 64 :printf("%4d",m[x][y]);break;
  90. case 128 :printf("%5d",m[x][y]);break;
  91. case 256 :printf("%5d",m[x][y]);break;
  92. case 512 :printf("%5d",m[x][y]);break;
  93. case 1024 :printf("%6d",m[x][y]);break;
  94. case 2048 :printf("%6d",m[x][y]);break;
  95. case 4096 :printf("%6d",m[x][y]);break;
  96. case 8192 :printf("%6d",m[x][y]);break;
  97. default:break;
  98. }
  99. }
  100. /*#########################分隔线#########################*/
  101. //t_yidong(),移动方块
  102. void t_yidong(int a){
  103. int b=1;
  104. switch(a){
  105. case 1 :
  106. while(b){
  107. b=0;
  108. for(fi=0;fi<DT;++fi){
  109. for(fj=0;fj<DT-1;++fj){
  110. if(m[fi][fj]==0&&m[fi][fj+1]!=0){
  111. m[fi][fj]=m[fi][fj+1];
  112. m[fi][fj+1]=0;
  113. b=1;
  114. }
  115. }
  116. }
  117. }
  118. for(fi=0;fi<DT;++fi){
  119. for(fj=0;fj<DT-1;++fj){
  120. if(m[fi][fj]==m[fi][fj+1]&&m[fi][fj]!=0){
  121. m[fi][fj]*=2;
  122. m[fi][fj+1]=0;
  123. break;
  124. }
  125. }
  126. }
  127. b=1;
  128. while(b){
  129. b=0;
  130. for(fi=0;fi<DT;++fi){
  131. for(fj=0;fj<DT-1;++fj){
  132. if(m[fi][fj]==0&&m[fi][fj+1]!=0){
  133. m[fi][fj]=m[fi][fj+1];
  134. m[fi][fj+1]=0;
  135. b=1;
  136. }
  137. }
  138. }
  139. }
  140. break;
  141. case 2 :
  142. while(b){
  143. b=0;
  144. for(fi=0;fi<DT;++fi){
  145. for(fj=DT-1;fj>0;--fj){
  146. if(m[fi][fj]==0&&m[fi][fj-1]!=0){
  147. m[fi][fj]=m[fi][fj-1];
  148. m[fi][fj-1]=0;
  149. b=1;
  150. }
  151. }
  152. }
  153. }
  154. for(fi=0;fi<DT;++fi){
  155. for(fj=DT-1;fj>0;--fj){
  156. if(m[fi][fj]==m[fi][fj-1]&&m[fi][fj]!=0){
  157. m[fi][fj]*=2;
  158. m[fi][fj-1]=0;
  159. break;
  160. }
  161. }
  162. }
  163. b=1;
  164. while(b){
  165. b=0;
  166. for(fi=0;fi<DT;++fi){
  167. for(fj=DT-1;fj>0;--fj){
  168. if(m[fi][fj]==0&&m[fi][fj-1]!=0){
  169. m[fi][fj]=m[fi][fj-1];
  170. m[fi][fj-1]=0;
  171. b=1;
  172. }
  173. }
  174. }
  175. }
  176. break;
  177. case 3 :
  178. while(b){
  179. b=0;
  180. for(fj=0;fj<DT;++fj){
  181. for(fi=0;fi<DT-1;++fi){
  182. if(m[fi][fj]==0&&m[fi+1][fj]!=0){
  183. m[fi][fj]=m[fi+1][fj];
  184. m[fi+1][fj]=0;
  185. b=1;
  186. }
  187. }
  188. }
  189. }
  190. for(fj=0;fj<DT;++fj){
  191. for(fi=0;fi<DT-1;++fi){
  192. if(m[fi][fj]==m[fi+1][fj]&&m[fi][fj]!=0){
  193. m[fi][fj]*=2;
  194. m[fi+1][fj]=0;
  195. break;
  196. }
  197. }
  198. }
  199. b=1;
  200. while(b){
  201. b=0;
  202. for(fj=0;fj<DT;++fj){
  203. for(fi=0;fi<DT-1;++fi){
  204. if(m[fi][fj]==0&&m[fi+1][fj]!=0){
  205. m[fi][fj]=m[fi+1][fj];
  206. m[fi+1][fj]=0;
  207. b=1;
  208. }
  209. }
  210. }
  211. }
  212. break;
  213. case 4 :
  214. while(b){
  215. b=0;
  216. for(fj=0;fj<DT;++fj){
  217. for(fi=DT-1;fi>0;--fi){
  218. if(m[fi][fj]==0&&m[fi-1][fj]!=0){
  219. m[fi][fj]=m[fi-1][fj];
  220. m[fi-1][fj]=0;
  221. b=1;
  222. }
  223. }
  224. }
  225. }
  226. for(fj=0;fj<DT;++fj){
  227. for(fi=DT-1;fi>0;--fi){
  228. if(m[fi][fj]==m[fi-1][fj]&&m[fi][fj]!=0){
  229. m[fi][fj]*=2;
  230. m[fi-1][fj]=0;
  231. break;
  232. }
  233. }
  234. }
  235. b=1;
  236. while(b){
  237. b=0;
  238. for(fj=0;fj<DT;++fj){
  239. for(fi=DT-1;fi>0;--fi){
  240. if(m[fi][fj]==0&&m[fi-1][fj]!=0){
  241. m[fi][fj]=m[fi-1][fj];
  242. m[fi-1][fj]=0;
  243. b=1;
  244. }
  245. }
  246. }
  247. }
  248. break;
  249. default:break;
  250. }
  251. r_m_data();//将地图记录进data
  252. int i,j;
  253. for(i=0;i<DT;++i){
  254. for(j=0;j<DT;++j){
  255. d_fankuai(i,j);//显示方块
  256. }
  257. }
  258. c_weizhi();//新方块位置生成
  259. d_fankuai(mx,my);//显示方块
  260. }
  261. /*#########################分隔线#########################*/
  262. //t_siwang(),死亡检测
  263. int t_siwang(){
  264. for(fi=0;fi<DT;++fi){
  265. for(fj=0;fj<DT;++fj){
  266. if(m[fi][fj]==0){
  267. return 0;
  268. }
  269. }
  270. }
  271. return 1;
  272. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/559426
推荐阅读
相关标签
  

闽ICP备14008679号