導航:首頁 > 源碼編譯 > 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俄羅斯方塊源碼相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:763
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:841
安卓怎麼下載60秒生存 瀏覽:800
外向式文件夾 瀏覽:233
dospdf 瀏覽:428
怎麼修改騰訊雲伺服器ip 瀏覽:385
pdftoeps 瀏覽:490
為什麼鴻蒙那麼像安卓 瀏覽:733
安卓手機怎麼拍自媒體視頻 瀏覽:183
單片機各個中斷的初始化 瀏覽:721
python怎麼集合元素 瀏覽:477
python逐條解讀 瀏覽:829
基於單片機的濕度控制 瀏覽:496
ios如何使用安卓的帳號 瀏覽:880
程序員公園采訪 瀏覽:809
程序員實戰教程要多長時間 瀏覽:972
企業數據加密技巧 瀏覽:132
租雲伺服器開發 瀏覽:810
程序員告白媽媽不同意 瀏覽:333
攻城掠地怎麼查看伺服器 瀏覽:600