您的位置:首页 > 编程语言 > C语言/C++

c语言编写的2048游戏代码,大家可以参考一下这些

2016-08-03 18:48 1001 查看
2048_launcher.c
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void main()
{
printf("正在启动中,请稍后!\n");
Sleep(1000);
system("bin\\Version\\games\\0.1\\0.1.exe");
}
补充:0.1.c
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define WIN 256 // 可以修改决定游戏输赢的值
// 矩阵数组
int num[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int t[5]={0,0,0,0,0}; // 辅助数组
int move=0;   // 记录移动步数
int score=0;  // 记录得分情况
int max=0;  // max表示游戏输赢,max=WIN时赢
int change=1;
// 产生一个随机位置和随机数
void Srand()
{
int i,j;
do// 产生一个随机位置,如果产生的位置有数据,就继续随机生成一个新位置
{
i=((unsigned)rand())%4;
j=((unsigned)rand())%4;
}while(num[i][j]!=0);
if(((unsigned)rand())%4==0)
{   // 产生一个随机数,如果该数对4取余=0,则填充为4
num[i][j]=4;
}
else
{
num[i][j]=2;
}
move++;
}
void Print()
{
int j,i;
system("CLS");
printf("*~~~~~~~~2048~~~~~~~*\n");
printf("*author:  亚威      *\n");
printf("*得分: %d  步数: %d  \n",score,move);
printf("*~~~~~~~~~~~~~~~~~~~*\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(num[i][j]==0)
printf("*    ");
else
printf("*%4d",num[i][j]);
}
printf("*\n*~~~~~~~~~~~~~~~~~~~*\n");
}
}
// 消除t数组中前面和中间出现的0
void fun()
{
int i,j;
for(i=0;i<=3;i++)
{
if(t[i]==0)
{
for(j=i+1;j<=3;j++)
{
if(t[j]!=0)
{
change=1;
break;
}
}
t[i]=t[j];
t[j]=0;
}
if(j>=3)
break;
}
}
// 合并操作
void hebing()
{
int i;
for(i=0;i<=2;i++)
{
if((t[i]!=0)&&(t[i]==t[i+1]))
{
t[i]*=2;
score+=t[i];
change=1;
t[i+1]=0;
}
if(max<t[i])
max=t[i];
}
}
// 合并相邻且相等的两个数
void add()
{
fun();  // 消除前面的和中间的0
hebing();  // 合并相邻且相等的两个数
fun();  // 再次消0
}
int main()
{
int i,j;
int gameover=1;
// 产生一个随机位置
srand((unsigned)time(NULL));
max=0;
while(gameover&&(max<WIN))
{

if(change)
{
Srand();  // 产生一个随机位置和随机数
}

change=0;
Print();  // 显示界面
char in=getch();  // 读取操作命令
switch(in)
{
case 'w':
case 'W':
for(i=0;i<=3;i++)
{  // 依次处理第1至第4列
for(j=0;j<=3;j++)
{   // 把第i列的数据依次赋给辅助数组t
t[j]=num[j][i];
}
add();  // 核心:合并相邻且相等的两个数
for(j=0;j<=3;j++)
{   // 把处理后的数据依次放到矩阵对应位置
num[j][i]=t[j];
}
}

break;
case 's':
case 'S':
for(i=0;i<=3;i++)
{  // 依次处理第1至第4列
for(j=0;j<=3;j++)
{   // 把第i列的数据依次赋给辅助数组t
t[3-j]=num[j][i];
}
add();  // 核心:合并相邻且相等的两个数
for(j=0;j<=3;j++)
{   // 把处理后的数据依次放到矩阵对应位置
num[j][i]=t[3-j];
}
}
break;
case 'a':
case 'A':
for(i=0;i<=3;i++)
{  // 依次处理第1至第4列
for(j=0;j<=3;j++)
{   // 把第i列的数据依次赋给辅助数组t
t[j]=num[i][j];
}
add();  // 核心:合并相邻且相等的两个数
for(j=0;j<=3;j++)
{   // 把处理后的数据依次放到矩阵对应位置
num[i][j]=t[j];
}
}
break;
case 'd':
case 'D':
for(i=0;i<=3;i++)
{  // 依次处理第1至第4列
for(j=0;j<=3;j++)
{   // 把第i列的数据依次赋给辅助数组t
t[3-j]=num[i][j];
}
add();  // 核心:合并相邻且相等的两个数
for(j=0;j<=3;j++)
{   // 把处理后的数据依次放到矩阵对应位置
num[i][j]=t[3-j];
}
}
break;
}
gameover=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(num[i][j]==0)
gameover=1;
}
}
if((gameover==0)&&(change==0))
break;
}
Print();
if(max>=WIN)
{
printf("你赢了!\n");
printf("你很牛啊!!!\n");
}
else
{
printf("游戏结束!\n");
printf("努力啊!!!\n");
}
getch();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐