TC下運行,
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<dos.h>
#define K 20
#define W 10
#define H 22
#define left 0x4b00
#define right 0x4d00
#define up 0x4800
#define down 0x5000
#define esc 0x011b
#define R 0x1372
#define Y 0x1579
#define N 0x316e
int ax[4];
int ay[4];
int score;
int s=6;/* 控制速度 值越大越慢 最小值 爲1*/
struct box
{
int x;
int y;
int kind;
int shape;
}box;
typedef struct s_node
{
int x;
int y;
struct s_node *next;
}s_list;
typedef s_list *link;
link stack=NULL;
link bottom=NULL;
/* @0 俄(48x48,H)@ [suki software]*/
unsigned char e54H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x0E,0x00,0x00,0x00,0x00,0x00, 0x1E,0xFF,0x80,0x00,0x00,0x00,0x00, 0x1F,0xFF,0xC0,0x00,0x00,0x00,0x00,
0x3C,0xEF,0xE0,0x00,0x00,0x00,0x00, 0x3C,0xEE,0x00,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xE0,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xE0,0x00,0x00,0x00,0x00,
0xFC,0xEE,0x00,0x00,0x00,0x00,0x00, 0x1C,0xEF,0xC0,0x00,0x00,0x00,0x00, 0x1C,0xFF,0xC0,0x00,0x00,0x00,0x00, 0x1F,0xEF,0x80,0x00,0x00,0x00,0x00,
0x1F,0xE7,0x80,0x00,0x00,0x00,0x00, 0x1C,0xEF,0x00,0x00,0x00,0x00,0x00, 0x1C,0xFF,0xE0,0x00,0x00,0x00,0x00, 0x1C,0xFF,0xE0,0x00,0x00,0x00,0x00,
0x1F,0xE1,0xE0,0x00,0x00,0x00,0x00, 0x1C,0x00,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/* @1 羅(48x48,H)@ [suki software]*/
unsigned char luo54H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xFF,0xC0,0x00,0x00,0x00,0x00, 0x3B,0xBB,0xC0,0x00,0x00,0x00,0x00,
0x3B,0xBB,0xC0,0x00,0x00,0x00,0x00, 0x3B,0xBB,0xC0,0x00,0x00,0x00,0x00, 0x3F,0xFF,0xC0,0x00,0x00,0x00,0x00, 0x03,0x80,0x00,0x00,0x00,0x00,0x00,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00, 0x07,0xFF,0x00,0x00,0x00,0x00,0x00, 0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, 0x1E,0x0E,0x00,0x00,0x00,0x00,0x00,
0x3D,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0xFC,0x00,0x00,0x00,0x00,0x00, 0x00,0x78,0x00,0x00,0x00,0x00,0x00, 0x01,0xF0,0x00,0x00,0x00,0x00,0x00,
0x7F,0xC0,0x00,0x00,0x00,0x00,0x00, 0x3E,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/* @2 斯(48x48,H)@ [suki software]*/
unsigned char shi54H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xC3,0xC0,0x00,0x00,0x00,0x00, 0x39,0xFF,0xE0,0x00,0x00,0x00,0x00, 0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,
0x39,0xF8,0x00,0x00,0x00,0x00,0x00, 0x39,0xF8,0x00,0x00,0x00,0x00,0x00, 0x3F,0xF8,0x00,0x00,0x00,0x00,0x00, 0x39,0xFF,0xE0,0x00,0x00,0x00,0x00,
0x39,0xFB,0x80,0x00,0x00,0x00,0x00, 0x3F,0xFB,0x80,0x00,0x00,0x00,0x00, 0x39,0xFB,0x80,0x00,0x00,0x00,0x00, 0xFF,0xFB,0x80,0x00,0x00,0x00,0x00,
0xFF,0xFB,0x80,0x00,0x00,0x00,0x00, 0x1F,0xBB,0x80,0x00,0x00,0x00,0x00, 0x3F,0xFB,0x80,0x00,0x00,0x00,0x00, 0x79,0xF3,0x80,0x00,0x00,0x00,0x00,
0x70,0xF3,0x80,0x00,0x00,0x00,0x00, 0x00,0xE0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/* @3 方(48x48,H)@ [suki software]*/
unsigned char fang54H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xE0,0x00,0x00,0x00,0x00,0x00, 0x00,0xF0,0x00,0x00,0x00,0x00,0x00, 0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00, 0x03,0xC0,0x00,0x00,0x00,0x00,0x00, 0x03,0xC0,0x00,0x00,0x00,0x00,0x00, 0x03,0xC0,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0x00,0x00,0x00,0x00,0x00, 0x03,0x87,0x00,0x00,0x00,0x00,0x00, 0x03,0x87,0x00,0x00,0x00,0x00,0x00, 0x07,0x87,0x00,0x00,0x00,0x00,0x00,
0x07,0x8F,0x00,0x00,0x00,0x00,0x00, 0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, 0x1E,0x0F,0x00,0x00,0x00,0x00,0x00, 0x3E,0x0F,0x00,0x00,0x00,0x00,0x00,
0x7C,0x7E,0x00,0x00,0x00,0x00,0x00, 0x30,0x38,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/* @4 塊(48x48,H)@ [suki software]*/
unsigned char kuai54H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1C,0x38,0x00,0x00,0x00,0x00,0x00, 0x1C,0x38,0x00,0x00,0x00,0x00,0x00, 0x1C,0x38,0x00,0x00,0x00,0x00,0x00,
0x1D,0xFF,0x80,0x00,0x00,0x00,0x00, 0x1C,0x3B,0x80,0x00,0x00,0x00,0x00, 0xFF,0x3B,0x80,0x00,0x00,0x00,0x00, 0x1C,0x3B,0x80,0x00,0x00,0x00,0x00,
0x1C,0x3B,0x80,0x00,0x00,0x00,0x00, 0x1F,0xFF,0xE0,0x00,0x00,0x00,0x00, 0x1F,0x38,0x00,0x00,0x00,0x00,0x00, 0x1C,0x7C,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFC,0x00,0x00,0x00,0x00,0x00, 0xFE,0xFE,0x00,0x00,0x00,0x00,0x00, 0x79,0xEF,0x00,0x00,0x00,0x00,0x00, 0x03,0xC7,0xC0,0x00,0x00,0x00,0x00,
0x0F,0x81,0xE0,0x00,0x00,0x00,0x00, 0x0F,0x00,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
char zuo16H[]={
0x18,0xC0,0x18,0xC0,0x19,0x80,0x31,0xFE,
0x33,0xFE,0x76,0xC0,0xF0,0xFC,0xB0,0xFC,
0x30,0xC0,0x30,0xC0,0x30,0xFE,0x30,0xFE,
0x30,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,
};
char zhe16H[]={
0x03,0x00,0x03,0x0C,0x1F,0xCC,0x1F,0xD8,
0x03,0x30,0xFF,0xFE,0xFF,0xFE,0x03,0x00,
0x0F,0xF8,0x3F,0xF8,0xEC,0x18,0xCF,0xF8,
0x0C,0x18,0x0F,0xF8,0x0F,0xF8,0x00,0x00,
};
char mh16H[]={
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x30,0x00, 0x30,0x00, 0x00,0x00, 0x00,0x00,
0x30,0x00, 0x30,0x00, 0x00,0x00, 0x00,0x00
};
char zhao16H[]={
0x0C,0x00, 0x0C,0x0C, 0x7F,0x8C, 0x7F,0xCC,
0x0C,0x6C, 0x0C,0x38, 0xFF,0x98, 0xFF,0xB8,
0x0C,0x38, 0x6F,0x6C, 0x6F,0xCC, 0x7C,0x84,
0x7C,0x00, 0xCF,0xFE, 0x87,0xFE, 0x00,0x00
};
char peng16H[]={
0x00,0x30, 0x77,0x7C, 0x77,0x7C, 0x55,0x64,
0x55,0x7C, 0x77,0x64, 0x55,0x6C, 0x55,0x60,
0x77,0x7E, 0x77,0x7E, 0x55,0x06, 0x55,0x76,
0x55,0x06, 0xD5,0x1E, 0xAB,0x0C, 0x00,0x00
};
link push(link s,int x,int y)
{
link newnode;
newnode=(link)malloc(sizeof(s_list));
newnode->x=x;
newnode->y=y;
newnode->next=s;
s=newnode;
return s;
}
link pop(link p,int y)
{
link q=p,r,t;
if(p==NULL)
{
return q;
}
if(p->y!=y)
{
for(t=p;t!=NULL;t=t->next)
{
if(t->next->y==y)
{
r=t->next;
t->next=pop(r->next,y);
free(r);
return q;
}
}
return q;
}
else
if(p->y==y)
{
for(;q->y==y;)
{
r=q->next;
free(q);
q=r;
}
q->next=pop(q->next,y);
return q;
}
}
void initial(void)
{
int gdriver=DETECT,gmode=0,i;
link p;
score=0;
registerbgidriver(0);
initgraph(&gdriver,&gmode,"");
if(stack!=NULL)
{
for(;stack!=NULL;stack=stack->next)
{
p=stack->next;
free(stack);
stack=p;
}
}
for(i=1;i<=10;i++)
bottom=push(bottom,i*K,23*K);
}
void draw_mat(char *mat,int matsize,int x,int y,int color)/*漢字點陣*/
{
int i,j,k,m;
m=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<m;i++)
for(k=0;k<8;k++)
if(mat[j*m+i]&(0x80>>k))
putpixel(x+i*8+k,y+j,color);
}
void showword(void)
{
draw_mat(e54H,54,251,55,0);
draw_mat(luo54H,54,304,55,0);
draw_mat(shi54H,54,357,55,0);
draw_mat(fang54H,54,410,55,0);
draw_mat(kuai54H,54,463,55,0);
draw_mat(e54H,54,250,55,4);
draw_mat(luo54H,54,303,55,4);
draw_mat(shi54H,54,356,55,4);
draw_mat(fang54H,54,409,55,4);
draw_mat(kuai54H,54,462,55,4);
draw_mat(zuo16H,16,530,430,15);
draw_mat(zhe16H,16,548,430,15);
draw_mat(mh16H,16,566,430,15);
draw_mat(zhao16H,16,578,430,15);
draw_mat(peng16H,16,600,430,15);
}
void clew(void)
{
char buf[10];
setcolor(9);
settextstyle(0,0,2);
settextjustify(1,1);
outtextxy(350,150,"UP");
outtextxy(290,200,"LEFT");
outtextxy(420,200,"RIGHT");
outtextxy(350,250,"DOWN");
outtextxy(280,280,"ESC");
outtextxy(430,280,"RESTA");
setcolor(11);
settextstyle(1,0,4);
outtextxy(300,380,"SCORE:");
sprintf(buf,"%d",score);
setcolor(12);
settextstyle(1,0,4);
outtextxy(400,380,buf);
setcolor(15);
settextstyle(1,0,1);
outtextxy(572,460,"QQ:906575579");
}
void draw_frame(void)
{
setcolor(1);
rectangle(0,0,502,470);
setcolor(2);
rectangle(2,2,500,468);
setfillstyle(SOLID_FILL,2);
bar(5,5,215,465);
setfillstyle(SOLID_FILL,7);
bar(10,10,210,460);
setfillstyle(SOLID_FILL,8);
bar(10,450,210,460);
setfillstyle(SOLID_FILL,9);
bar(220,5,499,465);
setfillstyle(SOLID_FILL,8);
bar(225,10,494,460);
setfillstyle(SOLID_FILL,9);
bar(225,120,494,125);
setfillstyle(SOLID_FILL,9);
bar(225,300,494,305);
}
void b_redraw(void)
{
link p;
setfillstyle(SOLID_FILL,2);
bar(5,5,215,465);
setfillstyle(SOLID_FILL,7);
bar(10,10,210,460);
setfillstyle(SOLID_FILL,8);
bar(10,450,210,460);
for(p=stack;p!=NULL;p=p->next)
{
setcolor(15);
rectangle(p->x-K/2,p->y-K/2,p->x+K/2,p->y+K/2);
setfillstyle(1,8);
bar(p->x-K/2+1,p->y-K/2+1,p->x+K/2-1,p->y+K/2-1);
}
}
int b_position(int x,int y)
{
int i;
ax[0]=x;
ay[0]=y;
switch(box.kind)
{
case 1:/* 田字形 */
ax[1]=x+K;
ay[1]=y;
ax[2]=x;
ay[2]=y-K;
ax[3]=x+K;
ay[3]=y-K;
break;
case 2:/* 直線形 */
if(box.shape==0)/* 豎形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x;
ay[2]=y-2*K;
ax[3]=x;
ay[3]=y-3*K;
}
if(box.shape==1)/* 橫形 */
{
ax[1]=x-K;
ay[1]=y;
ax[2]=x+K;
ay[2]=y;
ax[3]=x+2*K;
ay[3]=y;
}
break;
case 3:/* 右梯形 */
if(box.shape==0)/* 右下高階梯形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x-K;
ay[2]=y-K;
ax[3]=x-K;
ay[3]=y-2*K;
}
if(box.shape==1)/* 右上低階梯形 */
{
ax[1]=x-K;
ay[1]=y;
ax[2]=x;
ay[2]=y-K;
ax[3]=x+K;
ay[3]=y-K;
}
break;
case 4:/* 左階梯形 */
if(box.shape==0)/* 左下高階梯形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x+K;
ay[2]=y-K;
ax[3]=x+K;
ay[3]=y-2*K;
}
if(box.shape==1)/* 左上低階梯形 */
{
ax[1]=x+K;
ay[1]=y;
ax[2]=x;
ay[2]=y-K;
ax[3]=x-K;
ay[3]=y-K;
}
break;
case 5:/* 右L形 */
if(box.shape==0)/* 右L形 */
{
ax[1]=x+K;
ay[1]=y;
ax[2]=x;
ay[2]=y-K;
ax[3]=x;
ay[3]=y-2*K;
}
if(box.shape==1)/* 右倒1 右L形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x+K;
ay[2]=y-K;
ax[3]=x+2*K;
ay[3]=y-K;
}
if(box.shape==2)/* 右倒2 右L形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x;
ay[2]=y-2*K;
ax[3]=x-K;
ay[3]=y-2*K;
}
if(box.shape==3)/* 右倒3 右L形 */
{
ax[1]=x-K;
ay[1]=y;
ax[2]=x+K;
ay[2]=y;
ax[3]=x+K;
ay[3]=y-K;
}
break;
case 6:/* 左L形 */
if(box.shape==0)/* 左L形 */
{
ax[1]=x-K;
ay[1]=y;
ax[2]=x;
ay[2]=y-K;
ax[3]=x;
ay[3]=y-2*K;
}
if(box.shape==1)/* 右倒1 左L形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x+K;
ay[2]=y;
ax[3]=x+2*K;
ay[3]=y;
}
if(box.shape==2)/* 右倒2 左L形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x;
ay[2]=y-2*K;
ax[3]=x+K;
ay[3]=y-2*K;
}
if(box.shape==3)/* 右倒3 左L形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x-K;
ay[2]=y-K;
ax[3]=x-2*K;
ay[3]=y-K;
}
break;
case 7:/* 丁字形 */
if(box.shape==0)/* 丁字形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x-K;
ay[2]=y-K;
ax[3]=x+K;
ay[3]=y-K;
}
if(box.shape==1)/* 右倒1 丁字形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x-K;
ay[2]=y-K;
ax[3]=x;
ay[3]=y-2*K;
}
if(box.shape==2)/* 右倒2 丁字形 */
{
ax[1]=x-K;
ay[1]=y;
ax[2]=x+K;
ay[2]=y;
ax[3]=x;
ay[3]=y-K;
}
if(box.shape==3)/* 右倒3 丁字形 */
{
ax[1]=x;
ay[1]=y-K;
ax[2]=x+K;
ay[2]=y-K;
ax[3]=x;
ay[3]=y-2*K;
}
break;
}
}
int b_bottom_(void)
{
int i,j=0,k;
link p;
for(i=0;i<4;i++)
{
for(p=bottom;p!=NULL;p=p->next)
{
if(ax[i]==p->x&&ay[i]+K==p->y)
{
j++;
}
}
}
for(i=0;i<4;i++)
{
for(p=stack;p!=NULL;p=p->next)
{
if(ax[i]==p->x&&ay[i]+K==p->y)
{
j++;
}
}
}
if(j==0)
return 0;
else
{
for(i=0;i<4;i++)
stack=push(stack,ax[i],ay[i]);
return 1;
}
}
int draw_box(int x[],int y[],int rectangle_color,int bar_color)
{
int i;
if(box.kind==2&&box.shape==0&&box.y==3*K)
for(i=0;i<3;i++)
{
setcolor(rectangle_color);
rectangle(x[i]-K/2,y[i]-K/2,x[i]+K/2,y[i]+K/2);
setfillstyle(1,bar_color);
bar(x[i]-K/2+1,y[i]-K/2+1,x[i]+K/2-1,y[i]+K/2-1);
}
else
for(i=0;i<4;i++)
{
setcolor(rectangle_color);
rectangle(x[i]-K/2,y[i]-K/2,x[i]+K/2,y[i]+K/2);
setfillstyle(1,bar_color);
bar(x[i]-K/2+1,y[i]-K/2+1,x[i]+K/2-1,y[i]+K/2-1);
}
}
void score_(void)
{
int i,j=0,k=0,r=0;
char buf[10];
link p,q;
for(i=0;i<4;i++)
{
j=0;
if(k==1)
{
for(r=0;r<4;r++)
{
if(ay[r]<ay[i-1])
{
ay[r]+=K;
}
}
k=0;
}
for(p=stack;p!=NULL;p=p->next)
{
if(ay[i]==p->y)
{
j++;
}
}
if(j==W)
{
k=1;
score+=10;
stack=pop(stack,ay[i]);
for(q=stack;q!=NULL;q=q->next)
if(q->y<ay[i])
q->y+=K;
sprintf(buf,"%d",score-10);
setcolor(8);
settextstyle(1,0,4);
outtextxy(400,380,buf);
sprintf(buf,"%d",score);
setcolor(12);
outtextxy(400,380,buf);
}
}
}
int game_over_(void)
{
link p;
for(p=stack;p!=NULL;p=p->next)
{
if(p->y==2*K)
{
return 1;
}
}
return 0;
}
void exit_(int x)
{
int key;
while(1)
{
key=bioskey(0);
if(key==Y||key==N)
break;
}
if(x==key)
exit(1);
}
int b_rand(void)
{
int i;
randomize();
box.x=5*K;
box.y=3*K;
box.kind=random(7)+1;
randomize();
if(box.kind==1)
box.shape=0;
else
if(box.kind==2||box.kind==3||box.kind==4)
box.shape=random(2);
else
box.shape=random(4);
return 0;
}
void game_play(void)
{
int key;
int i=0,j=0,k=0,j1=0,j2=0,j3=0,j4=0;
link p;
b_rand();
b_position(box.x,box.y);
while(1)
{
while(!kbhit())
{
if(j1==1)
{
j1=b_rand();
b_position(box.x,box.y);
j3=game_over_();
if(j3==1)
break;
}
j1=b_bottom_();
if(j1==1)
{
score_();
if(score>=500)
break;
b_redraw();
for(i=0;i<s;i++)
delay(10000);
continue;
}
if(box.y>22*K)
continue;
draw_box(ax,ay,15,8);
for(i=0;i<s;i++)
delay(10000);
draw_box(ax,ay,7,7);
box.y+=K;
b_position(box.x,box.y);
}
if(j3==1)
{
setcolor(4);
settextstyle(1,0,2);
settextjustify(1,1);
outtextxy(5*K+8,9*K,"GAME OVER!");
setcolor(15);
settextstyle(1,0,2);
outtextxy(5*K+12,11*K,"CONTINUE ?(Y/N)");
exit_(N);
break;
}
key=bioskey(0);
switch(key)
{
case right:
b_position(box.x,box.y);
for(i=1,k=ax[0];i<4;i++)
{
if(ax[i]>k)
k=ax[i];
}
if(k==W*K)
break;
j=0;
for(i=0;i<4;i++)
{
for(p=stack;p!=NULL;p=p->next)
{
if(ax[i]+K==p->x&&ay[i]==p->y)
{
j=1;
break;
}
}
if(j==1)
break;
}
if(j==1)
break;
box.x+=K;
b_position(box.x,box.y);
break;
case left:
k=0;
b_position(box.x,box.y);
for(i=1,k=ax[0];i<4;i++)
{
if(ax[i]<k)
k=ax[i];
}
if(k==K)
break;
j=0;
for(i=0;i<4;i++)
{
for(p=stack;p!=NULL;p=p->next)
{
if(ax[i]-K==p->x&&ay[i]==p->y)
{
j=1;
break;
}
}
if(j==1)
break;
}
if(j==1)
break;
box.x-=K;
b_position(box.x,box.y);
break;
case up:
i=box.shape;
k=0;
if(box.kind==1)
box.shape=0;
else
if(box.kind==2||box.kind==3||box.kind==4)
box.shape=(box.shape+1)%2;
else
box.shape=(box.shape+1)%4;
b_position(box.x,box.y);
for(j=0;j<4;j++)
{
if(ax[j]<K||ax[j]>W*K||ay[j]>H*K||ay[j]==K)
{
k=1;
break;
}
for(p=stack;p!=NULL;p=p->next)
{
if(ax[j]==p->x&&ay[j]==p->y)
{
k=1;
break;
}
}
}
if(k==1)
{
box.shape=i;
b_position(box.x,box.y);
break;
}
break;
case down:
k=0;
b_position(box.x,box.y);
while(1)
{
for(i=0;i<4;i++)
{
for(p=stack;p!=NULL;p=p->next)
{
if((ay[i]+2*K)==p->y&&ax[i]==p->x)
{
k++;
}
}
}
if(k==0&&(box.y+K)<22*K)
{
box.y+=K;
b_position(box.x,box.y);
draw_box(ax,ay,15,8);
delay(5000);
draw_box(ax,ay,7,7);
k=0;
}
else
break;
}
break;
case R:
setcolor(4);
settextstyle(1,0,2);
settextjustify(1,1);
outtextxy(5*K+12,10*K,"RESTART ?(Y/N)");
while(1)
{
key=bioskey(0);
if(key==Y||key==N)
break;
}
if(key==Y)
{
j4=1;
break;
}
j4=0;
b_redraw();
break;
case esc:
j2=1;
break;
}
if(j2==1)
{
char buf[10];
setcolor(4);
settextstyle(1,0,2);
settextjustify(1,1);
outtextxy(5*K+12,10*K,"QUIT ?(Y/N)");
exit_(Y);
b_redraw();
sprintf(buf,"%d",score);
setcolor(12);
settextstyle(1,0,4);
outtextxy(400,380,buf);
setcolor(8);
outtextxy(400,380,buf);
j2=0;
}
if(j4==1)
break;
if(score>=300)
{
s--;
break;
}
}
}
void main()
{
while(1)
{
initial();
draw_frame();
showword();
clew();
game_play();
cleardevice();
}
closegraph();
}