寻瓒吧 关注:19贴子:968
  • 4回复贴,共1

【寻瓒珷者】 别人编的小游戏我修改了一下发上来给大家看看

只看楼主收藏回复

#include<stdio.h>
#include<time.h>
#include <conio.h>
#include<stdlib.h>
#define Difficulty 25/* 难度,越大越难 */
#define H 20// 高度
#define W 12// 宽度
#define Up 'w'// 改变形状
#define Down 's'// 快速下落
#define Lift 'a'// 左移
#define Right 'd'// 右移
int p[H][W], i, type, w, di, t,score,hi,wi;
char history_score[5];
bool test;
void init();// 初始化变量
void math();// 产生随机数
void getscan();// 获取输入
void Draw();// 画图
void move();// 消行移动
void Detection();// 消行,结束检测
void renew();// 重新产生块
void Judge();// 下移检测
void found(int m);// 创建数组
int testfound();// 检测碰撞
void re();// 更新最高记录
const short
da[19][4]={{4,3,2,1},{4,2,3,0},{4,1,4,3},{4,4,1,2},{4,2,2,4},{4,2,3,6},{4,3,2,5},{4,2,3,8},{4,3,2,9},{4,2,3,10},{4,3,2,7},{4,3,2,12},{4,2,3,13},{4,3,2,14},{4,2,3,11},{4,3,2,16},{4,2,3,17},{4,3,2,18},{4,2,3,15}},
co[19][4][2]={{{0,0},{1,0},{1,1},{2,1}},{{0,1},{0,2},{1,0},{1,1}},{{0,0},{0,1},{0,2},{0,3}},{{0,0},{1,0},{2,0},{3,0}},{{0,0},{0,1},{1,0},{1,1}},{{0,0},{0,1},{1,1},{1,2}},{{0,1},{1,0},{1,1},{2,0}},{{0,1},{1,0},{1,1},{1,2}},{{0,0},{1,0},{1,1},{2,0}},{{0,0},{0,1},{0,2},{1,1}},{{0,1},{1,0},{1,1},{2,1}},{{0,0},{0,1},{1,1},{2,1}},{{0,2},{1,0},{1,1},{1,2}},{{0,0},{1,0},{2,0},{2,1}},{{0,0},{0,1},{0,2},{1,0}},{{0,0},{0,1},{1,0},{2,0}},{{0,0},{0,1},{0,2},{1,2}},{{0,1},{1,1},{2,0},{2,1}},{{0,0},{1,0},{1,1},{1,2}}};
int main()
{
int k = 0;
init();
while (1)
{
getscan();// 输入
if (k == 100000 / di || test == true||i==0)
{
found(type+1);// 创建块的数组坐
Draw();// 打印
found(0);// 去除尾巴
Judge();// 检查是否要创建新块
if (k == 100000 / di || t == Down||i==0)
{
i++;
k = 0;
}
test = false;
}
k++;
usleep(10);
}
return 0;
}
void re()
{
FILE *f;
char g[5];
sprintf(g, "%d", score);// 将int转化为char
f = fopen("/sdcard/俄罗斯方块_ljs.txt", "w");
fputs(g, f);
fclose(f);
}
void init()
{
FILE *f;
test = 0;
for (int j = 0; j <= H; j++)
for (int k = 0; k <= W; k++)
p[j][k] = 0;
score = 0;
i = 0;
di = Difficulty;
w = W / 2;
math();
if ((f = fopen("/sdcard/俄罗斯方块_ljs.txt", "r")) != NULL)
{
fgets(history_score, 5, f);
}
else
{
f = fopen("/sdcard/俄罗斯方块_ljs.txt", "w");
}
fclose(f);
}
void math()
{
int ty;
srand((int)time(NULL));
ty = rand() % 7;
switch (ty)
{
case 0:
type=rand()%2;
break;
case 1:
type=rand()%2+2;
break;
case 2:
type=4;
break;
case 3:
type=rand()%2+5;
break;
case 4:
type=rand()%4+7;
break;
case 5:
type=rand()%4+11;
break;
case 6:
type=rand()%4+15;
break;
}
}
void getscan()// 读取输入
{
while (kbhit())
{
t = getch();
if (t == Up || t == Right || t == Down || t == Lift)
{
if (t == Lift && w != 0)
if (w != 0)
{
w--;
if (testfound() != 0)w++;
}
if (t == Right)
if (w < W - wi)
{
w++;
if (testfound() != 0) w--;
}
if (t == Up)
{
int be=type;
type=da[be][3];
if (da[type][2]>da[be][2]&&w>W-da[type][2])w-=da[type][2]-da[be][2];
if (testfound()!=0)type=be;
}
if (t == Down)
di *= 10;
test = true;
}
else
break;
}
}
void Draw()
{
printf("\033[0;0H");
for (int j = 3; j < H; j++)
{
printf("\33[?25l┊");
for (int k = 0; k < W; k++)
{
if (p[j][k] == 0)
printf(" ");
else
{
if (p[j][k]==1||p[j][k]==2)
printf("\033[47;37m口\033[0m");
if (p[j][k]==3||p[j][k]==4)
printf("\033[42;32m口\033[0m");
if (p[j][k]==5)
printf("\033[43;33m口\033[0m");
if (p[j][k]==6||p[j][k]==7)
printf("\033[44;34m口\033[0m");
if (p[j][k]>=8&&p[j][k]<=11)
printf("\033[45;35m口\033[0m");
if (p[j][k]>=12&&p[j][k]<=15)
printf("\033[46;36m口\033[0m");
if (p[j][k]>=16&&p[j][k]<=19)
printf("\033[41;31m口\033[0m");
}
}
printf("┊\n");
}
printf("\n当前的分数为:%d", score);
if (score>(atoi(history_score)))
printf("\033[;31m刷新记录!!\033[0m");
printf("\n历史最高:%d\n", atoi(history_score));
}
void move(int s)// 消行函数
{
for (int j = s; j > 0; j--)
for (int k = 0; k < W; k++)
p[j][k] = p[j - 1][k];
Draw();
}
void Detection()
{
int q, j = i;
while (j < i + 4)
{
q=0;
for (int k=0;k<W;k++)
{
if (p[j][k] == 0)
break;
q++;
}
if (q == W)// 如果你整行都有块,恭喜你,score+1
{
move(j);
score++;
if (score>(atoi(history_score)))re();
}
if (j == H)
break;
j++;
}
}
void renew()
{
int get;
found(type+1);
for (int k = 0; k < W; k++)
if (p[3][k] != 0)
{
clrscr();
printf
("你输了!!!\n你的得分为:%d\n如果你想清空历史记录请键入0,重新请输入其他,否则,请退出\n",
score);
if (score > (atoi(history_score)))
re();
scanf("%d/n", &get);
if (get == 0)
{
score = 0;
re();
init();
Draw();
}
else
init();
}
Detection();// 消行…结束检测
w = W / 2;
if (i != H)
i = 2;
math();
di = Difficulty;
printf("\033[2J");
Draw();
}
void Judge()
{
if (i >= H - hi)
renew();
else
{
i++;
if (testfound() != 0)
{
i--;
renew();
}
else
i--;
}
}
void found(int m)
{
for (int j=0;j<d


来自Android客户端1楼2014-08-17 06:21回复
    等下我发个软件的下载网址,大家下载下来就能玩了


    来自Android客户端2楼2014-08-17 06:22
    回复
      2026-01-05 15:16:12
      广告
      不感兴趣
      开通SVIP免广告
      将一楼的代码复制。。。下载软件打开粘贴点击运行就可以玩了,这个游戏是俄罗斯方块,wasd键控制


      来自Android客户端4楼2014-08-17 06:28
      回复
        好玩吗?


        IP属地:内蒙古5楼2014-08-17 12:25
        收起回复