/* |
1.0 |
*/ |
#include<stdio.h> |
#include<stdlib.h> |
#include<time.h> |
#include<stdbool.h> |
int i,j; |
int arr[7][9]={0}; |
int grade=0; |
//地图输出 |
int map(){ |
for (i=1;i<=5;i+=2){ |
for (j=1;j<=7;j+=2) |
arr[i][j]=5; |
} |
for (i=0;i<=6;i++){ |
for (j=0;j<=8;j+=2) |
arr[i][j]=7; |
} |
for (i=1;i<=5;i+=2){ |
for (j=2;j<=6;j+=2) |
arr[i][j]=9; |
} |
printf ( "*********************\n" ); |
printf ( "*****Grade:%5d*****\n" ,grade); |
printf ( "*********************\n" ); |
for (i=0;i<=6;i++){ |
for (j=0;j<=8;j++){ |
if (arr[i][j]==7) |
printf ( "|" ); |
else if (arr[i][j]==5) |
printf ( " -- " ); |
else if (arr[i][j]==9) |
printf ( "+" ); |
else if (arr[i][j]==0) |
printf ( " " ); |
else |
printf ( "%4d" ,arr[i][j]); |
} |
printf ( "\n" ); |
} |
printf ( "*********************\n" ); |
|
} |
int move(){ |
char direction; |
int n=1,m=0; |
printf ( "请输入方向:w为上,s为下,a为左,d为右\n" ); |
scanf ( "%c" ,&direction); |
scanf ( "%*c" ); |
switch (direction){ |
case 'w' :{ |
/* |
移动 |
*/ |
//每一列的移动 |
for (j=1;j<=7;j+=2){ |
if (arr[0][j]==0){ |
n=0; |
for (i=0;i<=6;i+=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[2][j]==0){ |
n=2; |
for (i=2;i<=6;i+=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[4][j]==0){ |
n=4; |
for (i=4;i<=6;i+=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
} |
//相加相邻的数 |
for (j=1;j<=7;j+=2){ |
for (i=0;i<=6;i+=2){ |
if (arr[i][j]==arr[i+2][j] && arr[i][j]!=0){ |
arr[i][j]=2*arr[i][j]; |
arr[i+2][j]=0; |
} |
} |
} |
//每一列的移动 |
for (j=1;j<=7;j+=2){ |
if (arr[0][j]==0){ |
n=0; |
for (i=0;i<=6;i+=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[2][j]==0){ |
n=2; |
for (i=2;i<=6;i+=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[4][j]==0){ |
n=4; |
for (i=4;i<=6;i+=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
} |
//最后一行随机分配一个数 |
if (arr[6][1]!=0 && arr[6][3]!=0 && arr[6][5]!=0 && arr[6][7]!=0){ |
break ; |
} |
else { |
for (;;){ |
m=( rand ()%4)*2+1; |
if (arr[6][m]==0){ |
arr[6][m]=( rand ()%2+1)*2; |
break ; |
} |
} |
} |
//结束'w' |
break ; |
} |
|
case 's' :{ |
//移动 |
//每一列的移动 |
for (j=1;j<=7;j+=2){ |
if (arr[6][j]==0){ |
n=6; |
for (i=6;i>=0;i-=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[4][j]==0){ |
n=4; |
for (i=4;i>=0;i-=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[2][j]==0){ |
n=2; |
for (i=2;i>=0;i-=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
} |
//相加相邻的数 |
for (j=1;j<=7;j+=2){ |
for (i=0;i<=6;i+=2){ |
if (arr[i][j]==arr[i+2][j] && arr[i][j]!=0){ |
arr[i][j]=2*arr[i][j]; |
arr[i+2][j]=0; |
} |
} |
} |
//每一列的移动 |
for (j=1;j<=7;j+=2){ |
if (arr[6][j]==0){ |
n=6; |
for (i=6;i>=0;i-=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[4][j]==0){ |
n=4; |
for (i=4;i>=0;i-=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[2][j]==0){ |
n=2; |
for (i=2;i>=0;i-=2){ |
if (arr[i][j]!=0){ |
arr[n][j]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
} |
//最后一行随机分配一个数 |
if (arr[0][1]!=0 && arr[0][3]!=0 && arr[0][5]!=0 && arr[0][7]!=0){ |
break ; |
} |
else { |
for (;;){ |
m=( rand ()%4)*2+1; |
if (arr[0][m]==0){ |
arr[0][m]=( rand ()%2+1)*2; |
break ; |
} |
} |
} |
//结束's' |
break ; |
} |
|
case 'a' :{ |
//移动 |
//每一行的移动 |
for (i=0;i<=6;i+=2){ |
if (arr[i][1]==0){ |
n=1; |
for (j=1;j<=7;j+=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[i][3]==0){ |
n=3; |
for (j=3;j<=7;j+=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[i][5]==0){ |
n=5; |
for (j=5;j<=7;j+=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
} |
//相加相邻的数 |
for (i=0;i<=6;i+=2){ |
for (j=1;j<=7;j+=2){ |
if (arr[i][j]==arr[i][j+2] && arr[i][j]!=0){ |
arr[i][j]=2*arr[i][j]; |
arr[i][j+2]=0; |
} |
} |
} |
//每一行的移动 |
for (i=0;i<=6;i+=2){ |
if (arr[i][1]==0){ |
n=1; |
for (j=1;j<=7;j+=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[i][3]==0){ |
n=3; |
for (j=3;j<=7;j+=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
else if (arr[i][5]==0){ |
n=5; |
for (j=5;j<=7;j+=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n+=2; |
} |
} |
continue ; |
} |
} |
//最后一行随机分配一个数 |
if (arr[0][7]!=0 && arr[2][7]!=0 && arr[4][7]!=0 && arr[6][7]!=0){ |
break ; |
} |
else { |
for (;;){ |
m=( rand ()%4)*2; |
if (arr[m][7]==0){ |
arr[m][7]=( rand ()%2+1)*2; |
break ; |
} |
} |
} |
//结束'a' |
break ; |
} |
|
case 'd' :{ |
//移动 |
//每一行的移动 |
for (i=0;i<=6;i+=2){ |
if (arr[i][7]==0){ |
n=7; |
for (j=7;j>=1;j-=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[i][5]==0){ |
n=5; |
for (j=5;j>=1;j-=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[i][3]==0){ |
n=3; |
for (j=3;j>=1;j-=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
} |
//相加相邻的数 |
for (i=0;i<=6;i+=2){ |
for (j=1;j<=7;j+=2){ |
if (arr[i][j]==arr[i][j+2] && arr[i][j]!=0){ |
arr[i][j]=2*arr[i][j]; |
arr[i][j+2]=0; |
} |
} |
} |
//每一行的移动 |
for (i=0;i<=6;i+=2){ |
if (arr[i][7]==0){ |
n=7; |
for (j=7;j>=1;j-=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[i][5]==0){ |
n=5; |
for (j=5;j>=1;j-=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
else if (arr[i][3]==0){ |
n=3; |
for (j=3;j>=1;j-=2){ |
if (arr[i][j]!=0){ |
arr[i][n]=arr[i][j]; |
arr[i][j]=0; |
n-=2; |
} |
} |
continue ; |
} |
} |
//最后一行随机分配一个数 |
if (arr[0][1]!=0 && arr[2][1]!=0 && arr[4][1]!=0 && arr[6][1]!=0){ |
break ; |
} |
else { |
for (;;){ |
m=( rand ()%4)*2; |
if (arr[m][1]==0){ |
arr[m][1]=( rand ()%2+1)*2; |
break ; |
} |
} |
} |
//结束'd' |
break ; |
} |
default : |
printf ( "输入不正确请重新输入\n" ); |
} |
} |
int mark(){ |
grade=0; |
for (i=0;i<=6;i+=2){ |
for (j=1;j<=7;j+=2){ |
grade=grade+arr[i][j]; |
} |
} |
} |
bool over(){ |
int num=0; |
for (j=1;j<=7;j+=2){ |
for (i=2;i<=6;i+=2){ |
if (arr[i][j]!=arr[i-2][j]&&arr[i][j]!=0){ |
num++; |
} |
} |
} |
for (j=1;j<=7;j+=2){ |
for (i=0;i<=4;i+=2){ |
if (arr[i][j]!=arr[i+2][j]&&arr[i][j]!=0){ |
num++; |
} |
} |
} |
for (i=0;i<=6;i+=2){ |
for (j=1;j<=5;j+=2){ |
if (arr[i][j]!=arr[i][j+2]&&arr[i][j]!=0){ |
num++; |
} |
} |
} |
for (i=0;i<=6;i+=2){ |
for (j=3;j<=7;j+=2){ |
if (arr[i][j]!=arr[j-2][j]&&arr[i][j]!=0){ |
num++; |
} |
} |
} |
if (num==48){ |
return true ; |
} |
else if (num<48){ |
return false ; |
} |
} |
int file( int new_grade){ |
int old_grade=0; |
FILE *fp= fopen ( "grade.bin" , "wb+" ); |
if (fp){ |
fread (&old_grade, sizeof ( int ),1,fp); |
} |
} |
int main(){ |
srand ( time (0)); |
//随机赋值 |
for (i=1;i<=4;i++){ |
arr[( rand ()%4)*2][( rand ()%4)*2+1]=( rand ()%2+1)*2; |
} |
map(); |
while (1){ |
move(); |
mark(); |
system ( "clear" ); |
map(); |
if (over()){ |
printf ( "******Game Over******\n" ); |
printf ( "*********************\n" ); |
break ; |
} |
} |
printf ( "**你的分数是:%5d***\n" ,grade); |
printf ( "*********************\n" ); |
return 0; |
|
} |
初级程序员
by: same 发表于:2016-04-19 14:25:19 顶(0) | 踩(1) 回复
不知道怎么玩
回复评论