您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言代碼如何實現2048游戲,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
我是大一新生,在寒假的實訓課上老師讓我們用c語言分組編程一個小游戲,我們組選的是“2048”。由于我們組上有一個大神,于是我們把大部分的工作交給了大神做,但是實訓完成之后我感覺到碌碌無為,什么也沒學到,自己對于c語言的理解也僅僅局限于書本之上,想到那些大神們已經基本可以自己編程一些小游戲了,心里就非常著急。于是利用這個寒假,我自己獨立完成了“2048”小游戲的編程。
游戲代碼我是用Xcode編的,我是IOS小白,有些頭文件在Xcode中不能使用而我又找不到可以替代的,所以一些功能就不能實現比如清屏功能和儲存數據的功能還有音樂功能,不僅如此還存在數字對不齊的問題。希望可以有大神能夠指導我,萬分感激!
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<curses.h> /*頭文件*/ int i,j,a[4][4]={};/*二維數組a[4][4]全為0*/ void kaishi()/*生成開始界面*/ { printf("Welcome to 2048\n"); printf(" 1).新游戲\n"); printf(" 2).幫助\n"); } int defen(int a[][4])/*計分函數*/ { int max=a[0][0]; int static sum=0; for(i=0;i<4;i++) for(j=0;j<4;j++) if(a[i][j]>max) max=a[i][j]; sum+=max; return sum;/*以最大數的累加作為得分*/ } void jiemian(int a[][4]) { int b[2]={2,4},c[4]={0,1,2,3},sum,n,m; do { srand((int)time(NULL));/*以時間作為隨機數種子*/ m=c[rand()%4]; n=c[rand()%4]; /*隨機生成坐標*/ if(a[m][n]==0)/*判斷是否為空格*/ { a[m][n]=b[rand()%2];/*隨機生成2或4*/ break;/*跳出循環*/ } }while(1); printf("%d %d %d\n",m,n,a[m][n]); for(i=0;i<4;i++) { printf("-------------------------\n"); for(j=0;j<4;j++) { if((m==i)&&(n==j)) printf("| %d ",a[m][n]);/*輸出隨機生成的2或4*/ else { if(a[i][j]>0) printf("| %d ",a[i][j]);/*如果a[i][j]有數字,則輸出數字*/ else printf("| ");/*如果a[i][j]無數字則輸出空格*/ } } printf("|\n"); } printf("-------------------------\n"); printf(" 得分:%d\n",sum=defen(a)); } void hebingup(int a[][4])/*向上合并*/ { int m; for(j=0;j<4;j++) for(i=0;i<3;i++) if(a[i][j]>0)/*若a[i][j]不為0則進行判斷,否則直接跳到下一項*/ if(a[i][j]==a[i+1][j]&&a[i][j]!=0)/*判讀相鄰兩項是否相等*/ { a[i][j]=2*a[i][j];/*上面一項變成兩倍*/ if(i==2) a[i+1][j]=0; else for(m=i+1;m<3;m++) { a[m][j]=a[m+1][j]; a[m+1][j]=0; } /*將下面的數整體上移,再循環*/ } } void hebingdown(int a[][4])/*向下合并*/ { int m; for(j=0;j<4;j++) for(i=3;i>0;i--) if(a[i][j]>0) if(a[i][j]==a[i-1][j]) { a[i][j]=2*a[i][j]; if(i==1) a[i-1][j]=0; else for(m=i-1;m>0;m--) { a[m][j]=a[m-1][j]; a[m-1][j]=0; } } } void hebingleft(int a[][4])/*向左合并*/ { int m; for(i=0;i<4;i++) for(j=0;j<3;j++) if(a[i][j]>0) if(a[i][j]==a[i][j+1]) { a[i][j]=2*a[i][j]; if(j==2) a[i][j+1]=0; else for(m=j+1;m<3;m++) { a[i][m]=a[i][m+1]; a[i][m+1]=0; } } } void hebingright(int a[][4])/*向右合并*/ { int m; for(i=0;i<4;i++) for(j=3;j>0;j--) if(a[i][j]>0) if(a[i][j]==a[i][j-1]) { a[i][j]=2*a[i][j]; if(j==1) a[i][j-1]=0; else for(m=j-1;m>0;m--) { a[i][m]=a[i][m-1]; a[i][m-1]=0; } } } void yidong(char b) { int x,m; switch(b) { case 'w' : for(j=0;j<4;j++) for(i=1;i<=3;i++) for(x=i,m=i;x>0;x--,m--)/*x為循環次數,m替代i使循環繼續*/ { if(a[m-1][j]>0) break;/*若上一位非0,則跳到下一位*/ else { a[m-1][j]=a[m][j]; a[m][j]=0; } } hebingup(a); break; case 's' : for(j=0;j<4;j++) for(i=2;i>=0;i--) for(x=3-i,m=i;x>0;x--,m++) { if(a[m+1][j]>0) break; else { a[m+1][j]=a[m][j]; a[m][j]=0; } } hebingdown(a); break; case 'a' : for(i=0;i<4;i++) for(j=1;j<=3;j++) for(x=j,m=j;x>0;x--,m--) { if(a[i][m-1]>0) break; else { a[i][m-1]=a[i][m]; a[i][m]=0; } } hebingleft(a); break; case 'd' : for(i=0;i<4;i++) for(j=2;j>=0;j--) for(x=3-j,m=j;x>0;x--,m++) { if(a[i][m+1]>0) break; else { a[i][m+1]=a[i][m]; a[i][m]=0; } } hebingright(a); break; } } int main(int argc,char *argv[]) { int flag=1; char c,k; system("stty -icanon"); outloop:; kaishi(); k=getchar(); printf("\n"); if(k=='1') { while(flag==1) { jiemian(a); c=getchar(); printf("\n"); yidong(c); for(i=0;i<4;i++) for(j=0;j<4;j++) { if(a[i][j]==0) { flag=1; goto end;/*如果棋盤中存在一個空格,則跳出判斷,繼續生成隨機數*/ } else flag=0; } end:; } } if(k=='2') { do { printf("游戲規則:通過點擊<w>,<s>,<a>,<d>鍵來實現數字的上下左右的移動,使相同的數字相加,每個格子中的數的累加將作為得分,當格子填滿且無法移動時,游戲結束。\n"); printf(" 3).返回\n"); k=getchar(); }while(k!=3); goto outloop;/*跳到開始界面*/ } printf(" 游戲結束\n"); return 0; }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言代碼如何實現2048游戲”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。