C语言——2048_第1页
C语言——2048_第2页
C语言——2048_第3页
C语言——2048_第4页
C语言——2048_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作品简介:本程序一共500行左右,实现的功能是用按键代表方向实现2048游戏,本游戏可以设置峰值(是1024、2048、4096或9999?全都由你设置)、可以设置棋盘大小(4x4不爽?8X8欢迎你),此外还可以设置按键和闪灭时间。代码为本人早年所写,很抱歉不能对代码一一注释,写的时候没怎么注释,现在也不想加,抱歉。目前我在写一本C语言入门至半步进阶的书,低至初中生都能看懂,高至大学毕业仍可一学,讲了很多C语言相关但一般书籍都不会讲的东西。出版时间应该会在2019年之前,有兴趣可以关注我的微博:天狼啸幽月(不知道以后会不会改),想找书的话可以搜我的名字(朱劲松)。/* Note:Your ch

2、oice is C IDE */#include "stdio.h"#include "windows.h"#include "stdlib.h"#include "time.h"#include "conio.h"#define N 4 / 间距#define Y0 2 /前空#define X0 4#define bei 13 /初始界面宽度#define bej 40int Gamenum=1024;int startime=300;int Y=4;int X=4;char a='

3、1'/左char b='2'/下char c='3'/右char d='5'char f;int Ga=0;int score=0;/*-| 定位 | -*/void GotoXY(short y,short x)HANDLE app=GetStdHandle(STD_OUTPUT_HANDLE);COORD t;t.Y=y;t.X=x*2;SetConsoleCursorPosition(app,t);void begin()int i,j;char ch=0;while(1) system("cls"); prin

4、tf("nnt"); /(1,3) for(i=0;i<bei;i+) for(j=0;j<bej;j+) if(i=0|j=0|i=bei-1|j=bej-1) printf("*"); else printf(" "); printf("nt"); GotoXY(3,5); printf("tt【1 0 2 4】"); GotoXY(4,5); printf("t1.开始游戏"); GotoXY(5,5); printf("t2.游戏说明"

5、); GotoXY(6,5); printf("t3.设置按键"); GotoXY(7,5); printf("t4.设置峰值"); GotoXY(8,5); printf("t5.设置棋盘大小"); GotoXY(9,5); printf("t6.设置星星闪灭时间"); GotoXY(10,5); printf("t0.回到主菜单"); GotoXY(12,5); printf("t请选择:"); ch=getch(); if(ch='1') system(

6、"cls"); break; /*- | 游戏说明 | -*/ else if(ch='2') system("cls"); printf("nn"); printf(" 【1】点击即可开始1024游戏n"); printf(" 【3】点击即可设置按键,按顺序分别设置方向左、下、右n (只可字母键或数字键),默认为1,2,3n"); printf(" 【4】设置峰值,即游戏为1024,2048,还是512等等n"); printf(" 【5】点击即可

7、设置游戏棋盘规格(2-8),默认4 x 4n"); printf(" 【6】当达到峰值时该数会消失,消失时该处会闪烁一颗星星,设置该时间,毫秒为单位n"); printf(" 【0】在游戏说明设置界面,按0随时返回主菜单,n 在游戏进行时只可点“x”退出n"); printf(" 【游戏规则如下】n"); printf(" ta.通过“左,下,右”的方式移动所有数字n"); printf(" tb.相同的数字在某操作下会重叠相加n"); printf(" tc.当有数字达到1

8、024时,该数字会消失n"); printf(" td.当最上一层填满或按下“*”时游戏结束n"); printf(" tf.界面中所有的数字包括消失的数的总和即为分数n"); if(getch() continue; /*- | 按键设置 | -*/ else if(ch='3') system("cls"); GotoXY(1,2); printf("仅支持字母和数字,设置成功会有提示"); for(i=0;i<4;i+) GotoXY(i+2,2); if(i=0) print

9、f("请设置左键:"); for(f=getch();!('0'<=f&&f<='9'|'a'<=f&&f<='z'|'A'<=f&&f<='Z');f=getch(); a=f; printf("%c (设置成功)",a); if(i=1) printf("请设置下键:"); for(f=getch();!('0'<=f&&a

10、mp;f<='9'|'a'<=f&&f<='z'|'A'<=f&&f<='Z');f=getch(); b=f; printf("%c (设置成功)",b); if(i=2) printf("请设置右键:"); for(f=getch();!('0'<=f&&f<='9'|'a'<=f&&f<='z

11、9;|'A'<=f&&f<='Z');f=getch(); c=f; printf("%c (设置成功)",c); if(i=3) printf("请设置上键:"); for(f=getch();!('0'<=f&&f<='9'|'a'<=f&&f<='z'|'A'<=f&&f<='Z');f=getch(); d=f

12、; printf("%c (设置成功)",d); if(getch() continue; /*- | 峰值设定 | -*/ else if(ch='4') system("cls"); GotoXY(1,2); printf("峰值设置范围为2-9999,设置成功会有提示"); GotoXY(2,2); printf("设置为:"); for(scanf("%d",&Ga);Ga<2|Ga>9999;scanf("%d",&Ga)

13、 GotoXY(2,6); printf("btttt"); GotoXY(2,6); Gamenum=Ga; GotoXY(2,9); printf("(设置成功)"); if(getch() continue; /*- | 棋盘设置 | -*/ else if(ch='5') system("cls"); GotoXY(1,2); printf("设置棋盘按键,仅2-8(包含),设置成功会有提示"); GotoXY(2,2); printf("请设置棋盘的高:"); for(

14、f=getch();!('2'<=f&&f<='8');f=getch(); Y=f-'0' printf("%dt(设置成功)",Y); GotoXY(3,2); printf("请设置棋盘的宽:"); for(f=getch();!('2'<=f&&f<='8');f=getch(); X=f-'0' printf("%dt(设置成功)",X); if(getch() contin

15、ue; /*- | 星星时间设置 | -*/ else if(ch='6') system("cls"); GotoXY(1,2); printf("时间单位为毫秒,设置范围为10-5000,设置成功会有提示"); GotoXY(2,2); printf("设置为:"); for(scanf("%d",&Ga);Ga<10|Ga>5000;scanf("%d",&Ga) GotoXY(2,6); printf("btttt"); G

16、otoXY(2,6); startime=Ga; GotoXY(2,9); printf("(设置成功)"); if(getch() continue; else if(ch='0') system("cls"); continue; else system("cls"); continue; int ing(void)int ch,i=0,j=0,k=0,temp,geti=0,getj=0,getrand=0,yes=0,ok=1,time0;/*-| 表格区 |-*/GotoXY(Y0-1,X0);for(j=0

17、;j<X;j+) for(k=0;k<N*2;k+) printf("_");printf("_");for(i=0;i<Y;i+)for(k=0;k<2;k+)for(j=0;j<X;j+) GotoXY(Y0+i*3+k,X0+j*N); printf("|"); GotoXY(Y0+i*3+k,X0+X*N); printf("|"); for(j=0;j<X;j+) GotoXY(Y0+i*3+2,X0+j*N); printf("|"); for(k

18、=0;k<N*2;k+) printf("_"); GotoXY(Y0+i*3+2,X0+X*N); printf("|");GotoXY(0,0);printf("分数:");/*-| 内容区 |-*/ int youxiYX; for(i=0;i<Y;i+) for(j=0;j<X;j+) youxiij=0; do srand(clock(); getrand=rand()%(Y*Y); /概率算法,p1:p2:p3=1:3:5 for(i=1;i<Y+1;i+) if(getrand<i*i) g

19、eti=Y-i; getj=rand()%X; break; while(youxigetigetj!=0); getrand=rand()%5; if(getrand<3) youxigetigetj=2; else youxigetigetj=4; GotoXY(Y0+geti*3+1,X0+getj*N+1); printf("%3d",youxigetigetj); score+=youxigetigetj; GotoXY(0,3); printf("%-6d",score); while(ch=getch()!='*')

20、/*- | 左 | -*/ if(ch=a) for(i=0;i<Y;i+) for(j=0;j<X;j+) if(youxiij!=0) for(k=j+1;k<X &&youxiik=0;k+); if(k<X && youxiij=youxiik) youxiij*=2; youxiik=0; for(j=0;j<X;j+) if(youxiij=0) for(k=j;k<X;k+) if(youxiik!=0) youxiij=youxiik; youxiik=0; break; /*- | 下 | -*/ else

21、if(ch=b) for(j=0;j<X;j+) for(i=Y-1;i>=0;i-) if(youxiij!=0) for(k=i-1;k>=0 &&youxikj=0 ;k-); if(k>=0 && youxiij=youxikj) youxiij*=2; youxikj=0; for(i=Y-1;i>0;i-) if(youxiij=0) for(k=i;k>=0;k-) if(youxikj!=0) youxiij=youxikj; youxikj=0; break; /*- | 右 | -*/ else if(ch

22、=c) for(i=Y-1;i>=0;i-) for(j=X-1;j>=0;j-) if(youxiij!=0) for(k=j-1;k>=0 &&youxiik=0 ;k-); if(k>=0 && youxiij=youxiik) youxiij*=2; youxiik=0; for(j=X-1;j>=0;j-) if(youxiij=0) for(k=j;k>=0;k-) if(youxiik!=0) youxiij=youxiik; youxiik=0; break; /*- | 上 | -*/ else if(ch=

23、d) for(j=0;j<X;j+) for(i=0;i<Y;i+) if(youxiij!=0) for(k=i+1;k<Y &&youxikj=0 ;k+); if(k<Y && youxiij=youxikj) youxiij*=2; youxikj=0; for(i=0;i<Y;i+) if(youxiij=0) for(k=i;k<Y;k+) if(youxikj!=0) youxiij=youxikj; youxikj=0; break; else ok=0; if(ok) /*- | 的检测| -*/ for(i

24、=Y-1;i>=0;i-) for(j=X-1;j>=0;j-) if(youxiij>=Gamenum) youxiij=0; GotoXY(Y0+i*3+1,X0+j*N+1); printf(" "); time0=clock(); while(clock()-time0<startime); GotoXY(Y0+i*N,X0+j*N+1); printf(" "); do srand(clock(); getrand=rand()%(Y*Y); /概率算法,p1:p2:p3=1:3:5 for(i=1;i<Y+1;i+) if(getrand<i*i) geti=Y-i; getj=rand

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论