程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 2048小游戲4X4C語言,2048小游戲4x4c

2048小游戲4X4C語言,2048小游戲4x4c

編輯:關於C語言

2048小游戲4X4C語言,2048小游戲4x4c


 不好意思,不知道怎樣添加附件,原本想將寫的源代碼(.c)文件上傳的。

找了半天沒有找到,只能將源程序寫到一個文件中,粘貼到這裡。

有感興趣的朋友們,可以拷貝下面的代碼運行一下,格式需要自己調整。

也可以訪問百度雲盤http://pan.baidu.com/s/1hsa675M下載源文件。

/*2048*/

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>

void print(void);/*顯示游戲界面*/
int add(void);/*對中間變量數組進行處理*/

int code[4][4] =
{
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
};/*游戲中的16個格子*/
int temp[5];/*中間變量*/
int move = 0;/*移動次數*/
int score = 0;/*分數*/

 

int main(void)
{
int gameover = 0;/*判斷游戲是否結束,1結束,0繼續*/
int i,j;
int change = 1;/*判斷格子中的數是否改變,0不變*/
char input;
srand((unsigned)time(NULL));/*設置隨機數的起點*/
while(gameover == 0)
{
if(change >= 1)/*僅當數發生改變時添加新數*/
{
do
{
i=((unsigned)rand()) % 4;
j=((unsigned)rand()) % 4;
}while(code[i][j] != 0);
if(((unsigned)rand()) % 4 == 0)
{
code[i][j]=4;
}
else
{
code[i][j]=2;/*隨機選一個空格填上2或4*/
}
move++;/*增加次數*/
}
print();/*顯示*/
input = getch();/*輸入方向*/
change = 0;
switch(input)
{
case '0':/*退出*/
printf("Are you sure to exit?(y/n)");
input=getchar();
if(input=='y'||input=='Y')
exit(0);
break;

case 'W':

case 'w':/*上*/
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
temp[i]=code[i][j];/*把一列數移到中間變量*/
}
temp[4]=0;
change += add();
for(i=0;i<=3;i++)
{
code[i][j]=temp[i];/*把處理好的中間變量移回來*/
}
}
break;

case 'A':

case 'a':/*左*/
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
temp[j]=code[i][j];/*把一行數移到中間變量*/
}
temp[4]=0;
change += add();
for(j=0;j<=3;j++)
{
code[i][j]=temp[j];/*把處理好的中間變量移回來*/
}
}
break;

case 'S':

case 's':/*下*/
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
temp[i]=code[3-i][j];/*把一列數移到中間變量*/
}
temp[4]=0;
change += add();
for(i=0;i<=3;i++)
{
code[3-i][j]=temp[i];/*把處理好的中間變量移回來*/
}
}
break;

case 'D':

case 'd':/*右*/
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
temp[j]=code[i][3-j];/*把一行數移到中間變量*/
}
temp[4]=0;
change += add();
for(j=0;j<=3;j++)
{
code[i][3-j]=temp[j];/*把處理好的中間變量移回來*/
}
}
break;
}
gameover=1;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(code[i][j]==0)
gameover=0;/*所有格子都填滿則游戲結束*/
}
printf("Game over!\n");
getch();

return 0;
}

void print(void)/*顯示游戲界面*/
{
int i,j;
system("CLS");/*清屏*/
printf("2048\n");
printf("W--UP A--LEFT S--DOWN D--RIGHT 0--EXIT\n");
printf("Score:%d Move:%d\n",score,move);
printf("Made by lanshanxiao\n");
printf("|-----------------------|\n");/*顯示橫向分隔線*/
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(code[i][j]==0)
{
printf("| ");/*0顯示空格*/
}
else
{
printf("|%5d",code[i][j]);/*顯示數字和分隔線*/
}
}
printf("|\n|-----------------------|\n");/*顯示橫向分隔線*/
}
}

int add(void)/*對中間變量數組進行處理*/
{
int i;
int t=0;
int change=0;/*判斷數組是否有改變,0不變,1變化*/
do
{
for(i=0;i<=3;i++)
{
if(temp[i]==0)
{
if(temp[i]!=temp[i+1])
change=1;/*當一個0後面不是0時數組改變*/
temp[i]=temp[i+1];
temp[i+1]=0;
}
}/*去掉中間的0*/
t++;
}while(t<=3);/*重復多次*/
for(i=1;i<=3;i++)
{
if(temp[i]==temp[i-1])
{
if(temp[i]!=0)
{
change=1;/*當兩個非零相同的數相加時數組改變*/
score=score+temp[i];/*加分*/
}
temp[i-1]=temp[i-1]*2;
temp[i]=0;
}
}/*把兩個相鄰的相同的數加起來*/

return change;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved