附带保存最高分的功能
目录
创作思路
- 首先用一个4*4的数组来充当主体
- 核心算法就是 通过键值让数组上下左右移动,并且让相同数发生变化
- 最后判断终止条件
代码实现
- 算法完成接着就是实现方块移动的效果
- 在此我使用了Windows库函数里的color()函数来区分不同的数值
- 我没有用clear()函数,因为clear()函数每动一次会让屏幕闪烁
- 使用了gotoxy()来重新打印到屏幕
增加趣味性
- 增加了道具功能
- 按1键使用随机交换功能
- 按2键使用翻倍功能
- 按3键使用保留最高分,消除其他,但分数不会改变
- 破纪录功能,破纪录可以保留自己的名字和分数
有兴趣的同学可以复制过去玩一下,多多评论,看看你们的最高分
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"conio.h"
#include"windows.h"
#define N 4
#define key_A 97
#define key_D 100
#define key_S 115
#define key_W 119
int key;
int a[N][N]={0};
int props[4]={5,5,5};
int block_x,block_y;
int score=0;
void ini()
{
for(int i=0;i<2;i++)
{
block_x=rand()%4;block_y=rand()%4;
if(a[block_x][block_y]==0)a[block_x][block_y]=(rand()%2+1)*2;
else i--;
}
}
void tiktok(const char *a,int speed)
{
while(*a){printf("%c",*a);a++;Sleep(speed);}
}
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
int color(int c) //颜色函数声明
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
return 0;
}
void print()
{
int i,j,k;
gotoxy(0,0);
for(i=0,k=0;i<N*2;gotoxy(0,(i+2)),i+=2,k++){
for(j=0;j<N;j++){color(7);printf("|----|");}gotoxy(0,(i+1));
for(j=0;j<N;j++){color(7);printf("|");
color(a[k][j]%255);printf("%-4d",a[k][j]);color(7);printf("|");}
}
for(k=0;k<N;k++)printf("|----|");
gotoxy(6*N+1,0);printf("奇妙道具(按两次生效)");
gotoxy(6*N+1,1);printf("(1)随机交换: