#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>//用来调用getch函数
char Change(char C)//输出第一个页面
{
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("@@@@@@@@@ 请输入数字切换页面 @@@@@@\n");
printf("@@@@@@@@@ 输入1开始2048小游戏 @@@@@@\n");
printf("@@@@@@@@@ 输入2开始贪吃蛇小游戏 @@@@@@\n");
printf("@@@@@@@@@ 输入3开始俄罗斯方块 @@@@@@\n");
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
return 0;
}
void Page(int a[4][4],int count){//输出表格
for(int i=0;i<4;i++){
printf(" ----");
}
printf("\n");
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(j==0){
printf("|");
}if(a[i][j]==0){
printf(" |");
}else{
printf("%3d |",a[i][j]);
}
}
printf("\n");
for(int k=0;k<4;k++){
printf(" ----");
}
printf("\n");
}
printf("请使用wsad分别表示上下左右\n");
printf("当前得分为:%d\n",count);
return;
}
int Star(int a[4][4]){//输出随机数
srand((unsigned)time(NULL));
int x,y,N;
x=rand()%4;
y=rand()%4;
N=rand()%4;
if(N==0){
N+=4;
}else if(N%2!=0){
N++;
}
a[x][y]=N;
return 0;
}
void Fresh(int a[4][4]){//在数组中不为零的随机部分继续输出随机数2或者4
srand((unsigned)time(NULL));
int x,y,N;
x=rand()%4;
y=rand()%4;//在数组中取一个随机位置
N=rand()%4;
if(N==0){
N+=4;
}else if(N%2!=0){
N++;
}
while(a[x][y]!=0){//如果取得的随机位置上的数不为零,就继续取随机位置
x=rand()%4;
y=rand()%4;
}
a[x][y]=N;
return;
}
int Over(int a[4][4]){//如果还有位子为零则游戏继续,或者相近位子有相同的数则继续游戏,否则游戏结束
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]==2048){
return 0;
}
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]==0){
return 1;
}
}
}
return 0;//能够走到这一步就说明没有相邻的数相等,返回零,表示游戏结束
}
void run(int a[4][4]){//移动合并
char ch;
ch=getch();//getch函数自动读取无需按回车,且不显示在屏幕上
switch(ch){
case 'w'://上
case 'W':
for(int l=0;l<4;l++){
for(int h=3;h>0;h--){
if(a[h][l]!=0){
if(a[h][l]==a[h-1][l]){//相同的数合并
a[h-1][l]=2*a[h][l];
a[h][l]=0;
}else if(a[h-1][l]==0){//为了应付0808这类数
a[h-1][l]=a[h][l];
a[h][l]=0;
}
}
}
}
for(int l=0;l<4;l++){//移动
for(int h=3;h>0;h--){
if(a[h][l]!=0){
if(a[h-1][l]==0){
a[h-1][l]=a[h][l];
a[h][l]=0;
}if(h<3&&a[h][l]==0){
a[h][l]=a[h+1][l];
a[h+1][l]=0;
}
}
}
}
break;
case 's'://下
case 'S':
//先合并再移动更方便
//合并
for(int l=0;l<4;l++){
for(int h=0;h<3;h++){
if(a[h][l]!=0){
if(a[h][l]==a[h+1][l]){
a[h+1][l]=2*a[h][l];
a[h][l]=0;
}else if(a[h+1][l]==0){
a[h+1][l]=a[h][l];
a[h][l]=0;
}
}
}
}
for(int l=0;l<4;l++){
for(int h=0;h<3;h++){
if(a[h][l]!=0){
if(a[h+1][l]==0){
a[h+1][l]=a[h][l];
a[h][l]=0;
}if(h>0&&a[h][l]==0){
a[h][l]=a[h-1][l];
a[h-1][l]=0;
}
}
}
}
break;
case 'a'://左
case 'A':
for(int h=0;h<4;h++){
for(int l=3;l>0;l--){
if(a[h][l]!=0){
if(a[h][l-1]==a[h][l]){
a[h][l-1]=2*a[h][l-1];
a[h][l]=0;
}else if(a[h][l-1]==0){
a[h][l-1]=a[h][l];
a[h][l]=0;
}
}
}
}
for(int h=0;h<4;h++){
for(int l=3;l>0;l--){
if(a[h][l]!=0){
if(a[h][l-1]==0){
a[h][l-1]=a[h][l];
a[h][l]=0;
}if(l<3&&a[h][l]==0){
a[h][l]=a[h][l+1];
a[h][l+1]=0;
}
}
}
}
break;
case 'd'://右
case 'D':
for(int h=0;h<4;h++){
for(int l=0;l<3;l++){
if(a[h][l]!=0){
if(a[h][l+1]==a[h][l]){
a[h][l+1]=2*a[h][l+1];
a[h][l]=0;
}else if(a[h][l+1]==0){
a[h][l+1]=a[h][l];
a[h][l]=0;
}
}
}
}
for(int h=0;h<4;h++){
for(int l=0;l<3;l++){
if(a[h][l]!=0){
if(a[h][l+1]==0){
a[h][l+1]=a[h][l];
a[h][l]=0;
}if(l>0&&a[h][l]==0){
a[h][l+1]=a[h][l];
a[h][l]=0;
}
}
}
}
break;
default:
break;
}
}
int main()
{
int a[4][4]={0};
int count=0;
char C;
char c=Change(C);
printf("%c",c);
int i=0;
scanf("%d",&i);
system("cls");
switch(i)
{
case 1:
Star(a);//输出随机数
Page(a,count);//打印
run(a);//移动
count++;//计分加一
system("cls");//清空
Fresh(a);//输出新的随机数
Page(a,count);//打印
Sleep(50);
while(1){//循环
if(Over(a)==1){//判断是否结束游戏
run(a);//移动
Fresh(a);//输出新的随机数
count++;//计分加一
system("cls");//清空
Page(a,count);//打印
Sleep(5);
}else{
system("cls");//清空
printf("游戏结束,最终得分为:%d\n",count);
break;
}
}
break;
case 2:
printf("哈哈骗你的,我不会写贪吃蛇^-^");
break;
case 3:
printf("hh~没想到把我只会写2048@-@~~");
break;
}
return 0;
}
C语言2048小游戏 为什么总是运行着就突然掉数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
0条回答 默认 最新
悬赏问题
- ¥30 模拟电路 logisim
- ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价