导航:首页 > 源码编译 > ios俄罗斯方块源码

ios俄罗斯方块源码

发布时间:2022-09-11 03:28:41

① 求俄罗斯方块游戏代码

这个连接看看http://code.ddvip.com/code.php?id=2497&url=http://codedown.ddvip.com:81/down/ddvip_com_0225295aee0083.zip

② 俄罗斯方块的代码

一个俄罗斯方块的源代码,自己写的,有点笨的……

#include<dos.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#include<bios.h>

#define LEFT 0x4b
#define RIGHT 0x4d
#define DOWN 0x50
#define CHANGE 0x20
#define ESC 0x1b
#define INTR 0x1C
#define DefaultX 5
#define DefaultY 1
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

static unsigned counter=0;
static unsigned shape[7][4][4][4]={
{
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
},
{
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
},
{
{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
},
{
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,0,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}},
{{1,1,0,0},{0,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}},
},
{
{{0,1,0,0},{0,1,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,0,0,0},{1,1,1,0},{0,0,0,0}},
{{1,1,0,0},{1,0,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0,0}},
},
};

unsigned back[22][14]={{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

char ShapeColor[7]={8,10,11,12,13,14,15};
char DigitalShape[10]={128+119,3,62,31,128+75,128+93,128+125,19,128+127,128+95};
char ZodiacBack[11]={4,6,12,13,11,10,2,3,9,1,8};
char ZodiacSoft[18][14]={{0,0,0,0,96,0,0,0,0,0,0,0,60,0},
{255,248,0,0,96,0,0,0,0,248,0,0,124,0},
{255,248,0,0,97,128,0,0,3,248,0,0,192,0},
{0,112,0,0,97,128,0,0,7,0,0,1,128,48},
{0,224,0,0,96,0,0,0,14,0,0,1,128,48},
{1,192,0,0,96,0,0,0,12,0,0,1,128,48},
{3,128,120,15,97,128,240,60,12,0,15,15,249,255},
{7,0,252,31,225,131,248,127,14,0,31,143,249,255},
{7,1,142,48,225,135,24,227,7,240,49,193,128,48},
{14,3,134,96,97,142,24,192,3,252,112,193,128,48},
{28,3,6,96,97,140,25,192,0,28,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{120,3,6,96,97,140,25,128,0,6,96,193,128,48},
{224,1,140,48,225,142,25,195,24,14,49,129,128,48},
{255,249,252,63,225,135,252,255,28,28,63,129,128,48},
{255,248,240,15,97,131,236,60,15,248,30,1,128,48},
{0,0,0,0,0,0,0,0,7,224,0,1,128,0}};

unsigned long TotalMark=0;
unsigned int Erasered=0,ETimes=0;
int Speed=0;
int CEr=0;
int NumOfLev[5]={0,0,0,0,0};
int TimeDelay[10]={21,18,17,15,13,11,9,7,5,3};
char NewShape[2];
unsigned PerOnce[4];

void interrupt ( *oldhandler)(__CPPARGS);
void interrupt handler(__CPPARGS)
{
++counter;
oldhandler();
}

void DrawBackground()
{
//setlinestyle
}
void DrawDigital(int x,int y,int a)
{
int i=7;
setcolor(((DigitalShape[a]>>i)&1)*7+4);
//printf("%d",(DigitalShape[a]>>i)&1);
i--;
line(x,y+1,x,y+15);
line(x+1,y+2,x+1,y+14);
line(x+2,y+3,x+2,y+13);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+1,y,x+16,y);
line(x+2,y+1,x+15,y+1);
line(x+3,y+2,x+14,y+2);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+2,y+15,x+15,y+15);
line(x+1,y+16,x+16,y+16);
line(x+2,y+17,x+15,y+17);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+3,y+30,x+14,y+30);
line(x+2,y+31,x+15,y+31);
line(x+1,y+32,x+16,y+32);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+15,y+3,x+15,y+13);
line(x+16,y+2,x+16,y+14);
line(x+17,y+1,x+17,y+15);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
line(x+15,y+19,x+15,y+29);
line(x+16,y+18,x+16,y+30);
line(x+17,y+17,x+17,y+31);
}

void ArtClear()
{
for(int i=480;i>=0;i-=2)
{
setcolor(3);
line(0,i-6,639,i-6);
setcolor(9);
line(0,i-4,639,i-4);
setcolor(1);
line(0,i-2,639,i-2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
for(i=1;i<480;i+=2)
{
setcolor(3);
line(0,i+6,639,i+6);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i+2,639,i+2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
}

void end()
{
for(int j=0;j<4;j++)
{
for(int i=j;i<480;i+=4)
{
setcolor(3);
line(0,i+8,639,i+8);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i,639,i);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
delay(5);
}
setcolor(YELLOW);
outtextxy(260,200,"[ Game Over ]");
gotoxy(14,16);
printf("This freeware is written by Daniel.Qu ZodiacSoft 2000");
gotoxy(12,17);
printf("Please e-mail to [email protected] or visit my homepage at");
gotoxy(12,18);
printf("http://grocery.2699.com if you have question.");
gotoxy(14,20);
printf("I will soon provide something new,please wait...");
gotoxy(14,22);
printf("We hold these truths to be self-evident,that all codes");
gotoxy(12,23);
printf("are created FREE.");
getch();
clrscr();
closegraph();
exit(0);
}

void ShowTitle()
{
int gdriver=DETECT,gmode,errorcode,i,j,k;
initgraph(&gdriver,&gmode,"");
errorcode=graphresult();
if (errorcode!=grOk)
{
printf("Graphics error: %s

③ 下载的俄罗斯方块源码怎么放在eclipse里运行

1、 左上角有一个File 按钮 点击 找到Import
2、点击Import 出来一个对话框 点击General
3、在里面找到最长的一个Existing Project......什么什么的点击它 点Next
4、跳出来一个对话框,如果你要导入的是一个文件夹 选择第一个 如果是一个zip文件则选择第二个
5、点后面的Browse 选择要导入的文件的路径
6、如果选择正确 Finish就行了
如果选择的不正确 Finish'是不能点的 再找找看看那里有错吧

④ 俄罗斯方块的源程序

#include<stdio.h>
#include <graphics.h>
#include <dos.h>
#include <stdlib.h>
#define UP 0x48
#define DOWN 0x50
#define LEFT 0x4b
#define RIGHT 0x4d
#define ESC 0x01
#define P 0x19
#define ENTER 0x1c
#define PAGEUP 0x49
#define PAGEDOWN 0x51
#define add_D 0x0d
#define add_d 0x4e
#define sub_D 0x0c
#define sub_d 0x4a
#define RST 0x13
#define PAUSE 0x19

long score;
int brick_width=20;
char str[9]={'0','0','0','0','0','0','0','0','\0'}; /*积分数组!*/
int m_speed=0;
int difficulty=0;

/************************************************/
/*以下定义的是砖块的形状*/
int brick [6][4][4][4]=
{
{
{{0,1,0,0},{0,1,1,0},{0,0,1,0},{0,0,0,0}},
{{0,1,1,0},{1,1,0,0},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,1,0},{0,0,1,0},{0,0,0,0}},
{{0,1,1,0},{1,1,0,0},{0,0,0,0},{0,0,0,0}}
},
{
{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}}
},
{
{{0,0,1,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,1,0},{0,0,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,1,0},{0,0,1,1},{0,0,0,0},{0,0,0,0}}
},
{
{{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}}
},
{
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}}
},
{
{{1,1,1,0},{1,0,0,0},{0,0,0,0},{0,0,0,0}},
{{1,1,0,0},{0,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,1,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
{{1,0,0,0},{1,0,0,0},{1,1,0,0},{0,0,0,0}}
}
};

/*以下定义的是游戏窗口的矩阵,在游戏进行时,通过检查此矩阵来获知砖块的堆积情况*/
int board[22][12]={
{2,2,2,2,2,2,2,2,2,2,2,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,2},
{2,2,2,2,2,2,2,2,2,2,2,2}
};
/*以下是程序中用到汉字的点阵——————————————————*/
char e_16[]={
/* 以下是 '俄' 的 16点阵宋体 字模,32 byte */
0x10,0x20,0x19,0xA8,0x16,0x24,0x22,0x24,
0x3F,0xFE,0x62,0x20,0xA2,0x24,0x22,0xA6,
0x23,0x2C,0x26,0x28,0x2A,0x10,0x22,0x30,
0x22,0x4A,0x2E,0x8A,0x24,0x04,0x00,0x00,
};
char luo_16[]={
/* 以下是 '罗' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x3F,0xFC,0x22,0x44,0x22,0x44,
0x22,0x44,0x3F,0xFC,0x22,0x00,0x03,0xFC,
0x06,0x08,0x0C,0x08,0x12,0x10,0x61,0x20,
0x00,0xC0,0x03,0x00,0x0C,0x00,0xF0,0x00,
};
char si_16[]={
/* 以下是 '斯' 的 16点阵宋体 字模,32 byte */
0x22,0x0C,0x22,0x70,0xFF,0x40,0x22,0x40,
0x3E,0x40,0x22,0x7E,0x22,0x48,0x3E,0x48,
0x22,0x48,0x22,0x48,0xFF,0x48,0x00,0x48,
0x24,0x88,0x62,0x88,0x83,0x08,0x00,0x08,
};
char fang_16[]={
/* 以下是 '方' 的 16点阵宋体 字模,32 byte */
0x02,0x00,0x01,0x00,0x00,0x80,0xFF,0xFE,
0x02,0x00,0x02,0x00,0x03,0xF0,0x02,0x10,
0x04,0x10,0x04,0x10,0x08,0x10,0x08,0x10,
0x10,0x10,0x20,0x90,0xC0,0x60,0x00,0x00,
};
char kuai_16[]={
/* 以下是 '块' 的 16点阵宋体 字模,32 byte */
0x20,0x80,0x20,0x80,0x20,0x80,0x23,0xF8,
0xF8,0x88,0x20,0x88,0x20,0x88,0x20,0x88,
0x2F,0xFE,0x20,0x80,0x39,0x40,0xE1,0x20,
0x42,0x18,0x02,0x0E,0x04,0x04,0x08,0x00,
};
char kai_16[]={
/* 以下是 '开' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x7F,0xFE,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0xFF,0xFE,0x04,0x20,
0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x20,
0x10,0x20,0x20,0x20,0x40,0x20,0x00,0x00,
};
char shi_16[]={
/* 以下是 '始' 的 16点阵宋体 字模,32 byte */
0x10,0x20,0x18,0x30,0x10,0x20,0x10,0x48,
0xFC,0x84,0x25,0xFE,0x24,0x84,0x44,0x00,
0x44,0xFC,0x28,0x84,0x18,0x84,0x14,0x84,
0x22,0x84,0x42,0xFC,0x80,0x84,0x00,0x00,
};
char tui_16[]={
/* 以下是 '退' 的 16点阵宋体 字模,32 byte */
0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,
0x04,0x10,0x04,0x10,0xE7,0xF0,0x24,0x88,
0x24,0x50,0x24,0x20,0x25,0x10,0x26,0x18,
0x24,0x08,0x50,0x00,0x8F,0xFE,0x00,0x00,
};
char chu_16[]={
/* 以下是 '出' 的 16点阵宋体 字模,32 byte */
0x01,0x00,0x01,0x00,0x21,0x04,0x21,0x04,
0x21,0x04,0x21,0x04,0x3F,0xFC,0x21,0x04,
0x01,0x00,0x21,0x04,0x21,0x04,0x21,0x04,
0x21,0x04,0x3F,0xFC,0x20,0x04,0x00,0x00,
};
char you_16[]={
/* 以下是 '游' 的 16点阵宋体 字模,32 byte */
0x44,0x20,0x22,0x20,0x22,0x20,0x0F,0xBE,
0x84,0x40,0x54,0xBC,0x57,0x08,0x25,0x10,
0x25,0x10,0x25,0x7E,0xC5,0x10,0x49,0x10,
0x49,0x10,0x49,0x10,0x55,0x50,0x42,0x20,
};
char xi_16[]={
/* 以下是 '戏' 的 16点阵宋体 字模,32 byte */
0x00,0x40,0x00,0x50,0x7E,0x48,0x02,0x48,
0x44,0x40,0x25,0xFE,0x18,0x40,0x08,0x44,
0x0C,0x28,0x14,0x30,0x12,0x20,0x22,0x50,
0x41,0x92,0x06,0x0A,0x00,0x06,0x00,0x02,
};
char xia_16[]={
/* 以下是 '下' 的 16点阵宋体 字模,32 byte */
0x00,0x04,0x7F,0xFE,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0xC0,0x01,0x60,0x01,0x30,
0x01,0x20,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
};
char ge_16[]={
/* 以下是 '个' 的 16点阵宋体 字模,32 byte */
0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x40,
0x04,0x20,0x09,0x18,0x11,0x0E,0x61,0x04,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
};
char tu_16[]={
/* 以下是 '图' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x7F,0xFC,0x44,0x04,0x47,0xE4,
0x44,0x44,0x4A,0x84,0x71,0x04,0x42,0xC4,
0x4C,0x3C,0x71,0x14,0x40,0x84,0x42,0x04,
0x41,0x84,0x41,0x04,0x7F,0xFC,0x40,0x04,
};
char xing_16[]={
/* 以下是 '形' 的 16点阵宋体 字模,32 byte */
0x00,0x04,0x7F,0x86,0x12,0x0C,0x12,0x10,
0x12,0x20,0x12,0x08,0xFF,0xCC,0x12,0x18,
0x12,0x20,0x12,0x44,0x12,0x86,0x12,0x0C,
0x22,0x10,0x22,0x20,0x42,0x40,0x80,0x80,
};
char fen_16[]={
/* 以下是 '分' 的 16点阵宋体 字模,32 byte */
0x08,0x80,0x0C,0x80,0x08,0x40,0x10,0x20,
0x10,0x30,0x20,0x18,0x40,0x0E,0x9F,0xE4,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x08,0x20,0x10,0xA0,0x20,0x40,0x40,0x00,
};
char shu_16[]={
/* 以下是 '数' 的 16点阵宋体 字模,32 byte */
0x08,0x20,0x49,0x30,0x2A,0x20,0x1C,0x20,
0xFF,0x7E,0x1C,0x44,0x2B,0x44,0x48,0xC4,
0x08,0x28,0xFF,0x28,0x12,0x10,0x34,0x10,
0x0C,0x28,0x32,0x4E,0xC0,0x84,0x00,0x00,
};
char bd_16[]={
/* 以下是 ':' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,
0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
};
char su_16[]={
/* 以下是 '速' 的 16点阵宋体 字模,32 byte */
0x00,0x80,0x40,0x80,0x2F,0xFC,0x20,0x80,
0x00,0x80,0x07,0xF8,0xE4,0x88,0x24,0x88,
0x27,0xF8,0x21,0xA0,0x22,0x98,0x2C,0x88,
0x20,0x80,0x50,0x80,0x8F,0xFE,0x00,0x00,
};
char _16[]={
/* 以下是 '度' 的 16点阵宋体 字模,32 byte */
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,
0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,
0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,
0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,
};
char cong_16[]={
/* 以下是 '从' 的 16点阵宋体 字模,32 byte */
0x08,0x40,0x08,0x40,0x08,0x40,0x08,0x40,
0x08,0x40,0x08,0x40,0x08,0x40,0x08,0xA0,
0x14,0xA0,0x12,0x90,0x12,0x90,0x21,0x08,
0x23,0x0C,0x42,0x06,0x84,0x04,0x08,0x00,
};
char xin_16[]={
/* 以下是 '新' 的 16点阵宋体 字模,32 byte */
0x10,0x00,0x08,0x0E,0x7F,0x70,0x22,0x40,
0x14,0x40,0xFF,0x7E,0x08,0x48,0x08,0x48,
0xFF,0x48,0x08,0x48,0x2C,0x48,0x2A,0x88,
0x4A,0x88,0x89,0x08,0x2A,0x08,0x10,0x08,
};
char nan_16[]={
/* 以下是 '难' 的 16点阵宋体 字模,32 byte */
0x00,0xA0,0x00,0x90,0xF9,0x10,0x09,0xFE,
0x8B,0x20,0x4B,0x20,0x2D,0xFC,0x11,0x20,
0x19,0x20,0x29,0xFC,0x25,0x20,0x45,0x20,
0x81,0x20,0x01,0xFE,0x01,0x00,0x01,0x00,
};
char xuan_16[]={
/* 以下是 '选' 的 16点阵宋体 字模,32 byte */
0x00,0x40,0x22,0x40,0x12,0x40,0x13,0xF8,
0x04,0x40,0x00,0x40,0xF7,0xFC,0x11,0x20,
0x11,0x20,0x12,0x24,0x12,0x24,0x14,0x1C,
0x10,0x00,0x28,0x00,0x47,0xFE,0x00,0x00,
};
char ze_16[]={
/* 以下是 '择' 的 16点阵宋体 字模,32 byte */
0x20,0x00,0x23,0xF8,0x21,0x10,0xFC,0xA0,
0x20,0x40,0x20,0xA0,0x2B,0x58,0x30,0x46,
0x63,0xF8,0xA0,0x40,0x20,0x40,0x27,0xFE,
0x20,0x40,0x20,0x40,0xA0,0x40,0x40,0x40,
};

/* 函数申明 */
int getkey();
void draw_brick(int kind,int stat,int start_x,int start_y,int *position);
void display_brick(int *position,int xexcursion,int yexcursion);
void draw_freezebrick(int *space);
void draw_mainboard();
int is_movable(int *position,int *space,int dir);
void freeze(int *position,int *space);
int check_bottom(int *space,int hei);
void ERASE(int top,int flag);
int move_down(int *position,int *space,int *top,int *flag,int speed);
void begin();
void rand_select(int *kind,int *stat);
void updata_data(int *space,int *top,int flag);
void preview(int kind_new,int stat_new);
void convert_score(long score,char *str);
void drawmat(char *,int,int,int,int);
/**************************************************/

/**********************************************************/
void drawmat(char *mat,int matsize,int x,int y,int color)
/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/
{
int i, j, k, n;
n = (matsize - 1) / 8 + 1;
for(j = 0; j < matsize; j++)
for(i = 0; i < n; i++)
for(k = 0;k < 8; k++)
if(mat[j * n + i] & (0x80 >> k)) /*测试为1的位则显示*/
putpixel(x + i * 8 + k, y + j, color);
}

/*初始化游戏板巨阵!*/
void init_data(int **space)
{
int hei,wid,i,j;
*space=(int *)malloc(264*sizeof(int));
/*分配的空间,"264" 是数组的长度*/
for(i=0;i<difficulty;i++)
for(j=0;j<12;j++)
board[21-i][j]=random(2);
for(hei=0;hei<22;hei++)
for(wid=0;wid<12;wid++)
*(*space+hei*12+wid)=board[hei][wid];

/*初始化*/
score=0;
}

void convert_score(long score,char *str)
{
int i;
long SCORE;
SCORE=score;
for(i=7;i>=0;i--)
{
str[i]='0'+SCORE%10;
SCORE /=10;
}
}
/**************************************************/

/*获取键盘扫描码 */
int getkey()
{
union REGS key;
key.h.ah=0;
int86(0x16,&key,&key);
return key.h.ah;
}

/*****************************************************/

/*画方格图形*/
void mydraw(int start_x,int start_y,int brick_width,int color)
{
settextstyle(4,0,5);
setfillstyle(6,8);
setcolor(color);
rectangle(start_x,start_y,start_x+brick_width,start_y+brick_width);
rectangle(start_x+2,start_y+2,start_x+brick_width-2,start_y+brick_width-2);
outtextxy(start_x+7,start_y+7,"*");
}

/******************************************************/

/*
用mydraw函数和position数组在屏幕上画方块*/
void draw_brick(int kind,int stat,int start_x,int start_y,int *position)
{
int wid,hei,x,y,i=0;
void *buf;
setviewport(100,40,300,440,1);
buf=malloc(400);
for(i=0;i<8;i+=2)
{
x=position[i];y=position[i+1];
getimage(x,y,x+brick_width,y+brick_width,buf);
putimage(x,y,buf,XOR_PUT);
}
i=0;
for(hei=0;hei<4;hei++)
{
y=start_y+hei*brick_width;
for(wid=0;wid<4;wid++)
if(brick[kind][stat][hei][wid]==1)
{
x=start_x+wid*brick_width;
position[i++]=x;
position[i++]=y;
position[10]= x > position[10] ? x : position[10];
position[11]= y > position[11] ? y : position[11];
mydraw(x,y,brick_width,10);
}
}
position[8]=start_x;
position[9]=start_y;

free(buf); /* 释放 "buf" 所占的内存*/
}
void display_score(char *pstr) /*显示积分和速度(10000分加一级,最大9级)*/
{
void *buf;int n,j;char speed[2];
buf=malloc(3200);
itoa(m_speed,&speed,10);/*需要改进*/
setviewport(479,139,560,170,1);
getimage(0,0,80,40,buf);
putimage(0,0,buf,XOR_PUT);
settextstyle(0,0,1);
setcolor(WHITE);
outtextxy(0,0,pstr);
outtextxy(0,22,speed);
if(m_speed<=9)
{
n=atoi(pstr);
m_speed+=n/10000;
}
free(buf);

}

⑤ 求C语言俄罗斯方块代码

俄罗斯方块C源代码

#include<stdio.h>

#include<windows.h>

#include<conio.h>

#include<time.h>

#defineZL4 //坐标增量,不使游戏窗口靠边

#defineWID36 //游戏窗口的宽度

#defineHEI20 //游戏窗口的高度

inti,j,Ta,Tb,Tc; //Ta,Tb,Tc用于记住和转换方块变量的值

inta[60][60]={0}; //标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框

intb[4]; //标记4个"口"方块:1有,0无,类似开关

intx,y,level,score,speed; //方块中心位置的x,y坐标,游戏等级、得分和游戏速度

intflag,next; //当前要操作的方块类型序号,下一个方块类型序号

voidgtxy(intm,intn); //以下声明要用到的自编函数

voidgflag(); //获得下一方块序号

voidcsh(); //初始化界面

voidstart(); //开始部分

voidprfk(); //打印方块

voidclfk(); //清除方块

voidmkfk(); //制作方块

voidkeyD(); //按键操作

intifmov(); //判断方块能否移动或变体

void clHA(); //清除满行的方块

voidclNEXT(); //清除边框外的NEXT方块

intmain()

{csh();

while(1)

{start();//开始部分

while(1)

{prfk();

Sleep(speed); //延时

clfk();

Tb=x;Tc=flag;//临存当前x坐标和序号,以备撤销操作

keyD();

y++;//方块向下移动

if(ifmov()==0){y--;prfk();dlHA();break;}//不可动放下,删行,跨出循环

}

for(i=y-2;i<y+2;i++){if(i==ZL){j=0;}} //方块触到框顶

if(j==0){system("cls");gtxy(10,10);printf("游戏结束!");getch();break;}

clNEXT(); //清除框外的NEXT方块

}

return0;

}

voidgtxy(intm,intn)//控制光标移动

{COORDpos;//定义变量

pos.X=m;//横坐标

pos.Y=n;//纵坐标

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}

voidcsh()//初始化界面

{gtxy(ZL+WID/2-5,ZL-2);printf("俄罗斯方块");//打印游戏名称

gtxy(ZL+WID+3,ZL+7);printf("*******NEXT:");//打印菜单信息

gtxy(ZL+WID+3,ZL+13);printf("**********");

gtxy(ZL+WID+3,ZL+15);printf("Esc:退出游戏");

gtxy(ZL+WID+3,ZL+17);printf("↑键:变体");

gtxy(ZL+WID+3,ZL+19);printf("空格:暂停游戏");

gtxy(ZL,ZL);printf("╔");gtxy(ZL+WID-2,ZL);printf("╗");//打印框角

gtxy(ZL,ZL+HEI);printf("╚");gtxy(ZL+WID-2,ZL+HEI);printf("╝");

a[ZL][ZL+HEI]=2;a[ZL+WID-2][ZL+HEI]=2;//记住有图案

for(i=2;i<WID-2;i+=2){gtxy(ZL+i,ZL);printf("═");}//打印上横框

for(i=2;i<WID-2;i+=2){gtxy(ZL+i,ZL+HEI);printf("═");a[ZL+i][ZL+HEI]=2;}//下框

for(i=1;i<HEI;i++){gtxy(ZL,ZL+i);printf("║");a[ZL][ZL+i]=2;}//左竖框记住有图案

for(i=1;i<HEI;i++){gtxy(ZL+WID-2,ZL+i);printf("║");a[ZL+WID-2][ZL+i]=2;}//右框

CONSOLE_CURSOR_INFOcursor_info={1,0};//以下是隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

level=1;score=0;speed=400;

gflag();flag=next;//获得一个当前方块序号

}

voidgflag() //获得下一个方块的序号

{srand((unsigned)time(NULL));next=rand()%19+1; }

voidstart()//开始部分

{gflag();Ta=flag;flag=next;//保存当前方块序号,将下一方块序号临时操作

x=ZL+WID+6;y=ZL+10;prfk();//给x,y赋值,在框外打印出下一方块

flag=Ta;x=ZL+WID/2;y=ZL-1;//取回当前方块序号,并给x,y赋值

}

voidprfk()//打印俄罗斯方块

{for(i=0;i<4;i++){b[i]=1;}//数组b[4]每个元素的值都为1

mkfk();//制作俄罗斯方块

for(i=x-2;i<=x+4;i+=2)//打印方块

{for(j=y-2;j<=y+1;j++){if(a[i][j]==1&&j>ZL){gtxy(i,j);printf("□");}}}

gtxy(ZL+WID+3,ZL+1); printf("level:%d",level); //以下打印菜单信息

gtxy(ZL+WID+3,ZL+3); printf("score:%d",score);

gtxy(ZL+WID+3,ZL+5); printf("speed:%d",speed);

}

voidclfk()//清除俄罗斯方块

{for(i=0;i<4;i++){b[i]=0;}//数组b[4]每个元素的值都为0

mkfk();//制作俄罗斯方块

for(i=x-2;i<=x+4;i+=2)//清除方块

{for(j=y-2;j<=y+1;j++){if(a[i][j]==0&&j>ZL){gtxy(i,j);printf("");}}}

}

voidmkfk()//制作俄罗斯方块

{a[x][y]=b[0];//方块中心位置状态:1-有,0-无

switch(flag)//共6大类,19种小类型

{case1:{a[x][y-1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//田字方块

case2:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x+4][y]=b[3];break;}//直线方块:----

case3:{a[x][y-1]=b[1];a[x][y-2]=b[2];a[x][y+1]=b[3];break;}//直线方块:|

case4:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x][y+1]=b[3];break;}//T字方块

case5:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y]=b[3];break;}//T字顺时针转90度

case6:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x+2][y]=b[3];break;}//T字顺转180度

case7:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y]=b[3];break;}//T字顺转270度

case8:{a[x][y+1]=b[1];a[x-2][y]=b[2];a[x+2][y+1]=b[3];break;}//Z字方块

case9:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x-2][y+1]=b[3];break;}//Z字顺转90度

case10:{a[x][y-1]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字顺转180度

case11:{a[x][y+1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字顺转270度

case12:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y-1]=b[3];break;}//7字方块

case13:{a[x-2][y]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//7字顺转90度

case14:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y+1]=b[3];break;}//7字顺转180度

case15:{a[x-2][y]=b[1];a[x-2][y+1]=b[2];a[x+2][y]=b[3];break;}//7字顺转270度

case16:{a[x][y+1]=b[1];a[x][y-1]=b[2];a[x+2][y-1]=b[3];break;}//倒7字方块

case17:{a[x-2][y]=b[1];a[x+2][y+1]=b[2];a[x+2][y]=b[3];break;}//倒7字顺转90度

case18:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y+1]=b[3];break;}//倒7字顺转180度

case19:{a[x-2][y]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//倒7字顺转270度

}

}

voidkeyD()//按键操作

{if(kbhit())

{intkey;

key=getch();

if(key==224)

{key=getch();

if(key==75){x-=2;}//按下左方向键,中心横坐标减2

if(key==77){x+=2;}//按下右方向键,中心横坐标加2

if(key==72)//按下向上方向键,方块变体

{if(flag>=2&&flag<=3){flag++;flag%=2;flag+=2;}

if(flag>=4&&flag<=7){flag++;flag%=4;flag+=4;}

if(flag>=8&&flag<=11){flag++;flag%=4;flag+=8;}

if(flag>=12&&flag<=15){flag++;flag%=4;flag+=12;}

if(flag>=16&&flag<=19){flag++;flag%=4;flag+=16;}}

}

if(key==32)//按空格键,暂停

{prfk();while(1){if(getch()==32){clfk();break;}}} //再按空格键,继续游戏

if(ifmov()==0){x=Tb;flag=Tc;} //如果不可动,撤销上面操作

else{prfk();Sleep(speed);clfk();Tb=x;Tc=flag;} //如果可动,执行操作

}

}

intifmov()//判断能否移动

{if(a[x][y]!=0){return0;}//方块中心处有图案返回0,不可移动

else{if((flag==1&&(a[x][y-1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||

(flag==2&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x+4][y]==0))||

(flag==3&&(a[x][y-1]==0&&a[x][y-2]==0&&a[x][y+1]==0))||

(flag==4&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x][y+1]==0))||

(flag==5&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y]==0))||

(flag==6&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x+2][y]==0))||

(flag==7&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x+2][y]==0))||

(flag==8&&(a[x][y+1]==0&&a[x-2][y]==0&&a[x+2][y+1]==0))||

(flag==9&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x-2][y+1]==0))||

(flag==10&&(a[x][y-1]==0&&a[x-2][y-1]==0&&a[x+2][y]==0))||

(flag==11&&(a[x][y+1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||

(flag==12&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y-1]==0))||

( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||

( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) ||

(flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) ||

(flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) ||

( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) ||

(flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) ||

(flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0

&&a[x+2][y]==0))){return1;}

}

return0; //其它情况返回0

}

voidclNEXT() //清除框外的NEXT方块

{flag=next;x=ZL+WID+6;y=ZL+10;clfk();}

void clHA() //清除满行的方块

{intk,Hang=0; //k是某行方块个数,Hang是删除的方块行数

for(j=ZL+HEI-1;j>=ZL+1;j--)//当某行有WID/2-2个方块时,则为满行

{k=0;for(i=ZL+2;i<ZL+WID-2;i+=2)

{if(a[i][j]==1)//竖坐标从下往上,横坐标由左至右依次判断是否满行

{k++; //下面将操作删除行

if(k==WID/2-2) { for(k=ZL+2;k<ZL+WID-2;k+=2)

{a[k][j]=0;gtxy(k,j);printf("");Sleep(1);}

for(k=j-1;k>ZL;k--)

{for(i=ZL+2;i<ZL+WID-2;i+=2)//已删行数上面有方块,先清除再全部下移一行

{if(a[i][k]==1){a[i][k]=0;gtxy(i,k);printf("");a[i][k+1]=1;

gtxy(i,k+1);printf("□");}}

}

j++;//方块下移后,重新判断删除行是否满行

Hang++;//记录删除方块的行数

}

}

}

}

score+=100*Hang; //每删除一行,得100分

if(Hang>0&&(score%500==0||score/500>level-1)) //得分满500速度加快升一级

{speed-=20;level++;if(speed<200)speed+=20; }

}

⑥ 急求俄罗斯方块等小游戏的源代码

俄罗斯方块——java源代码提供
import java.awt.*;
import java.awt.event.*;
//俄罗斯方块类
public class ERS_Block extends Frame{
public static boolean isPlay=false;
public static int level=1,score=0;
public static TextField scoreField,levelField;

public static MyTimer timer;
GameCanvas gameScr;

public static void main(String[] argus){
ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");
WindowListener win_listener = new WinListener();
ers.addWindowListener(win_listener);
}

//俄罗斯方块类的构造方法
ERS_Block(String title){
super(title);

setSize(600,480);
setLayout(new GridLayout(1,2));

gameScr = new GameCanvas();
gameScr.addKeyListener(gameScr);

timer = new MyTimer(gameScr);
timer.setDaemon(true);
timer.start();
timer.suspend();

add(gameScr);

Panel rightScr = new Panel();
rightScr.setLayout(new GridLayout(2,1,0,30));
rightScr.setSize(120,500);
add(rightScr);

//右边信息窗体的布局
MyPanel infoScr = new MyPanel();
infoScr.setLayout(new GridLayout(4,1,0,5));
infoScr.setSize(120,300);
rightScr.add(infoScr);

//定义标签和初始值
Label scorep = new Label("分数:",Label.LEFT);
Label levelp = new Label("级数:",Label.LEFT);
scoreField = new TextField(8);
levelField = new TextField(8);
scoreField.setEditable(false);
levelField.setEditable(false);
infoScr.add(scorep);
infoScr.add(scoreField);
infoScr.add(levelp);
infoScr.add(levelField);
scorep.setSize(new Dimension(20,60));
scoreField.setSize(new Dimension(20,60));
levelp.setSize(new Dimension(20,60));
levelField.setSize(new Dimension(20,60));
scoreField.setText("0");
levelField.setText("1");

//右边控制按钮窗体的布局
MyPanel controlScr = new MyPanel();
controlScr.setLayout(new GridLayout(5,1,0,5));
rightScr.add(controlScr);

//定义按钮play
Button play_b = new Button("开始游戏");
play_b.setSize(new Dimension(50,200));
play_b.addActionListener(new Command(Command.button_play,gameScr));

//定义按钮Level UP
Button level_up_b = new Button("提高级数");
level_up_b.setSize(new Dimension(50,200));
level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));

//定义按钮Level Down
Button level_down_b =new Button("降低级数");
level_down_b.setSize(new Dimension(50,200));
level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));

//定义按钮Level Pause
Button pause_b =new Button("游戏暂停");
pause_b.setSize(new Dimension(50,200));
pause_b.addActionListener(new Command(Command.button_pause,gameScr));

//定义按钮Quit
Button quit_b = new Button("退出游戏");
quit_b.setSize(new Dimension(50,200));
quit_b.addActionListener(new Command(Command.button_quit,gameScr));

controlScr.add(play_b);
controlScr.add(level_up_b);
controlScr.add(level_down_b);
controlScr.add(pause_b);
controlScr.add(quit_b);
setVisible(true);
gameScr.requestFocus();
}
}

//重写MyPanel类,使Panel的四周留空间
class MyPanel extends Panel{
public Insets getInsets(){
return new Insets(30,50,30,50);
}
}

//游戏画布类
class GameCanvas extends Canvas implements KeyListener{
final int unitSize = 30; //小方块边长
int rowNum; //正方格的行数
int columnNum; //正方格的列数
int maxAllowRowNum; //允许有多少行未削
int blockInitRow; //新出现块的起始行坐标
int blockInitCol; //新出现块的起始列坐标
int [][] scrArr; //屏幕数组
Block b; //对方快的引用

//画布类的构造方法
GameCanvas(){
rowNum = 15;
columnNum = 10;
maxAllowRowNum = rowNum - 2;
b = new Block(this);
blockInitRow = rowNum - 1;
blockInitCol = columnNum/2 - 2;
scrArr = new int [32][32];
}

//初始化屏幕,并将屏幕数组清零的方法
void initScr(){
for(int i=0;i<rowNum;i++)
for (int j=0; j<columnNum;j++)
scrArr[j]=0;
b.reset();
repaint();
}

//重新刷新画布方法
public void paint(Graphics g){
for(int i = 0; i < rowNum; i++)
for(int j = 0; j < columnNum; j++)
drawUnit(i,j,scrArr[j]);
}

//画方块的方法
public void drawUnit(int row,int col,int type){
scrArr[row][col] = type;
Graphics g = getGraphics();
tch(type){ //表示画方快的方法
case 0: g.setColor(Color.black);break; //以背景为颜色画
case 1: g.setColor(Color.blue);break; //画正在下落的方块
case 2: g.setColor(Color.magenta);break; //画已经落下的方法
}
g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);
g.dispose();
}

public Block getBlock(){
return b; //返回block实例的引用
}

//返回屏幕数组中(row,col)位置的属性值
public int getScrArrXY(int row,int col){
if (row < 0 || row >= rowNum || col < 0 || col >= columnNum)
return(-1);
else
return(scrArr[row][col]);
}

//返回新块的初始行坐标方法
public int getInitRow(){
return(blockInitRow); //返回新块的初始行坐标
}

//返回新块的初始列坐标方法
public int getInitCol(){
return(blockInitCol); //返回新块的初始列坐标
}

//满行删除方法
void deleteFullLine(){
int full_line_num = 0;
int k = 0;
for (int i=0;i<rowNum;i++){
boolean isfull = true;

L1:for(int j=0;j<columnNum;j++)
if(scrArr[j] == 0){
k++;
isfull = false;
break L1;
}
if(isfull) full_line_num++;
if(k!=0 && k-1!=i && !isfull)
for(int j = 0; j < columnNum; j++){
if (scrArr[j] == 0)
drawUnit(k-1,j,0);
else
drawUnit(k-1,j,2);
scrArr[k-1][j] = scrArr[j];
}
}
for(int i = k-1 ;i < rowNum; i++){
for(int j = 0; j < columnNum; j++){
drawUnit(i,j,0);
scrArr[j]=0;
}
}
ERS_Block.score += full_line_num;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}

//判断游戏是否结束方法
boolean isGameEnd(){
for (int col = 0 ; col <columnNum; col ++){
if(scrArr[maxAllowRowNum][col] !=0)
return true;
}
return false;
}

public void keyTyped(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}

//处理键盘输入的方法
public void keyPressed(KeyEvent e){
if(!ERS_Block.isPlay)
return;
tch(e.getKeyCode()){
case KeyEvent.VK_DOWN:b.fallDown();break;
case KeyEvent.VK_LEFT:b.leftMove();break;
case KeyEvent.VK_RIGHT:b.rightMove();break;
case KeyEvent.VK_SPACE:b.leftTurn();break;
}
}
}

//处理控制类
class Command implements ActionListener{
static final int button_play = 1; //给按钮分配编号
static final int button_levelup = 2;
static final int button_leveldown = 3;
static final int button_quit = 4;
static final int button_pause = 5;
static boolean pause_resume = true;

int curButton; //当前按钮
GameCanvas scr;

//控制按钮类的构造方法
Command(int button,GameCanvas scr){
curButton = button;
this.scr=scr;
}

//按钮执行方法
public void actionPerformed (ActionEvent e){
tch(curButton){
case button_play:if(!ERS_Block.isPlay){
scr.initScr();
ERS_Block.isPlay = true;
ERS_Block.score = 0;
ERS_Block.scoreField.setText("0");
ERS_Block.timer.resume();
}
scr.requestFocus();
break;
case button_levelup:if(ERS_Block.level < 10){
ERS_Block.level++;
ERS_Block.levelField.setText(""+ERS_Block.level);
ERS_Block.score = 0;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
scr.requestFocus();
break;
case button_leveldown:if(ERS_Block.level > 1){
ERS_Block.level--;
ERS_Block.levelField.setText(""+ERS_Block.level);
ERS_Block.score = 0;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
scr.requestFocus();
break;
case button_pause:if(pause_resume){
ERS_Block.timer.suspend();
pause_resume = false;
}else{
ERS_Block.timer.resume();
pause_resume = true;
}
scr.requestFocus();
break;
case button_quit:System.exit(0);
}
}
}

//方块类
class Block {
static int[][] pattern = {
{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态
{0x04e0,0x0464,0x00e4,0x04c4},
{0x4620,0x6c00,0x4620,0x6c00},
{0x2640,0xc600,0x2640,0xc600},
{0x6220,0x1700,0x2230,0x0740},
{0x6440,0x0e20,0x44c0,0x8e00},
{0x0660,0x0660,0x0660,0x0660}
};
int blockType; //块的模式号(0-6)
int turnState; //块的翻转状态(0-3)
int blockState; //快的下落状态
int row,col; //块在画布上的坐标
GameCanvas scr;

//块类的构造方法
Block(GameCanvas scr){
this.scr = scr;
blockType = (int)(Math.random() * 1000)%7;
turnState = (int)(Math.random() * 1000)%4;
blockState = 1;
row = scr.getInitRow();
col = scr.getInitCol();
}

//重新初始化块,并显示新块
public void reset(){
blockType = (int)(Math.random() * 1000)%7;
turnState = (int)(Math.random() * 1000)%4;
blockState = 1;
row = scr.getInitRow();
col = scr.getInitCol();
dispBlock(1);
}

//实现“块”翻转的方法
public void leftTurn(){
if(assertValid(blockType,(turnState + 1)%4,row,col)){
dispBlock(0);
turnState = (turnState + 1)%4;
dispBlock(1);
}
}

//实现“块”的左移的方法
public void leftMove(){
if(assertValid(blockType,turnState,row,col-1)){
dispBlock(0);
col--;
dispBlock(1);
}
}

//实现块的右移
public void rightMove(){
if(assertValid(blockType,turnState,row,col+1)){
dispBlock(0);
col++;
dispBlock(1);
}
}

//实现块落下的操作的方法
public boolean fallDown(){
if(blockState == 2)
return(false);
if(assertValid(blockType,turnState,row-1,col)){
dispBlock(0);
row--;
dispBlock(1);
return(true);
}else{
blockState = 2;
dispBlock(2);
return(false);
}
}

//判断是否正确的方法
boolean assertValid(int t,int s,int row,int col){
int k = 0x8000;
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if((int)(pattern[t][s]&k) != 0){
int temp = scr.getScrArrXY(row-i,col+j);
if (temp<0||temp==2)
return false;
}
k = k >> 1;
}
}
return true;
}

//同步显示的方法
public synchronized void dispBlock(int s){
int k = 0x8000;
for (int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if(((int)pattern[blockType][turnState]&k) != 0){
scr.drawUnit(row-i,col+j,s);
}
k=k>>1;
}
}
}
}

//定时线程
class MyTimer extends Thread{
GameCanvas scr;

public MyTimer(GameCanvas scr){
this.scr = scr;
}

public void run(){
while(true){
try{
sleep((10-ERS_Block.level + 1)*100);
}
catch(InterruptedException e){}
if(!scr.getBlock().fallDown()){
scr.deleteFullLine();
if(scr.isGameEnd()){
ERS_Block.isPlay = false;
suspend();
}else
scr.getBlock().reset();
}
}
}
}

class WinListener extends WindowAdapter{
public void windowClosing (WindowEvent l){
System.exit(0);
}
}

⑦ 请高手帮我看看下面的程序那里出错了!这是个俄罗斯方块的源码,运行平台:DOS+TC3.0

/*……接上面的程序代码,受帖子内容限制请继续看下帖:*/

void render(void); /*唯一的绘图函数*/
/*注意,此函数重画整个地图,根据地图中的点阵,以及根据小盒在地图的中坐标在恰当位置画出小盒子*/
/*DOS的图形当然是很低的,但,全屏绘图在这里还是过得去 的,我用的是双缓冲,交换绘图,这样感觉好点*/
void initMap(void); /*初始化地图(大盒子)*/
/*之前提到过在这个两维数组中有一圈为1的东西来阻止小盒子出界,这就是生成这一圈的函数*/
void newGame(); /*新建一个游戏*/
/*这个函数初始化一几个时钟和建造第一个下落的小盒子。当然建造完后要生成一个个的预览*/
void rotateBox(int box1[5][5], int box2[5][5]);
/*核心函数成员,把box1逆时针旋转90度,并保存到box2中*/
void rebuidNext();
/*核心函数成员,生成下一个方块*/
int drop();
/*核心函数成员,将下落的盒子向下移(实际上增加下落盒子的Y值而已,当然要判断是否与地图点阵重叠与地图重叠,无法完成下落操作,返回0*/
void putBox();
/*在这之上,下落的盒子与地图之前是独立的两个两维数*/ /*当下落失败后,小盒子要回到顶端再次重新执行下落,这*/ /*时原来的盒子内容当然就要变成地图上的内容了,putBox就是将下落盒子的内容根据XY写到地图上*/
void clear();
/*这个函数在下落失败并putBox后执行,扫描整个地图*/ /*清除掉满行的点阵,具体细节在函数内讲*/
int move(int dir);
/*左右移动下落盒子,dir指出向左还是向右,这个与drop是一样的*/
int test(int mx, int my, int box[5][5]);
/*这个比较重点,判断box在mx,my为坐标上,与地图上的非空点阵是否有重叠.很通用的一个函数*/
int rotate();
/*旋转下落的盒子,当然如果转了之后与地图有冲突,会取消转动,返回0,但返回的值好像没什么用~*/
int newfall();
/*创建下落元素,把"下一个"预览的内容复制到下落盒子*/ /*并将下落的盒子移动到地图顶部,当然这个过程,如果顶部有冲突,会返回0,这时说明已经满了...gameOver*/
int main();
/*终于到了最后的主函数,在这里可以看到整个游戏的架*/
/*构,包括游戏主循环,键盘处理等...*/
/******************************************************\
* 变量区 *
\******************************************************/

/*在上面的说明中,可能会有一些蒙,因为可能对所用到的实际变量没有了解*/
int map[MAX_Y+4][MAX_X+4]; /*地图\大盒子...MAX_X,Y是可见面积*/
/*我已说过需要在外面布两圈"卫兵"*/
int curbox[5][5]; /*当前下落的盒子*/
int curx, cury; /*保存着当前活动盒子在地图上的位置*/
int nextbox[5][5]; /*保存着下一个形状的盒子*/

/*以上就是这么几个盒子和坐标了*/

/*这里列出了标准七种俄罗斯方块图形点阵,用到时它们会被复制到相*//*应的盒子...:)*/
int box[MAX_C][5][5] = { /*MAX_C(7)种预定义的盒子*/
{
{0,0,0,0,0},
{0,0,0,0,0},
{1,1,1,1,0},
{0,0,0,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,0,1,0,0},
{0,1,1,1,0},
{0,0,0,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,1,1,0,0},
{0,0,1,1,0},
{0,0,0,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,0,1,1,0},
{0,1,1,0,0},
{0,0,0,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,1,1,0,0},
{0,0,1,0,0},
{0,0,1,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,0,1,1,0},
{0,0,1,0,0},
{0,0,1,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,0,1,1,0},
{0,0,1,1,0},
{0,0,0,0,0},
{0,0,0,0,0}
}
};
/******************************************************\
* 时钟 *
\******************************************************/
/*时钟部分也非常理解的,一个用到设置时钟,一个用来测试时钟激活态*/

Timer tDown; /*正常下落定时时钟intervel会比较大*/
Timer tFast; /*按KEY_DOWN时使用的快速下落*/
int speed = 13; /*控制下落时间间隔*/
#define FAST_INTV 1 /*快时钟的间隔*/

int GetTickCount() { /*读取BIOS时钟*/
int ret;
ret = peek(0x0,0x46e); /*实际上读取了内存0:046e处的内容*/
ret <<= 8; /*这个地方是$%#$^$%&^*/
ret += peek(0x0,0x46c); /*太多新的东西了,找点书看一看吧*/
return (ret);
}
int setTimer(Timer *t, unsigned int intv, BOOL en) {
t -> enabled = en; /*设置一个时钟罗*/
t -> intervel = intv;
t -> lasttime = GetTickCount(); /*lasttime记录的是上一个*/
/*tickcount返回的东西*/
/*这样当再一次测试时间时新的tickcount产生了它来减去上一次的tickcount就得出了一个时间 间隔,这个就可以和intervel比较从而得出是否 激活了*/
return 0;
}

BOOL testTimer(Timer *t) { /*在上面6行的地方解释了:)*/
unsigned int tmp, dt;
if (!(t -> enabled)) return FALSE;
tmp = GetTickCount();
dt = tmp - (t -> lasttime);
if(dt >= t -> intervel) {
t -> lasttime = tmp;
return TRUE;
}
return FALSE;
}
void render(void) {
int x, y;
static int cPage = 0; /*当前页,换页用*/

#define STARTX 50 /*定义几个常量*/
#define STARTY 0
#define LEN 18

setactivepage(cPage=(cPage == 0?1:0)); /*选择页*/
cleardevice(); /*清屏*/
setcolor(15);
rectangle( STARTX + LEN * 2 - 2,
STARTY + LEN * 3 - 2,
STARTX + LEN * (MAX_X - 2) + 2,
STARTY + LEN * (MAX_Y - 2) + 2);
/*用白色画一个外框*/
setfillstyle(SOLID_FILL, 5);
for(y = 3; y < MAX_Y - 2; y++) { /*画地图 */
for(x = 2; x < MAX_X - 2; x++) {
if(map[y][x]) {
rectangle( x * LEN + STARTX,
y * LEN + STARTY,
x * LEN + STARTX + LEN,
y * LEN + STARTY + LEN);
bar( x * LEN + STARTX + 1,
y * LEN + STARTY + 1,
x * LEN + STARTX + LEN - 2,
y * LEN + STARTY + LEN - 2);
}
}
}

/*绘图操作就不要作太复杂的介绍了,这只写作用*/
/*以上段,根据地图上的点阵情况将地图反映到屏幕上*/

for(y = 0; y < 5; y++) { /*画下落物*/
for(x = 0; x < 5; x++) {
if(curbox[y][x]) {
if(y + cury > 2) {
rectangle( (x + curx) * LEN + STARTX,
(y + cury) * LEN + STARTY,
(x + curx) * LEN + STARTX + LEN,
(y + cury) * LEN + STARTY + LEN);
bar( (x + curx) * LEN + STARTX + 1,
(y + cury) * LEN + STARTY + 1,
(x + curx) * LEN + STARTX + LEN - 2,
(y + cury) * LEN + STARTY + LEN - 2);
}
}
}
}

/*以上将下落的盒子按昭它在地图上的坐标,画到对应的区域里*/
for(y = 0; y < 5; y++) { /*画下一个*/
for(x = 0; x < 5; x++) {
if(nextbox[y][x]) {
rectangle( x * LEN + 320,
y * LEN + 10,
x * LEN + 338,
y * LEN + 28);
bar( x * LEN + 321,
y * LEN + 11,
x * LEN + 336,
y * LEN + 26);
}
}
}
/*这个画出下一个盒子的预览*/
setvisualpage(cPage); /*确认在cPage页里画好了*/
/*将它显示出来*/
}
/******************************************************\
* 初始化部分 *
\******************************************************/
/*提供newGame()初始化新游戏*/
void initMap(void) { /*初始化地图*/
int x, y; /*我们须要一圈卫兵...*/
for(y = 0; y < MAX_Y; y++) {
for(x = 0; x < MAX_X; x++) {
if(x < 2 || x > MAX_X - 3 || y > MAX_Y - 3)
map[y][x] = 1;
else map[y][x] = 0;
}
} /*这里初始化出这个形状*/
} /*当然是无盖的...*/
void newGame() { /*新建游戏*/
int x, y;
initMap(); /*初始化地图*/
srand(GetTickCount()); /*初始化随机发生器*/
rebuidNext(); /*建立下一个*/
setTimer(&tDown, speed, 1); /*启动时钟(快慢两个)*/
setTimer(&tFast, FAST_INTV, 1);
newfall(); /*对下落的盒子操作一下*/
/*这样第一个下落的方块 就在地图顶部准备好了*/
}
/******************************************************\
* 核心函数 *
\******************************************************/

void rotateBox(int box1[5][5], int box2[5][5]) {
/*旋转box1输出到box2*/
int x, y;
for(x = 0; x < 5; x++) /*这个函数可以须要实际*/
for(y = 4; y >= 0; y--) /*编写一下才能印像深刻*/
box2[y][x] = box1[x][4 - y];
}
void rebuidNext() { /*新建下一个形状并放到nextbox中*/
int i, x, y;
i = random(MAX_C); /*从几种方块里面选一种*/
for(y = 0; y < 5; y++) /*并复制过来*/
for(x = 0; x < 5; x++)
nextbox[y][x] = box[i][y][x]; /*复制*/
}
int drop() { /*下落,返回成功与否*/
int newy; /*盒子要下落的新位置*/
newy = cury + 1; /*为当前Y位置+1*/
if(test(curx, newy, curbox)) {
cury = newy; /*测试下落盒在这个位置*/
return 1; /*上是否有冲突,没有的话*/
} /*直接设置cury*/
return 0;
}
void putBox() { /*将curbox填充到地图上*/
int x, y;
for(y = 0; y < 5; y++) /*这个也简单,主要是要根*/
for(x = 0; x < 5; x++) /*据curx,cury指出位置 */
if(curbox[y][x])
map[y + cury][x + curx] = curbox[y][x];
}
void clear() { /*清除掉满行*/
/*这个函数实际上效率也很低的,为了简便
它从头到尾作了测试*/
/*具体的算法为:从第0行开始到最后一行,测试地图点阵是否为满,如果是的话 从当前行算起,之上的地图向下掉一行*/
int x, y;
int dx, dy;
int fullflag;
for(y = 0; y < MAX_Y - 2; y++) { /*最后两行保留行*/
fullflag = 1; /*假设为满*/
for(x = 2; x < MAX_X - 2; x++) { /*保留列~*/
if(!map[y][x]) {
fullflag = 0;
break;
}
}
if(fullflag) { /*向下移动一行*/
for(dy = y; dy > 0; dy--)
for(dx = 2; dx < MAX_X - 2; dx++)
map[dy][dx] = map[dy - 1][dx];
for(dx = 2; dx < MAX_X - 2; dx++)
map[0][dx] = 0;
/*并清除掉第一行*/
}
}
}
int move(int dir) { /*返回成功与否*/
int newx;
if(dir) newx = curx + 1;
/*与drop一样,准备移动后的坐标*/
else newx = curx - 1;
if(test(newx, cury, curbox)) { /*测试是否冲突*/
curx = newx; /*可以的话切换curx*/
return 1;
}
return 0;
}

int test(int mx, int my, int box[5][5]) {
/*测试box在map里mx,my位置上是否能着陆*//*这个是最关键的一个函数,它判断是否产生非空冲突*//*但算法还是很简单的*/
int x, y;
for(y = 0; y < 5; y++)
for(x = 0; x < 5; x++)
if(map[y + my][x + mx] && box[y][x])
return 0;
return 1;
}

int rotate() {
int x, y;
int newbox[5][5]; /*我们必须将当前盒子转动到新的盒子*/
/*再对这个新的盒子的冲突作测试*/
rotateBox(curbox, newbox); /*转动到新的盒子*/
if(test(curx, cury, newbox)) {
/*并且新的盒子能放到地图上而不冲突*/
for(y = 0; y < 5; y++)
for(x = 0; x < 5; x++)
curbox[y][x] = newbox[y][x]; /*复制进来*/
return 1;
}
else return 0;
}
int newfall() { /*创建下落元素失败返回0*/
int x, y;
curx = MAX_X / 2 - 2; /*重新指定小盒位置*/
cury = 0;
for(y = 0; y < 5; y++)
for(x = 0; x < 5; x++)
curbox[y][x] = nextbox[y][x];/*将nextBox复制过来*/
rebuidNext(); /*重建nextBox*/
return test(curx, cury, curbox);
}
/************************************************************\
* 主函数 -- 整个游戏架构 *
\************************************************************/
int main() {
char key; /*记录当前按键*/
int i;
int gd = VGA, gm = VGAMED; /*初始化的图形模式*/
Timer *ptDown; /*下落所指向的时钟(有快慢)*/
Timer trender; /*为了避免渲染给程序造成过大的负担*/
/*用一个时钟来控制渲染速度*/ /*把它设置interval = 1,*/ /*这样就是18 FPS了,当然无法达到标*/ /*准的60 FPS...毕竟这是DOS...*/
setTimer(&trender, 1, 1);
initgraph(&gd, &gm, ""); /*初始化图形*/
newGame(); /*新游戏...*/
while(1) { /*主游戏循环*/
if(kbhit()) { /*如果键盘有按下*/
key = getch(); /*读取一个按键值到key*/
}
else key = 0;
switch(key) { /*对读到的key进行判断*/
case KEY_UP:
rotate(); /*上,旋转下落盒子*/
break;
case KEY_DOWN:
ptDown = &tFast; /*使用tFast时钟 */
break;
case KEY_LEFT:
move(0); /*左移*/
break;
case KEY_RIGHT:
move(1); /*右移*/
break;
case KEY_ESC:
closegraph(); /*结束游戏*/
exit(0);
default:
ptDown = &tDown; /*使用原来速度 */
}
if(testTimer(ptDown)) { /*在上面已设置了下落要
使用的时钟在ptDown里*/
if(!drop()) { /*下落,失败返回0*/
putBox(); /*写到地图里*/
clear(); /*清除满行*/
if(!newfall()) { /*新建下落,失败则游戏结束*/
closegraph();
exit(0);
}
}
}
if(testTimer(&trender)) /*最后...渲染...*/
render();
}
}。
/* 本程序写完*/

我在Turbo C 中运行是它总说我语法错误。可是我就是不知道错在哪。请帮忙运行一下,帮我看看哪错了,本人不甚感激!!!!谢谢!

阅读全文

与ios俄罗斯方块源码相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:766
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:841
安卓怎么下载60秒生存 浏览:800
外向式文件夹 浏览:233
dospdf 浏览:428
怎么修改腾讯云服务器ip 浏览:385
pdftoeps 浏览:490
为什么鸿蒙那么像安卓 浏览:733
安卓手机怎么拍自媒体视频 浏览:183
单片机各个中断的初始化 浏览:721
python怎么集合元素 浏览:478
python逐条解读 浏览:830
基于单片机的湿度控制 浏览:496
ios如何使用安卓的帐号 浏览:880
程序员公园采访 浏览:809
程序员实战教程要多长时间 浏览:972
企业数据加密技巧 浏览:132
租云服务器开发 浏览:811
程序员告白妈妈不同意 浏览:333
攻城掠地怎么查看服务器 浏览:600