c/c++分享下自己做的2048
直接上代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
int g_score=0; //玩家分数
int g_arr={0};//4*4数组
//向上移动
int move_up();
//向下移动
int move_down();
//向左移动
int move_left();
//向右移动
int move_right();
//在空位随机产生2或4
void add_vacancy_rand();
//随机两个不同位置产生2或4
void add_two_rand();
//打印数组
void printf_arr();
//移动
int move_up()
{
int flag=0;
int i=1;
int k=0;
for (int j=0; j<4; j++)
{
for (i=1,k=0; i<4; i++)
{
//判断i是否为零
if(g_arr>0)
{
//如果k为零
if(g_arr==0)
{
flag=1;
//移动数组
g_arr=g_arr;
g_arr=0;
}
//如果k与i相等
else if(g_arr==g_arr)
{
flag=1;
//两数相等
g_arr=g_arr*2;
g_score+=g_arr;
g_arr=0;
k++;
}
//如果k与i不等
else
{
g_arr[++k]=g_arr;
if (i != k)
{
flag=1;
//移动数组
g_arr = 0;
}
}
}
}
}
return flag;
}
//向下移动
int move_down()
{
int flag = 0;
int i=2;
int k=3;
for (int j=0; j<4; j++)
{
for (i=2,k=3; i>=0; i--)
{
//判断i是否为零
if(g_arr>0)
{
//如果k为零
if(g_arr==0)
{
flag = 1;
g_arr=g_arr;
g_arr=0;
}
//如果k与i相等
else if(g_arr==g_arr)
{
flag =1;
g_arr=g_arr*2;
g_score+=g_arr;
g_arr=0;
k--;
}
//如果k与i不等
else
{
g_arr[--k]=g_arr;
if (i != k)
{
flag=1;
g_arr = 0;
}
}
}
}
}
return flag;
}
//向左移动
int move_left()
{
int flag=0;
int j=1;
int k=0;
for (int i=0; i<4; i++)
{
for (j=1,k=0; j<4; j++)
{
//判断i是否为零
if(g_arr>0)
{
//如果k为零
if(g_arr==0)
{
flag=1;
g_arr=g_arr;
g_arr=0;
}
//如果k与i相等
else if(g_arr==g_arr)
{
flag=1;
g_arr=g_arr*2;
g_score+=g_arr;
g_arr=0;
k++;
}
//如果k与i不等
else
{
g_arr[++k]=g_arr;
if (j != k)
{
flag=1;
g_arr = 0;
}
}
}
}
}
return flag;
}
//向右移动
int move_right()
{
int flag=0;
int j=2;
int k=3;
for (int i=0; i<4; i++)
{
for (j=2,k=3; j>=0; j--)
{
//判断i是否为零
if(g_arr>0)
{
//如果k为零
if(g_arr==0)
{
flag =1;
g_arr=g_arr;
g_arr=0;
}
//如果k与i相等
else if(g_arr==g_arr)
{
flag =1;
g_arr=g_arr*2;
g_score+=g_arr;
g_arr=0;
k--;
}
//如果k与i不等
else
{
g_arr[--k]=g_arr;
if (j != k)
{
flag=1;
g_arr = 0;
}
}
}
}
}
return flag;
}
//在空位随机产生2或4
void add_vacancy_rand()
{
int row,col;
while(1)
{
row=rand()%4;
col=rand()%4;
if(g_arr==0)
{
g_arr=rand()%3 ? 2 : 4;
break;
}
}
}
//随机两个不同位置产生2或4
void add_two_rand()
{
int row=-1,col=-1;
for (int i=0; i<2;)
{
int x=rand()%4,y=rand()%4;
if(x==row && y==col)
break;
row=x;
col=y;
g_arr=rand()%3 ? 2 : 4;
i++;
}
}
//打印数组
void printf_arr()
{
system("cls"); //刷新界面
for (int i=1; i<=9; i++)
{
printf("|");
for (int j=0; j<4; j++)
{
if(i%2==0)
{
if(g_arr==0)
{
printf(" \t|");
}
else
{
printf("%4d\t|",g_arr);
}
}
else
{
printf("-------|");
}
}
printf("\n");
}
printf("score:%d\n",g_score);
}
//结束判断
int isGameOver(){
int arr={0};
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
arr=g_arr;
}
}
int score = g_score;
if( move_up() || move_down() || move_left() || move_right()){
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
g_arr=arr;
}
}
g_score=score;
return 0;
}else {
printf("游戏结束...\n");
return 1;
}
}
int main()
{
srand((unsigned int)time(NULL));
add_two_rand();
printf_arr();
int c;//定义一个char型变量存储按下按键的值
int flag=0;
while(1)
{
flag =0;
c = getch();
if(c==72)
{
flag = move_up();
}
else if(c==80)
{
flag = move_down();
}
else if(c==75)
{
flag = move_left();
}
else if(c==77)
{
flag = move_right();
}
if(flag)
{
printf_arr(); //打印界面
for (int i =0; i<50000000; i++) {
flag=0;
}
add_vacancy_rand(); //产生随机数
printf_arr(); //打印界面
//判断游戏是否结束
if (isGameOver()){
printf("按任意键重开...");
getchar();
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
g_arr=0;
}
}
g_score=0;
add_two_rand();
printf_arr();
}
}
}
return 0;
}
运行结果:
还有很多改进的地方,希望大家来指出!!!
我知道了 这一定是课程设计{:301_1001:} 真是不错,学习一下 支持继续加油 {:1_921:} 不错,支持一下{:301_1001:} 加油!你是最棒的! 学习借鉴一下,谢谢分享 编译了一下,貌似67个错误。不好解决啊 支持一下,谢谢分享!! 我怎么没看懂这么多if else 到底在干吗
页:
[1]
2