俄罗斯方块小游戏代码(俄罗斯方块的c语言源代码 api实现)

2024-07-25 19:33:02 0

俄罗斯方块小游戏代码(俄罗斯方块的c语言源代码  api实现)

大家好,今天小编来为大家解答以下的问题,关于俄罗斯方块小游戏代码,俄罗斯方块的c语言源代码 api实现这个很多人还不知道,现在让我们一起来看看吧!

本文目录

俄罗斯方块的c语言源代码 api实现

TC下面的/************************************* Desc: 俄罗斯方块游戏 * By: hoodlum1980 * Email: jinfd@126.com * Date: 2008.03.12 22:30 ************************************/#include 《stdio.h》#include 《bios.h》#include 《dos.h》#include 《graphics.h》#include 《string.h》#include 《stdlib.h》#define true 1#define false 0#define BoardWidth 12#define BoardHeight 23#define _INNER_HELPER /*inner helper method *//*Scan Codes Define*/enum KEYCODES{ K_ESC =0x011b, K_UP =0x4800, /* upward arrow */ K_LEFT =0x4b00, K_DOWN =0x5000, K_RIGHT =0x4d00, K_SPACE =0x3920, K_P =0x1970};/* the data structure of the block */typedef struct tagBlock{ char c; /* cell fill info array, 0-empty, 1-filled */ int x; /* block position cx */ int y; /* block position cy */ char color; /* block color */ char size; /* block max size in width or height */ char name; /* block name (the block’s shape) */} Block;/* game’s global info */int FrameTime= 1300;int CellSize= 18;int BoardLeft= 30;int BoardTop= 30;/* next block grid */int NBBoardLeft= 300;int NBBoardTop= 30;int NBCellSize= 10;/* score board position */int ScoreBoardLeft= 300;int ScoreBoardTop=100;int ScoreBoardWidth=200;int ScoreBoardHeight=35;int ScoreColor=LIGHTCYAN;/* infor text postion */int InfoLeft=300;int InfoTop=200;int InfoColor=YELLOW;int BorderColor=DARKGRAY;int BkGndColor=BLACK;int GameRunning=true;int TopLine=BoardHeight-1; /* top empty line */int TotalScore=100;char info_score;char info_help;char info_common;/* our board, Board-fillColor */unsigned char Board;char BufferCells; /* used to judge if can rotate block */Block curBlock; /* current moving block */Block nextBlock; /* next Block to appear *//* function list */int GetKeyCode();int CanMove(int dx,int dy);int CanRotate();int RotateBlock(Block *block);int MoveBlock(Block *block,int dx,int dy);void DrawBlock(Block *block,int,int,int);void EraseBlock(Block *block,int,int,int);void DisplayScore();void DisplayInfo(char* text);void GenerateBlock(Block *block);void NextBlock();void InitGame();int PauseGame();void QuitGame();/*Get Key Code */int _INNER_HELPER GetKeyCode(){ int key=0; if(bioskey(1)) { key=bioskey(0); } return key;}/* display text! */void _INNER_HELPER DisplayInfo(char *text){ setcolor(BkGndColor); outtextxy(InfoLeft,InfoTop,info_common); strcpy(info_common,text); setcolor(InfoColor); outtextxy(InfoLeft,InfoTop,info_common);}/* create a new block by key number,* the block anchor to the top-left corner of 4*4 cells*/void _INNER_HELPER GenerateBlock(Block *block){ int key=(random(13)*random(17)+random(1000)+random(3000))%7; block-》size=3;/* because most blocks’ size=3 */ memset(block-》c,0,16); switch(key) { case 0: block-》name=’T’; block-》color=RED; block-》c=1; block-》c=1; block-》c=1; break; case 1: block-》name=’L’; block-》color=YELLOW; block-》c=1; block-》c=1; block-》c=1; break; case 2: block-》name=’J’; block-》color=LIGHTGRAY; block-》c=1; block-》c=1; block-》c=1; break; case 3: block-》name=’z’; block-》color=CYAN; block-》c=1; block-》c=1; break; case 4: block-》name=’5’; block-》color=LIGHTBLUE; block-》c=1; block-》c=1; break; case 5: block-》name=’o’; block-》color=BLUE; block-》size=2; block-》c=1; block-》c=1; break; case 6: block-》name=’I’; block-》color=GREEN; block-》size=4; block-》c=1; block-》c=1; block-》c=1; block-》c=1; break; }}/* get next block! */void NextBlock(){ /* copy the nextBlock to curBlock */ curBlock.size=nextBlock.size; curBlock.color=nextBlock.color; curBlock.x=(BoardWidth-4)/2; curBlock.y=-curBlock.size; memcpy(curBlock.c,nextBlock.c,16); /* generate nextBlock and show it */ EraseBlock(&nextBlock,NBBoardLeft,NBBoardTop,NBCellSize); GenerateBlock(&nextBlock); nextBlock.x=1,nextBlock.y=0; DrawBlock(&nextBlock,NBBoardLeft,NBBoardTop,NBCellSize);}/* rotate the block, update the block struct data */int _INNER_HELPER RotateCells(char c,char blockSize){ char temp,i,j; switch(blockSize) { case 3: temp=c; c=temp; temp=c; c=temp; break; case 4: /* only ’I’ block arived here! */ c; c; break; }}/* judge if the block can move toward the direction */int CanMove(int dx,int dy){ int i,j,tempX,tempY; for(i=0;i《curBlock.size;i++) { for(j=0;j《curBlock.size;j++) { if(curBlock.c) { /* cannot move leftward or rightward */ tempX = curBlock.x + i + dx; if(tempX《0 || tempX》(BoardWidth-1)) return false; /* make sure x is valid! */ /* cannot move downward */ tempY = curBlock.y + j + dy; if(tempY》(BoardHeight-1)) return false; /* y is only checked lower bound, maybe negative!!!! */ /* the cell already filled, we must check Y’s upper bound before check cell ! */ if(tempY》=0 && Board) return false; } } } return true;}/* judge if the block can rotate */int CanRotate(){ int i,j,tempX,tempY; /* update buffer */ memcpy(BufferCells, curBlock.c, 16); RotateCells(BufferCells,curBlock.size); for(i=0;i《curBlock.size;i++) { for(j=0;j《curBlock.size;j++) { if(BufferCells) { tempX=curBlock.x+i; tempY=curBlock.y+j; if(tempX《0 || tempX》(BoardWidth-1)) return false; if(tempY》(BoardHeight-1)) return false; if(tempY》=0 && Board) return false; } } } return true;}/* draw the block */void _INNER_HELPER DrawBlock(Block *block,int bdLeft,int bdTop,int cellSize){ int i,j; setfillstyle(SOLID_FILL,block-》color); for(i=0;i《block-》size;i++) { for(j=0;j《block-》size;j++) { if(block-》c && (block-》y+j)》=0) { floodfill( bdLeft+cellSize*(i+block-》x)+cellSize/2, bdTop+cellSize*(j+block-》y)+cellSize/2, BorderColor); } } }}/* Rotate the block, if success, return true */int RotateBlock(Block *block){ char temp,i,j; int b_success; if(block-》size==2) return true; if(( b_success=CanRotate())) { EraseBlock(block,BoardLeft,BoardTop,CellSize); memcpy(curBlock.c,BufferCells,16); DrawBlock(block,BoardLeft,BoardTop,CellSize); } return b_success;}/* erase a block, only fill the filled cell with background color */void _INNER_HELPER EraseBlock(Block *block,int bdLeft,int bdTop,int cellSize){ int i,j; setfillstyle(SOLID_FILL,BkGndColor); for(i=0;i《block-》size;i++) { for(j=0;j《block-》size;j++) { if(block-》c && (block-》y+j》=0)) { floodfill( bdLeft+cellSize*(i+block-》x)+cellSize/2, bdTop+cellSize*(j+block-》y)+cellSize/2, BorderColor); } } }}/* move by the direction if can, donothing if cannot* return value: true - success, false - cannot move toward this direction*/int MoveBlock(Block *block,int dx,int dy){ int b_canmove=CanMove(dx,dy); if(b_canmove) { EraseBlock(block,BoardLeft,BoardTop,CellSize); curBlock.x+=dx; curBlock.y+=dy; DrawBlock(block,BoardLeft,BoardTop,CellSize); } return b_canmove;}/* drop the block to the bottom! */int DropBlock(Block *block){ EraseBlock(block,BoardLeft,BoardTop,CellSize); while(CanMove(0,1)) { curBlock.y++; } DrawBlock(block,BoardLeft,BoardTop,CellSize); return 0;/* return value is assign to the block’s alive */}/* init the graphics mode, draw the board grid */void InitGame(){ int i,j,gdriver=DETECT,gmode; struct time sysTime; /* draw board cells */ memset(Board,0,BoardWidth*BoardHeight*2); memset(nextBlock.c,0,16); strcpy(info_help,"P: Pause Game. --by hoodlum1980"); initgraph(&gdriver,&gmode,""); setcolor(BorderColor); for(i=0;i《=BoardWidth;i++) { line(BoardLeft+i*CellSize, BoardTop, BoardLeft+i*CellSize, BoardTop+ BoardHeight*CellSize); } for(i=0;i《=BoardHeight;i++) { line(BoardLeft, BoardTop+i*CellSize, BoardLeft+BoardWidth*CellSize, BoardTop+ i*CellSize); } /* draw board outer border rect */ rectangle(BoardLeft-CellSize/4, BoardTop-CellSize/4, BoardLeft+BoardWidth*CellSize+CellSize/4, BoardTop+BoardHeight*CellSize+CellSize/4); /* draw next block grids */ for(i=0;i《=4;i++) { line(NBBoardLeft+i*NBCellSize, NBBoardTop, NBBoardLeft+i*NBCellSize, NBBoardTop+4*NBCellSize); line(NBBoardLeft, NBBoardTop+i*NBCellSize, NBBoardLeft+4*NBCellSize, NBBoardTop+ i*NBCellSize); } /* draw score rect */ rectangle(ScoreBoardLeft,ScoreBoardTop,ScoreBoardLeft+ScoreBoardWidth,ScoreBoardTop+ScoreBoardHeight); DisplayScore(); /* set new seed! */ gettime(&sysTime); srand(sysTime.ti_hour*3600+sysTime.ti_min*60+sysTime.ti_sec); GenerateBlock(&nextBlock); NextBlock(); /* create first block */ setcolor(DARKGRAY); outtextxy(InfoLeft,InfoTop+20,"Up -rotate Space-drop"); outtextxy(InfoLeft,InfoTop+35,"Left-left Right-right"); outtextxy(InfoLeft,InfoTop+50,"Esc -exit"); DisplayInfo(info_help);}/* set the isFilled and fillcolor data to the board */void _INNER_HELPER FillBoardData(){ int i,j; for(i=0;i《curBlock.size;i++) { for(j=0;j《curBlock.size;j++) { if(curBlock.c && (curBlock.y+j)》=0) { Board=1; Board=curBlock.color; } } }}/* draw one line of the board */void _INNER_HELPER PaintBoard(){ int i,j,fillcolor; for(j=max((TopLine-4),0);j《BoardHeight;j++) { for(i=0;i《BoardWidth;i++) { fillcolor=Board:BkGndColor; setfillstyle(SOLID_FILL,fillcolor); floodfill(BoardLeft+i*CellSize+CellSize/2,BoardTop+j*CellSize+CellSize/2,BorderColor); } }}/* check if one line if filled full and increase the totalScore! */void _INNER_HELPER CheckBoard(){ int i,j,k,score=10,sum=0,topy,lines=0; /* we find the top empty line! */ j=topy=BoardHeight-1; do { sum=0; for(i=0;i《 BoardWidth; i++) { sum+=Board; } topy--; } while(sum》0 && topy》0); /* remove the full filled line (max remove lines count = 4) */ do { sum=0; for(i=0;i《 BoardWidth; i++) sum+=Board; if(sum==BoardWidth)/* we find this line is full filled, remove it! */ { /* move the cells data down one line */ for(k=j; k 》 topy;k--) { for(i=0;i《BoardWidth;i++) { Board; Board; } } /*make the top line empty! */ for(i=0;i《BoardWidth;i++) { Board=0; Board=0; } topy++; /* move the topline downward one line! */ lines++; /* lines 《=4 */ TotalScore+=score; score*=2; /* adding: 10, 30, 70, 150 */ } else j--; } while(sum》0 && j》topy && lines《4); /* speed up the game when score is high, minimum is 400 */ FrameTime=max(1200-100*(TotalScore/200), 400); TopLine=topy;/* update the top line */ /* if no lines remove, only add 1: */ if(lines==0) TotalScore++;}/* display the score */void _INNER_HELPER DisplayScore(){ setcolor(BkGndColor); outtextxy(ScoreBoardLeft+5,ScoreBoardTop+5,info_score); setcolor(ScoreColor); sprintf(info_score,"Score: %d",TotalScore); outtextxy(ScoreBoardLeft+5,ScoreBoardTop+5,info_score);}/* we call this function when a block is inactive. */void UpdateBoard(){ FillBoardData(); CheckBoard(); PaintBoard(); DisplayScore();}/* pause the game, and timer handler stop move down the block! */int PauseGame(){ int key=0; DisplayInfo("Press P to Start or Resume!"); while(key!=K_P && key!=K_ESC) { while(!(key=GetKeyCode())){} } DisplayInfo(info_help); return key;}/* quit the game and do cleaning work. */void QuitGame(){ closegraph();}/* the entry point function. */void main(){ int i,flag=1,j,key=0,tick=0; InitGame(); if(PauseGame()==K_ESC) goto GameOver; /* wait until a key pressed */ while(key!=K_ESC) { /* wait until a key pressed */ while(!(key=GetKeyCode())) { tick++; if(tick》=FrameTime) { /* our block has dead! (can’t move down), we get next block */ if(!MoveBlock(&curBlock,0,1)) { UpdateBoard(); NextBlock(); if(!CanMove(0,1)) goto GameOver; } tick=0; } delay(100); } switch(key) { case K_LEFT: MoveBlock(&curBlock,-1,0); break; case K_RIGHT: MoveBlock(&curBlock,1,0); break; case K_DOWN: MoveBlock(&curBlock,0,1); break; case K_UP: RotateBlock(&curBlock); break; case K_SPACE: DropBlock(&curBlock); break; case K_P: PauseGame(); break; } }GameOver: DisplayInfo("GAME OVER! Press any key to exit!"); getch(); /* wait the user Press any key. */ QuitGame();}

用c语言编写俄罗斯方块程序 求详解

1、用C语言绘制图形界面

***隐藏网址***

包含库#include 《graphics.h》

先初始化图形窗口

initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW_WIDTH为窗口的宽带,WINDOW_HIGH为窗口的高度。

清空绘图设备

cleardevice();

设置画笔颜色

setcolor(RED) ;

设置线条风格

setlinestyle(PS_SOLID, NULL, 0);

画矩形

rectangle

还有画线、显示文字等函数,可以参照其帮助文档。

注意:由于我们用的是EasyX图形库,故源文件后缀要为.cpp,但其中内容都是C的语法。

2、存储表示出俄罗斯方块的形状

一、我们可以用编号,不同的编号代表不同的俄罗斯方块,根据编号把不同方块的画法写在代码中,这样19种

方块就得有19种相应的代码来描绘。而且这样扩展性不好,若以后设计了新的方块,则需要更改大量源代码。

二、我们很自然的想到可用字模点阵的形式来表示,即设置一个4行4列的数组,元素置1即代表这个位置有小

方块,元素置0即代表这个位置无小方块,这个整个的4*4的数组组成俄罗斯方块的形状。

1000

1000

1100

0000

这个方法挺靠谱,但我们还可以优化一下:不用4*4的数组,而是用16个bit位来表示这个点阵。这样存储起来比较方便,故我们用unsigned int 的低16位来表示方块的点阵。

我们可以用掩码与表示俄罗斯方块的位进行操作,来识别并在屏幕上画出方块。

我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。

但这样做未免有点太费力,且扩展性也不太好,若以后设计的新方块种类加入,要改变数组rockArray中的值。

我们可以考虑把所有俄罗斯方块的点阵存储在配置文件中,在程序初始化时读取文件,把这些点阵转换成unsigned int的变量存储在rockArray中。

这样,以后我们增添新的方块形状只需要在配置文件中增加新的点阵即可。

@###

@###

@@##

####   (为使得看起来更醒目,我们用@表示1,用#表示0)

3、让图形动起来

在某位置处用函数DrawRock在屏幕上画出俄罗斯方块,然后再擦除掉(即用背景色在原位置处重绘一次方块),最后在下落的下一个位置处用函数DrawRock在屏幕上画出俄罗斯方块,如此循环,中间用计时器间隔一段时间以控制下落的速度。

同理,按下屏幕的左右键也是如此,只是在按下键盘时把方块的位置重新计算了。

那么按下上方向键时,如何让方块翻转呢?

我们在配置文件中就把方块的顺时针翻转形态放在了一起:

@###

@###

@@##

####

@@@#

@###

####

####

@@##

#@##

#@##

####

##@#

@@@#

####

####

我们每按一次上方向键改变一次方块的形状即可。若一直按上键,形状应该是循环地翻滚。

我们想到了循环链表的数据结构可实现这个效果。

可是我们若把这些一种类的方块的各种形态串成循环链表形式,那么每次重新生成方块时我们就难以随机地生成方块了。

故还是得用数组来存储,但又要有循环链表的功能,于是我们想到了静态循环链表。

我们用结构体来作为一个方块在rockArray中的元素

typedef struct ROCK

{  //用来表示方块的形状(每一个字节是8位,用每4位表示方块中的一行)

unsigned int rockShapeBits ; 

int          nextRockIndex ;  //下一个方块,在数组中的下标

} RockType ;

这样,当我们按下上方向键时,把传入函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。

找个VC++编写的DOS下的俄罗斯方块游戏源代码

/*这里有个C编的, 在TC下调试通过的,因为TC和VC的图形函数不一样 所以在VC下肯定运行不了, 但希望对你有些帮助。 */ #include 《graphics.h》 /*头文件*/ #include 《time.h》 #include 《stdlib.h》 #include 《bios.h》 #include 《dos.h》 #include 《stdio.h》 #define ESC 0x11b /*键盘扫描码*/ #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define F1 0x3b00 #define RIGHT 0x4d00 #define YES 0x1579 #define NO 0x316e #define RESTART 0x1372 /*****************************************************************************************/ struct diamond /*记录每种方块每种状态的信息*/ { int x; int y; int start_x; int start_y; int color; struct diamond *next; }; int grid; /*记录所有格子的状态 (0)没有方块 (1)有固定方块 (2)有活动方块*/ int x; /*活动方块所在位置*/ int y; int level; /*游戏难度*/ int count; /*计数器*/ int score;/*得分*/ struct diamond *nowinfo; /*当前活动方块*/ struct diamond *nextinfo; /*下一个方块*/ int color;/*画格子的颜色*/ int backcolor;/*游戏区域背景色*/ /*****************************************************************************************/ void show_interface (int mode);/*显示游戏界面*/ void show_copsign (int topx,int topy,int size,int color);/*显示公司标志--恒基伟业*/ void show_intro (int xs,int ys);/*显示软件介绍区*/ /*void print(); 测试用函数*/ void scandel();/*扫描所有格子看是否有可消除行*/ void show_down ();/*方块下落后的下一个状态*/ void show_next ();/*方块翻转后的下一个状态*/ void show_left ();/*方块向左移动后的下一个状态*/ void show_right ();/*方块向右移动后的下一个状态*/ void interrupt (*oldtimer)();/*指向未安装前的中断向量,即函数指针,指向一段可执行的代码*/ void install();/*安装新的中断向量,即将中断服务程序安装到中断向量表中*/ void interrupt newtimer();/*中断服务程序*/ struct diamond *get_diamond();/*随机得到一个方块*/ struct diamond *create_I();/*函数用来构造各种类形方块的环形链表*/ struct diamond *create_T();/*返回链表中随机一个状态的指针*/ struct diamond *create_L(); struct diamond *create_J(); struct diamond *create_Z(); struct diamond *create_N(); struct diamond *create_H(); void delinfo (struct diamond *info);/*释放当前方块所占用的空间*/ void addtobuffer(int c);/*向键盘缓冲区中增加一个DOWN*/ /*void clrkey();调用dos中断清空键盘缓冲区,未使用此方法.*/ void showsubwin(struct diamond *next);/*在小窗口显示下一个方块*/ void showscore(int scoreget);/*显示分数*/ void startset();/*初始化游戏*/ /*****************************************************************************************/ main () { int driver=VGA; int mode=VGAHI; int i;/*计数器*/ int j; int key;/*记录键盘扫描码*/ initgraph (&driver,&mode,"");/*初始化*/ color=8; backcolor=7; level=1; score=298; count=0; show_interface (9);/*显示界面*/ setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,"Press any key to start..."); getch(); setfillstyle(SOLID_FILL,9); bar(0,465,640,480); showscore(0);/*显示分数*/ randomize(); nowinfo=get_diamond ();/*得到一个当前方块*/ oldtimer=getvect(0x1c); install(newtimer); for(i=0;i《=21;i++)/*初始化grid*/ { for(j=1;j《=10;j++) grid=0; } for(i=0;i《=22;i++) { grid=1; grid=1; } for(i=0;i《=11;i++) { grid=1; } x=nowinfo-》start_x;/*初始化方块位置*/ y=nowinfo-》start_y; nextinfo=get_diamond ();/*得到下一个方块*/ showsubwin(nextinfo); for (;;) { key=bioskey(0);/*得到键盘扫描码*/ if (key) { switch(key) { case DOWN:{ show_down (); break; } case UP:{ show_next (); break; } case LEFT:{ show_left(); break; } case RIGHT:{ show_right(); break; } case RESTART:{ install(oldtimer); setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,"Are you sure to restart (Y/N)..."); for (;;) { key=bioskey(0);/*得到键盘扫描码*/ if (key==YES) { startset(); setfillstyle(SOLID_FILL,9); bar(0,465,640,480); break; } if (key==NO) { setfillstyle(SOLID_FILL,9); bar(0,465,640,480); install(newtimer); break; } } break; } /* case F1:{ print(); break; } */ case ESC:{ install(oldtimer); setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,"Are you sure to exit (Y/N)..."); for (;;) { key=bioskey(0);/*得到键盘扫描码*/ if (key==YES) { closegraph(); exit(0); } if (key==NO) { setfillstyle(SOLID_FILL,9); bar(0,465,640,480); install(newtimer); break; } } } } } } } /*******************/ struct diamond *get_diamond() { struct diamond *now; switch (random(7)+1) { case 1:{ now=create_I(); return now; } case 2:{ now=create_T(); return now; } case 3:{ now=create_L(); return now; } case 4:{ now=create_J(); return now; } case 5:{ now=create_Z(); return now; } case 6:{ now=create_N(); return now; } case 7:{ now=create_H(); return now; } } } /*****************/ void show_interface (int fill_mode) { int i; setbkcolor (9); setcolor (color); setfillstyle (SOLID_FILL,backcolor); bar (100,60,300,420); bar (360,60,440,140); rectangle (100,60,300,420); rectangle (96,56,304,424); rectangle (360,60,440,140); rectangle (356,56,444,144); setfillstyle (fill_mode,14); floodfill (97,57,color); floodfill (397,57,color); setcolor(1); rectangle(96,56,304,424); setcolor (color); for (i=80;i《=400;i+=20) { line (100,i,300,i); } for (i=120;i《=280;i+=20) { line (i,60,i,420); } for (i=80;i《=120;i+=20) { line (360,i,440,i); } for (i=380;i《=420;i+=20) { line (i,60,i,140); } show_intro (360,180); show_copsign (475,320,40,1); setfillstyle(SOLID_FILL,1); setcolor(14); rectangle(420,405,534,417); floodfill (421,406,14); outtextxy(422,408,"HI-TECH WEALTH"); } /******************/ void show_copsign (int topx,int topy,int size,int color) { int halfsize,qtrsize; int xadd,xdel,yadd1,yadd2; halfsize=0.5*size; qtrsize=0.25*size; xadd=topx+size; xdel=topx-size; yadd1=topy+size; yadd2=topy+2*size; setcolor(color); line (topx,topy,xdel,yadd1); line (xdel,yadd1,topx,yadd2); line (topx,yadd2,xadd,yadd1); line (xadd,yadd1,topx,topy); rectangle (topx-halfsize,topy+halfsize,topx+halfsize,yadd1+halfsize); setfillstyle (SOLID_FILL,color); floodfill (topx,topy+1,color); floodfill (xdel+1,yadd1,color); floodfill (topx,yadd2-1,color); floodfill (xadd-1,yadd1,color); rectangle (topx-halfsize,yadd1-qtrsize,topx-0.75*halfsize,yadd1+qtrsize); floodfill (topx-halfsize+1,yadd1-qtrsize+1,color); rectangle (topx-qtrsize,yadd1-halfsize,topx+qtrsize,yadd1-0.25*halfsize); floodfill (topx-qtrsize+1,yadd1-halfsize+1,color); rectangle (topx+0.75*halfsize,yadd1-qtrsize,topx+halfsize,yadd1+qtrsize); floodfill (topx+0.75*halfsize+1,yadd1-qtrsize+1,color); rectangle (topx-qtrsize,yadd1+0.25*halfsize,topx+qtrsize,yadd2-halfsize); floodfill (topx-qtrsize+1,yadd1+0.25*halfsize+1,color); setcolor(14); line (topx,topy-1,xdel-1,yadd1); line (xdel-1,yadd1,topx,yadd2+1); line (topx,yadd2+1,xadd+1,yadd1); line (xadd+1,yadd1,topx,topy-1); setfillstyle (SOLID_FILL,14); floodfill (topx,yadd1,color); } /*******************/ void show_intro (int xs,int ys) { char stemp; setcolor (15); rectangle(xs-3,ys-3,xs+239,ys+115); line (xs-3,ys+26,xs+239,ys+26); line (xs-3,ys+72,xs+239,ys+72); outtextxy(xs,ys,"Level:"); outtextxy(xs,ys+15,"Score:"); sprintf(stemp," -Roll -Downwards"); stemp=24; stemp=25; outtextxy(xs,ys+30,"Help:"); setcolor(14); outtextxy(xs+40,ys+30,stemp); outtextxy(xs+40,ys+45,"《-Turn Left 》-Turn Right"); outtextxy(xs+40,ys+60,"Esc-Exit R-Restart"); outtextxy(xs,ys+75,"Russia Diamonds Ver 1.0"); outtextxy(xs,ys+90,"CopyRight By ChangYong.01-11-1"); outtextxy(xs,ys+105,"Email:forever_chang@163.com"); } /*******************/ struct diamond *create_I() { struct diamond *info; struct diamond *first; first=(struct diamond *)malloc(sizeof(struct diamond)); info=(struct diamond *)malloc(sizeof(struct diamond)); first-》next=info; info-》next=first; first-》x=0; first-》y=0; first-》x=-1; first-》y=0; first-》x=1; first-》y=0; first-》x=2; first-》y=0; first-》start_x=5; first-》start_y=3; first-》color=2; info-》x=0; info-》y=0; info-》x=0; info-》y=-1; info-》x=0; info-》y=1; info-》x=0; info-》y=2; info-》start_x=5; info-》start_y=1; info-》color=2; if(random(2)==0) {return first;} else {return first-》next;} } /******************/ struct diamond *create_T() { struct diamond *info; struct diamond *first; struct diamond *last; int i; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=-1; info-》y=0; info-》x=0; info-》y=-1; info-》x=1; info-》y=0; info-》start_x=5; info-》start_y=3; info-》color=4; first=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=0; info-》y=1; info-》x=0; info-》y=-1; info-》x=1; info-》y=0; info-》start_x=5; info-》start_y=2; info-》color=4; last-》next=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=-1; info-》y=0; info-》x=1; info-》y=0; info-》x=0; info-》y=1; info-》start_x=5; info-》start_y=2; info-》color=4; last-》next=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=0; info-》y=1; info-》x=0; info-》y=-1; info-》x=-1; info-》y=0; info-》start_x=5; info-》start_y=2; info-》color=4; last-》next=info; last=info; last-》next=first; for (i=0;i《=random(4);i++) { first=first-》next; } return first; } /*******************/ struct diamond *create_L() { struct diamond *info; struct diamond *first; struct diamond *last; int i; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=0; info-》y=1; info-》x=0; info-》y=-1; info-》x=1; info-》y=1; info-》start_x=5; info-》start_y=2; info-》color=5; first=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=-1; info-》y=0; info-》x=1; info-》y=0; info-》x=-1; info-》y=1; info-》start_x=5; info-》start_y=2; info-》color=5; last-》next=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=0; info-》y=1; info-》x=0; info-》y=-1; info-》x=-1; info-》y=-1; info-》start_x=5; info-》start_y=2; info-》color=5; last-》next=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=-1; info-》y=0; info-》x=1; info-》y=0; info-》x=1; info-》y=-1; info-》start_x=5; info-》start_y=2; info-》color=5; last-》next=info; last=info; last-》next=first; for (i=0;i《=random(4);i++) { first=first-》next; } return first; } /*******************/ struct diamond *create_J() { struct diamond *info; struct diamond *first; struct diamond *last; int i; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=0; info-》y=1; info-》x=0; info-》y=-1; info-》x=-1; info-》y=1; info-》start_x=5; info-》start_y=2; info-》color=6; first=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=-1; info-》y=0; info-》x=1; info-》y=0; info-》x=-1; info-》y=-1; info-》start_x=5; info-》start_y=2; info-》color=6; last-》next=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=0; info-》y=1; info-》x=0; info-》y=-1; info-》x=1; info-》y=-1; info-》start_x=5; info-》start_y=2; info-》color=6; last-》next=info; last=info; info=(struct diamond *)malloc(sizeof(struct diamond)); info-》x=0; info-》y=0; info-》x=-1; info-》y=0; info-》x=1; info-》y=0; info-》x=1; info-》y=1; info-》start_x=5; info-》start_y=2; info-》color=6; last-》next=info; last=info; last-》next=first; for (i=0;i《=random(4);i++) { first=first-》next; } return first; } /********字数限制,一次发不完**********//*如果想要给我留言吧*/

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

俄罗斯方块——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 ; } //初始化屏幕,并将屏幕数组清零的方法 void initScr(){ for(int i=0;i《rowNum;i++) for (int j=0; j《columnNum;j++) scrArr=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); } //画方块的方法 public void drawUnit(int row,int col,int type){ scrArr = 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); } //返回新块的初始行坐标方法 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 == 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 == 0) drawUnit(k-1,j,0); else drawUnit(k-1,j,2); scrArr; } } for(int i = k-1 ;i 《 rowNum; i++){ for(int j = 0; j 《 columnNum; j++){ drawUnit(i,j,0); scrArr=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 !=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&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&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); } }

java编写的俄罗斯方块游戏

以下为一个俄罗斯方块的源代码,以---------线分隔一个类。 郁闷太长了,不能全部粘贴上来,要的话在线M我吧。import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.io.IOException; /** * 《p》Title: 俄罗斯方块《/p》 * * 《p》Description: 俄罗斯方块游戏《/p》 * * 《p》Copyright: Copyright (c) 2005《/p》 * * 《p》Company: Star Group《/p》 * * @author: Part of this programe comes from a open-source project in the Web(www.hyweb.net). * Our group makes some remakeble improvement to it. * @version 1.0 */ public class RussianGameMIDlet extends MIDlet { static RussianGameMIDlet instance; private UIController controller = new UIController(this); private Splash splash; private Image imgStart; Display display = null; public RussianGameMIDlet() { instance = this; display = Display.getDisplay(this); } public void startApp() { try { imgStart = Image.createImage("/start.png"); } catch (IOException e) { } StringBuffer infoStart = new StringBuffer("俄罗斯方块"); splash = new Splash(this.controller,infoStart, imgStart); controller.setSplash(splash); controller.handleEvent(UIController.EventID.EVENT_START_SPLASH); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public static void quitApp() { instance.destroyApp(true); instance.notifyDestroyed(); instance = null; } } --------------------------------------------------------------------------------------------------------------------------------------------

求用JAVA编写俄罗斯方块游戏的源代码

俄罗斯方块——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&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); } } 22

求大神给一份JAVA小游戏,贪吃蛇或者俄罗斯方块源代码my eclipse能直接打开运行的!

import javax.swing.*;import java.awt.*;import java.awt.event.*;class Game extends JFrame implements KeyListener,Runnable {Thread Down10 = new Thread(this);GameCanvas test = new GameCanvas();JLabel LabelTetris = new JLabel("Tetris Game");JLabel ScorePrint1 = new JLabel("Score");JLabel ScorePrint2 = new JLabel("0"+test.Score);Game(){setSize(400,800);setVisible(true);setLayout(new FlowLayout());test.addKeyListener(this);LabelTetris.setBackground(Color.white);LabelTetris.setFont((new Font("Tahoma",1,50)));ScorePrint1.setFont((new Font("Tahoma",1,40)));ScorePrint2.setBackground(Color.white);JLabel LM = new JLabel("L.M");ScorePrint2.setFont((new Font("Tahoma",1,40)));add(LabelTetris);add(test);add(ScorePrint1);add(ScorePrint2);LM.setForeground(Color.white);add(LM);validate();Down10.start(); } public void run() { while(true) { try { test.Down1(); Down10.sleep(700); } catch(InterruptedException I){I.printStackTrace();} } } public void keyPressed(KeyEvent K) { if(K.getKeyCode()==KeyEvent.VK_LEFT) test.Left1(); else if(K.getKeyCode()==KeyEvent.VK_UP) test.Turn(); else if(K.getKeyCode()==KeyEvent.VK_RIGHT) test.Right1(); else if(K.getKeyCode()==KeyEvent.VK_DOWN) { test.Down1(); if(test.ScoreBool==1) {ScorePrint2.setText(""+test.Score);} } } public void keyReleased(KeyEvent e){}public void keyTyped(KeyEvent e){}}class GameCanvas extends Canvas{int x=5,y=0;int GameMap;int BlockShape;int BlockWay;int Score=0;int ScoreBool=0;int OverBool=0;public final static int Blocks={{{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,0,0,0,1,0,0,0,1,0,0,0,1,0,0}}, {{0,1,1,0,1,1,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}, {0,1,1,0,1,1,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,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}, {0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0}}, {{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0}, {1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0}, {1,1,1,0,0,0,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,0}}, {{1,0,0,0,1,0,0,0,1,1,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}}, {{0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0}, {0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0}, {1,1,1,0,0,1,0,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}}};GameCanvas(){setSize(340,500);setBackground(Color.BLACK);for(int i=0;i《25;i++){ GameMap=2; GameMap=2;}for(int i=0;i《16;i++){ GameMap=2;}}public void NewBlocks(){x=5;y=0;BlockShape=(int)(Math.random()*6); BlockWay=(int)(Math.random()*3); if(IsOver(x,y)==true) {OverBool=1;}}public void Keep(int x,int y,int BlockShape,int BlockWay){int n=0;for(int i=0;i《4;i++)for(int j=0;j《4;j++){if(GameMap==0){GameMap;}n++;}}public void paint(Graphics G){G.setColor(Color.white);for(int i=0;i《16;i++){if(Blocks==1)G.drawRect((i%4+x+1)*20,(i/4+y)*20,20,20);}for(int i=0;i《30;i++)for(int j=0;j《50;j++)if(GameMap==2)G.fillRect(i*20,j*20,20,20);}public void Turn(){if(IsFeasible(x,y,BlockShape,BlockWay)==1){BlockWay=(BlockWay+1)%4;repaint(); }}public void Left1(){if(IsFeasible(x-1,y,BlockShape,BlockWay)==1){x-=1;repaint();}}public void Right1(){if(IsFeasible(x+1,y,BlockShape,BlockWay)==1){x+=1;repaint();}}public void Down1(){if(IsFeasible(x,y+1,BlockShape,BlockWay)==1){y+=1;repaint();}else if(IsFeasible(x,y+1,BlockShape,BlockWay)==0){Keep(x,y,BlockShape,BlockWay);Deline();if(OverBool==0)NewBlocks();}}public int IsFeasible(int x,int y,int BlockShape,int BlockWay){for(int i=0;i《4;i++){for(int j=0;j《4;j++){if(Blocks==1)return 0;else if(Blocks==2)return 0; }}return 1;}public void Deline(){ int BlocksSum = 0; for(int i=0;i《25;i++) { for(int j=0;j《16;j++) { if (GameMap==1) { BlocksSum++; if (BlocksSum==15) { for(int p=i;p》0;p--) { for(int q=0;q《16;q++) { GameMap; } } Score+=10; ScoreBool=1; } } } BlocksSum = 0; } } public boolean IsOver(int x,int y) { if(IsFeasible(x,y,BlockShape,BlockWay)==0) return true; else return false; }}public class Tetris{public static void main(String args){Game test2 = new Game();}}拿去玩 JAVA新建文件命名为 Tetris 以前写的 懒得布置界面

俄罗斯方块的c语言源代码 api实现的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于俄罗斯方块的c语言源代码 api实现、俄罗斯方块的c语言源代码 api实现的信息别忘了在本站进行查找哦。

俄罗斯方块小游戏代码(俄罗斯方块的c语言源代码  api实现)

本文编辑:admin

本文相关文章:


俄罗斯方块1010版(有一款App游戏类似于俄罗斯方块的玩法但他是三个一竖条下来然后三个一样的形状才会消除然后有)

俄罗斯方块1010版(有一款App游戏类似于俄罗斯方块的玩法但他是三个一竖条下来然后三个一样的形状才会消除然后有)

“俄罗斯方块1010版”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看俄罗斯方块1010版(有一款App游戏类似于俄罗斯方块的玩法但他是三个一竖条下来然后三个一样的形状才会消除然后有)!本文目录有一款App游戏类似于俄罗斯方

2024年9月2日 23:33

彩色砖块消消看(QQ空间应用“彩色方块”怎么玩)

彩色砖块消消看(QQ空间应用“彩色方块”怎么玩)

大家好,如果您还对彩色砖块消消看不太了解,没有关系,今天就由本站为大家分享彩色砖块消消看的知识,包括QQ空间应用“彩色方块”怎么玩的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录QQ空间应用“彩色方块”怎么玩以前玩

2024年8月27日 13:03

俄罗斯方块完美版(《魔法气泡俄罗斯方块2》从入门到精通 俄罗斯方块的正确玩法)

俄罗斯方块完美版(《魔法气泡俄罗斯方块2》从入门到精通 俄罗斯方块的正确玩法)

各位老铁们好,相信很多人对俄罗斯方块完美版都不是特别的了解,因此呢,今天就来为大家分享下关于俄罗斯方块完美版以及《魔法气泡俄罗斯方块2》从入门到精通 俄罗斯方块的正确玩法的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本

2024年8月20日 05:15

方块连连看免费下载游戏(方块消灭员游戏安卓游戏官方下载)

方块连连看免费下载游戏(方块消灭员游戏安卓游戏官方下载)

这篇文章给大家聊聊关于方块连连看免费下载游戏,以及方块消灭员游戏安卓游戏官方下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录方块消灭员游戏安卓游戏官方下载好玩的连连看手游如何下载方块消灭员游戏安卓游戏官方下载***隐藏网址

2024年8月11日 03:15

儿童方块拼图游戏(方块拼图游戏大全)

儿童方块拼图游戏(方块拼图游戏大全)

大家好,关于儿童方块拼图游戏很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于方块拼图游戏大全的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录方块拼图游戏

2024年8月11日 00:51

超级方块游戏(超级街霸方块2怎么选隐藏人物(街机版)游戏秘籍攻略)

超级方块游戏(超级街霸方块2怎么选隐藏人物(街机版)游戏秘籍攻略)

大家好,如果您还对超级方块游戏不太了解,没有关系,今天就由本站为大家分享超级方块游戏的知识,包括超级街霸方块2怎么选隐藏人物(街机版)游戏秘籍攻略的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录超级街霸方块2怎么选

2024年8月4日 16:39

方块消消消红包版下载(方块碰撞消消消红包版高速下载)

方块消消消红包版下载(方块碰撞消消消红包版高速下载)

本篇文章给大家谈谈方块消消消红包版下载,以及方块碰撞消消消红包版高速下载对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录方块碰撞消消消红包版

2024年8月3日 12:00

俄罗斯方块正版(俄罗斯方块闯关,俄罗斯方块环游记)

俄罗斯方块正版(俄罗斯方块闯关,俄罗斯方块环游记)

“俄罗斯方块正版”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看俄罗斯方块正版(俄罗斯方块闯关,俄罗斯方块环游记)!本文目录俄罗斯方块闯关,俄罗斯方块环游记哪里能玩多人俄罗斯方块俄罗斯方块官方正版下载如何下载正版俄罗斯方块免

2024年8月2日 18:21

龙腾世纪2字幕(龙腾世纪汉化字幕后标点全是方块,看着很不舒服,求解决)

龙腾世纪2字幕(龙腾世纪汉化字幕后标点全是方块,看着很不舒服,求解决)

“龙腾世纪2字幕”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看龙腾世纪2字幕(龙腾世纪汉化字幕后标点全是方块,看着很不舒服,求解决)!本文目录龙腾世纪汉化字幕后标点全是方块,看着很不舒服,求解决龙腾世纪审判字幕时有时无龙腾

2024年7月21日 08:46

方块方舟手机版下载(方块方舟石油怎么获得)

方块方舟手机版下载(方块方舟石油怎么获得)

其实方块方舟手机版下载的问题并不复杂,但是又很多的朋友都不太了解方块方舟石油怎么获得,因此呢,今天小编就来为大家分享方块方舟手机版下载的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录方块方舟石油怎么获得方舟方块世

2024年7月21日 02:21

俄罗斯方块消消消新版(俄罗斯方块消消消新版如何下载)

俄罗斯方块消消消新版(俄罗斯方块消消消新版如何下载)

大家好,今天小编来为大家解答以下的问题,关于俄罗斯方块消消消新版,俄罗斯方块消消消新版如何下载这个很多人还不知道,现在让我们一起来看看吧!本文目录俄罗斯方块消消消新版如何下载俄罗斯消消消安卓版如何下载俄罗斯方块消消消新版如何下载***隐藏网

2024年7月20日 20:21

方块游戏平台打不开(方块游戏平台怎么都是黑屏)

方块游戏平台打不开(方块游戏平台怎么都是黑屏)

大家好,方块游戏平台打不开相信很多的网友都不是很明白,包括方块游戏平台怎么都是黑屏也是一样,不过没有关系,接下来就来为大家分享关于方块游戏平台打不开和方块游戏平台怎么都是黑屏的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧

2024年7月20日 10:21

俄罗斯方块1代(JAVA俄罗斯方块,里面的数字0,1分别代表什么意思 看不懂啊.)

俄罗斯方块1代(JAVA俄罗斯方块,里面的数字0,1分别代表什么意思 看不懂啊.)

“俄罗斯方块1代”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看俄罗斯方块1代(JAVA俄罗斯方块,里面的数字0,1分别代表什么意思 看不懂啊.)!本文目录JAVA俄罗斯方块,里面的数字0,1分别代表什么意思 看不懂啊.问一

2024年7月20日 05:09

我的世界紫水晶方块能种在陆地上吗?透明胶水可以做水晶方块吗

我的世界紫水晶方块能种在陆地上吗?透明胶水可以做水晶方块吗

各位老铁们好,相信很多人对水晶方块都不是特别的了解,因此呢,今天就来为大家分享下关于水晶方块以及我的世界紫水晶方块能种在陆地上吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录我的世界紫水晶方块能种在陆地上吗透明

2024年7月18日 18:12

俄罗斯方块游戏机怎么调模式(5元一个的俄罗斯方块游戏机怎么切换隐藏模式)

俄罗斯方块游戏机怎么调模式(5元一个的俄罗斯方块游戏机怎么切换隐藏模式)

“俄罗斯方块游戏机怎么调模式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看俄罗斯方块游戏机怎么调模式(5元一个的俄罗斯方块游戏机怎么切换隐藏模式)!本文目录5元一个的俄罗斯方块游戏机怎么切换隐藏模式俄罗斯方块游戏机怎样打开

2024年7月12日 05:21

qq俄罗斯方块加速器(谁有QQ游戏俄罗斯方块的加速器啊)

qq俄罗斯方块加速器(谁有QQ游戏俄罗斯方块的加速器啊)

这篇文章给大家聊聊关于qq俄罗斯方块加速器,以及谁有QQ游戏俄罗斯方块的加速器啊对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录谁有QQ游戏俄罗斯方块的加速器啊QQ俄罗斯方块加速器调速问题急求QQ游戏俄罗斯方块加速器qq俄罗斯

2024年6月23日 18:36

显示器有移动小方块怎么办?Unity中,做一个通过转动来移动的方块

显示器有移动小方块怎么办?Unity中,做一个通过转动来移动的方块

大家好,方块移动相信很多的网友都不是很明白,包括显示器有移动小方块怎么办也是一样,不过没有关系,接下来就来为大家分享关于方块移动和显示器有移动小方块怎么办的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录显示器有移

2024年6月20日 02:48

逃离方块攻略(逃离方块生日通关详解攻略第五部分5)

逃离方块攻略(逃离方块生日通关详解攻略第五部分5)

大家好,今天小编来为大家解答以下的问题,关于逃离方块攻略,逃离方块生日通关详解攻略第五部分5这个很多人还不知道,现在让我们一起来看看吧!本文目录逃离方块生日通关详解攻略第五部分5逃离方块锈湖根源第23关攻略逃离方块案件23第三章节通关详解攻

2024年6月18日 15:15

我的世界方块种类有哪些?方块指的是什么图形

我的世界方块种类有哪些?方块指的是什么图形

“方块”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看我的世界方块种类有哪些?方块指的是什么图形!本文目录我的世界方块种类有哪些方块指的是什么图形方块的拼音方块怎么画方块怎么打 黑方块怎么打出来我的世界方块怎么画在电脑上打方

2024年6月14日 03:28

方块爱消除3d下载(方块大冒险百度版安卓游戏如何下载)

方块爱消除3d下载(方块大冒险百度版安卓游戏如何下载)

大家好,方块爱消除3d下载相信很多的网友都不是很明白,包括方块大冒险百度版安卓游戏如何下载也是一样,不过没有关系,接下来就来为大家分享关于方块爱消除3d下载和方块大冒险百度版安卓游戏如何下载的一些知识点,大家可以关注收藏,免得下次来找不到哦

2024年6月9日 05:27

更多文章:


游戏里面999是什么意思?999的游戏视频

游戏里面999是什么意思?999的游戏视频

其实游戏999的问题并不复杂,但是又很多的朋友都不太了解游戏里面999是什么意思,因此呢,今天小编就来为大家分享游戏999的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录游戏里面999是什么意思999的游戏视频电

2024年3月27日 11:15

暗黑之门伦敦中文版(暗黑之门-伦敦中文版)

暗黑之门伦敦中文版(暗黑之门-伦敦中文版)

大家好,如果您还对暗黑之门伦敦中文版不太了解,没有关系,今天就由本站为大家分享暗黑之门伦敦中文版的知识,包括暗黑之门-伦敦中文版的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录暗黑之门-伦敦中文版急:暗黑之门:伦敦

2024年6月9日 22:54

qq象棋游戏大厅手机版下载(qq国际象棋安卓游戏官方下载)

qq象棋游戏大厅手机版下载(qq国际象棋安卓游戏官方下载)

其实qq象棋游戏大厅手机版下载的问题并不复杂,但是又很多的朋友都不太了解qq国际象棋安卓游戏官方下载,因此呢,今天小编就来为大家分享qq象棋游戏大厅手机版下载的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录qq国

2024年5月19日 09:37

热血三国合城爵位(热血三国爵位从右庶长到右更需要多少珠宝黄金)

热血三国合城爵位(热血三国爵位从右庶长到右更需要多少珠宝黄金)

这篇文章给大家聊聊关于热血三国合城爵位,以及热血三国爵位从右庶长到右更需要多少珠宝黄金对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录热血三国爵位从右庶长到右更需要多少珠宝黄金热血三国爵位,官位升级所需要求以及统治城池总数热血

2024年5月31日 15:36

神墓OL是PC游戏还是手机游戏?他们在游戏中的样子 《神墓OL》名人形象大揭密

神墓OL是PC游戏还是手机游戏?他们在游戏中的样子 《神墓OL》名人形象大揭密

大家好,如果您还对神墓游戏不太了解,没有关系,今天就由本站为大家分享神墓游戏的知识,包括神墓OL是PC游戏还是手机游戏的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录神墓OL是PC游戏还是手机游戏他们在游戏中的样子

2024年5月17日 15:07

剑落星辰刺影天赋加点顺序?剑落星辰兑换码大全

剑落星辰刺影天赋加点顺序?剑落星辰兑换码大全

其实剑落星辰的问题并不复杂,但是又很多的朋友都不太了解剑落星辰刺影天赋加点顺序,因此呢,今天小编就来为大家分享剑落星辰的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录剑落星辰刺影天赋加点顺序剑落星辰兑换码大全剑落

2024年9月5日 19:03

曾经玩过一个坦克的单机版游戏,那时候是在网吧里面玩的,里面有几个大关,场景比较真实,求名字下载?清代士兵的兵器秘籍

曾经玩过一个坦克的单机版游戏,那时候是在网吧里面玩的,里面有几个大关,场景比较真实,求名字下载?清代士兵的兵器秘籍

其实重装兵器的问题并不复杂,但是又很多的朋友都不太了解曾经玩过一个坦克的单机版游戏,那时候是在网吧里面玩的,里面有几个大关,场景比较真实,求名字下载,因此呢,今天小编就来为大家分享重装兵器的一些知识,希望可以帮助到大家,下面我们一起来看看这

2024年7月23日 08:00

3drpg游戏(ps4支持3d电视的游戏都有什么)

3drpg游戏(ps4支持3d电视的游戏都有什么)

各位老铁们,大家好,今天由我来为大家分享3drpg游戏,以及ps4支持3d电视的游戏都有什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录ps4支

2024年5月28日 09:49

凡人修真2宝石攻略(凡人修真2的特色玩法)

凡人修真2宝石攻略(凡人修真2的特色玩法)

大家好,如果您还对凡人修真2宝石攻略不太了解,没有关系,今天就由本站为大家分享凡人修真2宝石攻略的知识,包括凡人修真2的特色玩法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录凡人修真2的特色玩法凡人修真2宝石淬炼

2024年6月30日 01:00

火影忍者宇智波鼬(火影里鼬的结局是什么)

火影忍者宇智波鼬(火影里鼬的结局是什么)

大家好,如果您还对火影忍者宇智波鼬不太了解,没有关系,今天就由本站为大家分享火影忍者宇智波鼬的知识,包括火影里鼬的结局是什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录火影里鼬的结局是什么火影忍者中鼬的实力分析

2024年8月7日 20:00

佐助千鸟图片(如果佐助用千鸟接风遁螺旋丸,结果就是手受伤吗)

佐助千鸟图片(如果佐助用千鸟接风遁螺旋丸,结果就是手受伤吗)

本篇文章给大家谈谈佐助千鸟图片,以及如果佐助用千鸟接风遁螺旋丸,结果就是手受伤吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录如果佐助用千

2024年5月24日 21:05

魏蜀吴三国最后谁赢了(三国演义最后哪国胜)

魏蜀吴三国最后谁赢了(三国演义最后哪国胜)

本篇文章给大家谈谈魏蜀吴三国最后谁赢了,以及三国演义最后哪国胜对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录三国演义最后哪国胜魏蜀吴三国最

2024年8月21日 16:09

真三国无双3隐藏人物(真三国无双8帝国隐藏武将在哪)

真三国无双3隐藏人物(真三国无双8帝国隐藏武将在哪)

大家好,今天小编来为大家解答以下的问题,关于真三国无双3隐藏人物,真三国无双8帝国隐藏武将在哪这个很多人还不知道,现在让我们一起来看看吧!本文目录真三国无双8帝国隐藏武将在哪真三国无双里的隐藏人物有哪些真·三国无双联合突袭2 隐藏角色如何获

2024年8月12日 20:03

创世纪1中最后叶荣添、马志强、许文彪三人结局如何?方舟创世纪1方舟在哪

创世纪1中最后叶荣添、马志强、许文彪三人结局如何?方舟创世纪1方舟在哪

“创世纪1”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看创世纪1中最后叶荣添、马志强、许文彪三人结局如何?方舟创世纪1方舟在哪!本文目录创世纪1中最后叶荣添、马志强、许文彪三人结局如何方舟创世纪1方舟在哪方舟生存进化创世纪

2024年5月15日 13:28

征服三国从蔡文姬开始(三国志战略版许褚蔡文姬能开荒吗)

征服三国从蔡文姬开始(三国志战略版许褚蔡文姬能开荒吗)

这篇文章给大家聊聊关于征服三国从蔡文姬开始,以及三国志战略版许褚蔡文姬能开荒吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录三国志战略版许褚蔡文姬能开荒吗三国志战略版蔡文姬怎么样三国志幻想大陆蔡文姬怎么搭配三国志战略版蔡文姬

2024年2月13日 06:05

csgo无法连接任意官方服务器(cs连接至任意官方服务器失败)

csgo无法连接任意官方服务器(cs连接至任意官方服务器失败)

各位老铁们好,相信很多人对csgo无法连接任意官方服务器都不是特别的了解,因此呢,今天就来为大家分享下关于csgo无法连接任意官方服务器以及cs连接至任意官方服务器失败的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文

2024年9月5日 07:09

补肾壮阳吃什么药效果好(男人吃什么药补肾补精才管用啊)

补肾壮阳吃什么药效果好(男人吃什么药补肾补精才管用啊)

本篇文章给大家谈谈补肾壮阳吃什么药效果好,以及男人吃什么药补肾补精才管用啊对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录男人吃什么药补肾补

2024年6月4日 04:56

饺找出14个字(汉字找茬王饺找出14个字)

饺找出14个字(汉字找茬王饺找出14个字)

大家好,关于饺找出14个字很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于汉字找茬王饺找出14个字的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录汉字找

2024年5月12日 09:43

龙之幻想手游游戏攻略?龙之信条steam叫什么

龙之幻想手游游戏攻略?龙之信条steam叫什么

本篇文章给大家谈谈龙之游戏,以及龙之幻想手游游戏攻略对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录龙之幻想手游游戏攻略龙之信条steam叫

2024年5月10日 14:57

17hfcn幻想三国官网下载最新版(请问《幻想三国志》的下载地址)

17hfcn幻想三国官网下载最新版(请问《幻想三国志》的下载地址)

本篇文章给大家谈谈17hfcn幻想三国官网下载最新版,以及请问《幻想三国志》的下载地址对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录请问《

2024年8月15日 16:09

近期文章

本站热文

标签列表

热门搜索