C语言界面实现2048小游戏

这是我在大一第二学期(两年前)为了参加比赛,自学后写的一个Demo,拿出来和大家分享一下,代码为两年前的代码,未改动,优化以及各式可能很一般,请见谅。


#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define N 4//方阵边长 
#define WIN 2048//游戏获胜目标 
void output(int (*a)[N]){//输出4*4表格, 
	int i,j;
		printf("\n");
		printf("┏━━━━┳━━━━┳━━━━┳━━━━┓");//顶边框 
		printf("\n");
	for(i=0;i0;j--){           //第一步,先将一排数据重后往前一个个向前推(除去前面和中间的0) 
 					if(a[i][j-1]==0) {        //为确保移动完全经推理最多3次完成所有移动所有执行3次该算法 
					a[i][j-1]=a[i][j];        //第二步,将相邻两两相同的数相加赋值前者后者赋0 
 					a[i][j]=0;                // 第三部,重复第一步操作去除新产生的0,总操作完成 
 					}                         //PS:所有方向算法原理相同 
 	     		}
 	     		}
		 		for(j=0;j0;j--){
 					if(a[i][j-1]==0) {
					a[i][j-1]=a[i][j];
 					a[i][j]=0;
 					}
 	     		}
 	     		}
		 	}	 
		 }
		 else{//向大坐标移动 
		 	for(i=0;i0;j--){
 					if(a[i][j]==a[i][j-1]) {
						a[i][j]=a[i][j]+a[i][j-1];
						a[i][j-1]=0;
					}
				}
		 		for(k=0;k<3;k++){
		 		for(j=0;j0;j--){
 					if(a[j-1][i]==0) {
					a[j-1][i]=a[j][i];
 					a[j][i]=0;
 					}
 	     		}
 	     		}
				for(j=0;j0;j--){
 					if(a[j-1][i]==0) {
					a[j-1][i]=a[j][i];
 					a[j][i]=0;
 					}
 	     		}
 	     		}	
			}
		 }
		 else{//向大坐标移动 
		 	for(i=0;i0;j--){
 					if(a[j][i]==a[j-1][i]) {
						a[j][i]=a[j][i]+a[j-1][i];
						a[j-1][i]=0;
					}
				}
		 		for(k=0;k<3;k++){
		 		for(j=0;j

原说明文档:

作品名:小游戏2048

使用语言:C语言

使用编译器:DEV-C++

游戏说明:《2048》是一款比较流行的数字游戏,最早于2014年3月20日发行。原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台。这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方乱数出现一个数字方块(2或4),相同数字的方块在靠拢、相撞时会相加。不断的叠加最终拼凑出2048

程序设计思路:

   在程序编写之前我只知道游戏的规则和对游戏把玩的经验。后来对游戏原理进行思考,大体的得到了程序编写的方向。

首先我需要一个4*4的表格来填放数字,可用二维数组来表达,用一个4*4的二维数组,初值设定为0。

开始在4*4的表格中随机出现两个2或4的随机数,为保证游戏难度正常出现2的概率应大于出现4的概率(P2:P4=7:1),然后键入一次方向键后进行相应移动、合并。完成移动后在表格中空白位置出现一个2或4的随机数。

游戏胜负判定:若数字“2048”出现则为获胜并输出“YOU WIM!”,若数字填满方格且每个数字无相邻相等(即不可移动)则为失败并输出“GAME OVER!”

核心算法(移动合并):第一步,先将需要操作的一行数据的非零数字向需移动方向靠齐(去0)。第二步,将相邻相等数字相加,靠近需移动的一个赋二者的和另一个赋0,若有连续三个数字相等,操作前两个。若前两个后两个均可合并,可同时操作。第三步,重复第一步操作,去除第二步新产生的0。

算法细节详见源文件代码及注释。

程序完成截图

C语言界面实现2048小游戏_第1张图片C语言界面实现2048小游戏_第2张图片C语言界面实现2048小游戏_第3张图片C语言界面实现2048小游戏_第4张图片

你可能感兴趣的:(算法练习)