C語言——2048_第1頁
C語言——2048_第2頁
C語言——2048_第3頁
C語言——2048_第4頁
C語言——2048_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、作品簡介:本程序一共500行左右,實(shí)現(xiàn)的功能是用按鍵代表方向?qū)崿F(xiàn)2048游戲,本游戲可以設(shè)置峰值(是1024、2048、4096或9999?全都由你設(shè)置)、可以設(shè)置棋盤大?。?x4不爽?8X8歡迎你),此外還可以設(shè)置按鍵和閃滅時(shí)間。代碼為本人早年所寫,很抱歉不能對代碼一一注釋,寫的時(shí)候沒怎么注釋,現(xiàn)在也不想加,抱歉。目前我在寫一本C語言入門至半步進(jìn)階的書,低至初中生都能看懂,高至大學(xué)畢業(yè)仍可一學(xué),講了很多C語言相關(guān)但一般書籍都不會(huì)講的東西。出版時(shí)間應(yīng)該會(huì)在2019年之前,有興趣可以關(guān)注我的微博:天狼嘯幽月(不知道以后會(huì)不會(huì)改),想找書的話可以搜我的名字(朱勁松)。/* 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.設(shè)置按鍵"); GotoXY(7,5); printf("t4.設(shè)置峰值"); GotoXY(8,5); printf("t5.設(shè)置棋盤大小"); GotoXY(9,5); printf("t6.設(shè)置星星閃滅時(shí)間"); 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】點(diǎn)擊即可開始1024游戲n"); printf(" 【3】點(diǎn)擊即可設(shè)置按鍵,按順序分別設(shè)置方向左、下、右n (只可字母鍵或數(shù)字鍵),默認(rèn)為1,2,3n"); printf(" 【4】設(shè)置峰值,即游戲?yàn)?024,2048,還是512等等n"); printf(" 【5】點(diǎn)擊即可

7、設(shè)置游戲棋盤規(guī)格(2-8),默認(rèn)4 x 4n"); printf(" 【6】當(dāng)達(dá)到峰值時(shí)該數(shù)會(huì)消失,消失時(shí)該處會(huì)閃爍一顆星星,設(shè)置該時(shí)間,毫秒為單位n"); printf(" 【0】在游戲說明設(shè)置界面,按0隨時(shí)返回主菜單,n 在游戲進(jìn)行時(shí)只可點(diǎn)“x”退出n"); printf(" 【游戲規(guī)則如下】n"); printf(" ta.通過“左,下,右”的方式移動(dòng)所有數(shù)字n"); printf(" tb.相同的數(shù)字在某操作下會(huì)重疊相加n"); printf(" tc.當(dāng)有數(shù)字達(dá)到1

8、024時(shí),該數(shù)字會(huì)消失n"); printf(" td.當(dāng)最上一層填滿或按下“*”時(shí)游戲結(jié)束n"); printf(" tf.界面中所有的數(shù)字包括消失的數(shù)的總和即為分?jǐn)?shù)n"); if(getch() continue; /*- | 按鍵設(shè)置 | -*/ else if(ch='3') system("cls"); GotoXY(1,2); printf("僅支持字母和數(shù)字,設(shè)置成功會(huì)有提示"); for(i=0;i<4;i+) GotoXY(i+2,2); if(i=0) print

9、f("請?jiān)O(shè)置左鍵:"); for(f=getch();!('0'<=f&&f<='9'|'a'<=f&&f<='z'|'A'<=f&&f<='Z');f=getch(); a=f; printf("%c (設(shè)置成功)",a); if(i=1) printf("請?jiān)O(shè)置下鍵:"); for(f=getch();!('0'<=f&&a

10、mp;f<='9'|'a'<=f&&f<='z'|'A'<=f&&f<='Z');f=getch(); b=f; printf("%c (設(shè)置成功)",b); if(i=2) printf("請?jiān)O(shè)置右鍵:"); for(f=getch();!('0'<=f&&f<='9'|'a'<=f&&f<='z

11、9;|'A'<=f&&f<='Z');f=getch(); c=f; printf("%c (設(shè)置成功)",c); if(i=3) printf("請?jiān)O(shè)置上鍵:"); for(f=getch();!('0'<=f&&f<='9'|'a'<=f&&f<='z'|'A'<=f&&f<='Z');f=getch(); d=f

12、; printf("%c (設(shè)置成功)",d); if(getch() continue; /*- | 峰值設(shè)定 | -*/ else if(ch='4') system("cls"); GotoXY(1,2); printf("峰值設(shè)置范圍為2-9999,設(shè)置成功會(huì)有提示"); GotoXY(2,2); printf("設(shè)置為:"); 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("(設(shè)置成功)"); if(getch() continue; /*- | 棋盤設(shè)置 | -*/ else if(ch='5') system("cls"); GotoXY(1,2); printf("設(shè)置棋盤按鍵,僅2-8(包含),設(shè)置成功會(huì)有提示"); GotoXY(2,2); printf("請?jiān)O(shè)置棋盤的高:"); for(

14、f=getch();!('2'<=f&&f<='8');f=getch(); Y=f-'0' printf("%dt(設(shè)置成功)",Y); GotoXY(3,2); printf("請?jiān)O(shè)置棋盤的寬:"); for(f=getch();!('2'<=f&&f<='8');f=getch(); X=f-'0' printf("%dt(設(shè)置成功)",X); if(getch() contin

15、ue; /*- | 星星時(shí)間設(shè)置 | -*/ else if(ch='6') system("cls"); GotoXY(1,2); printf("時(shí)間單位為毫秒,設(shè)置范圍為10-5000,設(shè)置成功會(huì)有提示"); GotoXY(2,2); printf("設(shè)置為:"); 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("(設(shè)置成功)"); 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;/*-| 表格區(qū) |-*/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("分?jǐn)?shù):");/*-| 內(nèi)容區(qū) |-*/ 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論