俄羅斯方塊

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();
}


發佈了30 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章