C语言-2048游戏

// 二维数组
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


	int test(int (*a)[4]){
	int i,j,b;
	int t=0;
	for(i=0;i<4;i++){
		for(j=0;j<4;j++){
			if(a[i][j]==0){
				t=1;
			}
			if(a[i][j]==2048){
				b=1;
			}
		}
	}
	if(b==1){
		printf("you are winer");
	}
	if(t==0){
		printf("game over");
	}
}

// 声明一个 局部变量 如果没有初始化 局部变量的值不确定
// 所以数组a里面的元素 也是不确定的值

// 数组的初始化 
int main(void){
	
	
	int a[4][4] = {0};
	int i = 0, j = 0;
	int c=0;
	
	int score=0;
//在此位置补充代码 使得数组某个随机的位置 赋值为2

	int s = time(0);


	srand(s); // 将 s 作为 rand 函数的种子值 
	int x;
	int	y;
	x= rand() % 4 ;
	y = rand() % 4 ;;
	a[x][y]=2;
	

	while(1){
		do{
		x = rand() % 4 ;
		y = rand() % 4 ;
	}while(a[x][y]!=0); 
	a[x][y] = 2;
	
	
		
	// 第二次产生随机位置 有可能该位置里面有之 
	//如果有则重新输入一个心得位置,直到该位置的是空白 

// 将二维数组中的元素打印出来
printf("+----+----+----+----+\n");

printf("|      2048游戏     |\n");


	for (i = 0; i < 4; i++) {
		printf("+----+----+----+----+");
		printf("\n");
		for (j = 0; j < 4; j++) {

			if (a[i][j] == 0) {
				printf("|    ");
			}
			else {
				

				printf( "|%4d", a[i][j]);
			}
			

		}
		printf("|  ");
		printf("\n");

	}
	
	printf("+----+----+----+----+\n");
	
	printf("|     w    %4d      |\n",score);
	
	printf("|a<   +    >d        |\n");

	printf("|     s              |\n");
	
	printf("+----+----+----+----+\n");
	
	char cmd=0;
	
	// 清输入缓存区,请回车键
	
	scanf("%*[^\n]"); //清\n 之前的所有内容
	scanf("%*c");    //清\n 字符 
	
	
	
	printf("请输入移动的方向:");
	
	
	scanf("%c",&cmd);
	
	
	switch(cmd){
		case 'w':
			for(j=3;j>0;j--){
			
				for(i=0;i<4;i++){
				
				if(a[j-1][i]==0){
					a[j-1][i]=a[j][i];  //移动 
					a[j][i]=0;
				}
				else{
					if(a[j-1][i]==a[j][i]){ //合并 
					a[j-1][i]+=a[j][i];
					a[j][i]=0;
					//计分
					 score+=a[j-1][i];
				}
				
				}
			}
		}
		
		
			printf("up\n");
			break;
		case 'a':
			
			for(i=3;i>0;i--){
			
				for(j=0;j<4;j++){
				
				if(a[j][i-1]==0){
					a[j][i-1]=a[j][i];  //移动 
					a[j][i]=0;
				}
				else{
					if(a[j][i-1]==a[j][i]){ //合并 
					a[j][i-1]+=a[j][i];
					a[j][i]=0;
					
					score+=a[j][i-1];
				}
				
				}
			}
		}
			
			printf("left\n");
			break;
		case 'd':
			
			for(i=3;i>0;i--){
			
				for(j=0;j<4;j++){
				
				if(a[j][i+1]==0){
					a[j][i+1]=a[j][i];  //移动 
					a[j][i]=0;
				}
				else{
					if(a[j][i+1]==a[j][i]){ //合并 
					a[j][i+1]+=a[j][i];
					a[j][i]=0;
					
					score+=a[j][i+1];
				}
				
				}
			}
		}
			
			
			printf("ringt\n");
			break;
		case 's':
			
				for(j=3;j>0;j--){
			
				for(i=0;i<4;i++){
				
				if(a[j+1][i]==0){
					a[j+1][i]=a[j][i];  //移动 
					a[j][i]=0;
				}
				else{
					if(a[j+1][i]==a[j][i]){ //合并 
					a[j+1][i]+=a[j][i];
					a[j][i]=0;
					score+=a[j+1][i];
				}
				
				}
			}
		}
			
			printf("down\n");
			break;	
		default:
			printf("命令字符输入错误\n");
	} 
	test(a);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值