求C++俄罗斯方块程序

求C++俄罗斯方块程序,第1张

/*俄罗斯方块中文版小游戏测试代码*/(本软件由VC++和VC#高级启举代码编写,这是我无聊写的你看看用吧应该可以用!)

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#include <graphics.h>

#include <stdlib.h>

#ifdef __cplusplus

#define __CPPARGS ...

#else

#define __CPPARGS

#endif

#define MINBOXSIZE 15 /* 最小方块的尺寸 */

#define BGCOLOR 7 /* 背景着色 */

#define GX 200

#define GY 10

#define SJNUM 10000 /* 每当玩家打到一万分等级加一级*/(当最高级到9时停止增加速度)

/* 按键码*/

#define VK_LEFT 0x4b00

#define VK_RIGHT 0x4d00

#define VK_DOWN 0x5000

#define VK_UP 0x4800

#define VK_HOME 0x4700

#define VK_END 0x4f00

#define VK_SPACE 0x3920

#define VK_ESC 0x011b

#define VK_ENTER 0x1c0d

/* 定义俄罗斯方块的方向*/

#define F_DONG 0

#define F_NAN 1

#define F_XI 2

#define F_BEI 3

#define NEXTCOL 20 /* 要出的下一个方块的纵坐圆汪标*/

#define NEXTROW 12 /* 要出的下一个方块的横从标悄腔碧*/

#define MAXROW 14 /* 游戏屏幕大小*/

#define MAXCOL 20

#define SCCOL 100 /*游戏屏幕大显示器上的相对位置*/

#define SCROW 60

int gril[22][16]/* 游戏屏幕坐标*/

int col=1,row=7/* 当前方块的横纵坐标*/

int boxfx=0,boxgs=0/* 当前寺块的形壮和方向*/

int nextboxfx=0,nextboxgs=0,maxcol=22/*下一个方块的形壮和方向*/

int minboxcolor=6,nextminboxcolor=6

int num=0/*游戏分*/

int dj=0,gamedj[10]={18,16,14,12,10,8,6,4,2,1}/* 游戏等级*/(最高18倍速度下落)

/* 以下用一个3维数组来纪录方块的最初形状和方向*/

int boxstr[7][4][16]={

{

{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,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,0,0,0,1,0,0,0,0,0,0},

{1,1,1,0,1,0,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},

{0,0,1,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,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},

{1,1,1,0,0,0,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,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}

},

{

{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,0,1,1,1,0,0,1,0,0,0,0,0,0},

{1,0,0,0,1,1,0,0,1,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}

}

}

/* 随机得到当前方块和下一个方块的形状和方向*/

void boxrad(){

minboxcolor=nextminboxcolor

boxgs=nextboxgs

boxfx=nextboxfx

nextminboxcolor=random(14)+1

if(nextminboxcolor==4||nextminboxcolor==7||nextminboxcolor==8)

nextminboxcolor=9

nextboxfx=F_DONG

nextboxgs=random(7)

}

/*初始化图形模试*/

void init(int gdrive,int gmode){

int errorcode

initgraph(&gdrive,&gmode,"D:\\tc\\")

errorcode=graphresult()

if(errorcode!=grOk){

printf("error of: %s",grapherrormsg(errorcode))

exit(1)

}

}

/* 在图形模式下的清屏 */

void cls()

{

setfillstyle(SOLID_FILL,0)

setcolor(0)

bar(0,0,640,480)

}

/*在图形模式下的高级清屏*/

void clscr(int a,int b,int c,int d,int color){

setfillstyle(SOLID_FILL,color)

setcolor(color)

bar(a,b,c,d)

}

/*最小方块的绘制*/

void minbox(int asc,int bsc,int color,int bdcolor){

int a=0,b=0

a=SCCOL+asc

b=SCROW+bsc

clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color)

if(color!=BGCOLOR){

setcolor(bdcolor)

line(a+1,b+1,a-1+MINBOXSIZE,b+1)

line(a+1,b+1,a+1,b-1+MINBOXSIZE)

line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE)

line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE)

}

}

/*游戏中出现的文字*/

void txt(int a,int b,char *txt,int font,int color){

setcolor(color)

settextstyle(0,0,font)

outtextxy(a,b,txt)

}

/*windows 绘制*/

void win(int a,int b,int c,int d,int bgcolor,int bordercolor){

clscr(a,b,c,d,bgcolor)

setcolor(bordercolor)

line(a,b,c,b)

line(a,b,a,d)

line(a,d,c,d)

line(c,b,c,d)

}

/* 当前方块的绘制*/

void funbox(int a,int b,int color,int bdcolor){

int i,j

int boxz[4][4]

for(i=0i<16i++)

boxz[i/4][i%4]=boxstr[boxgs][boxfx][i]

for(i=0i<4i++)

for(j=0j<4j++)

if(boxz[i][j]==1)

minbox((j+row+a)*MINBOXSIZE,(i+col+b)*MINBOXSIZE,color,bdcolor)

}

/*下一个方块的绘制*/

void nextfunbox(int a,int b,int color,int bdcolor){

int i,j

int boxz[4][4]

for(i=0i<16i++)

boxz[i/4][i%4]=boxstr[nextboxgs][nextboxfx][i]

for(i=0i<4i++)

for(j=0j<4j++)

if(boxz[i][j]==1)

minbox((j+a)*MINBOXSIZE,(i+b)*MINBOXSIZE,color,bdcolor)

}

/*时间中断定义*/

#define TIMER 0x1c

int TimerCounter=0

void interrupt ( *oldhandler)(__CPPARGS)

void interrupt newhandler(__CPPARGS){

TimerCounter++

oldhandler()

}

void SetTimer(void interrupt (*IntProc)(__CPPARGS)){

oldhandler=getvect(TIMER)

disable()

setvect(TIMER,IntProc)

enable()

}

/*由于游戏的规则,消掉都有最小方块的一行*/

void delcol(int a){

int i,j

for(i=ai>1i--)

for(j=1j<15j++){

minbox(j*MINBOXSIZE,i*MINBOXSIZE,BGCOLOR,BGCOLOR)

gril[i][j]=gril[i-1][j]

if(gril[i][j]==1)

minbox(j*MINBOXSIZE,i*MINBOXSIZE,minboxcolor,0)

}

}

/*消掉所有都有最小方块的行*/

void delete(){

int i,j,zero,delgx=0

char *nm="00000"

for(i=1i<21i++){

zero=0

for(j=1j<15j++)

if(gril[i][j]==0)

zero=1

if(zero==0){

delcol(i)

delgx++

}

}

num=num+delgx*delgx*10

dj=num/10000

sprintf(nm,"%d",num)

clscr(456,173,500,200,4)

txt(456,173,"Number:",1,15)

txt(456,193,nm,1,15)

}

/*时间中断结束*/

void KillTimer(){

disable()

setvect(TIMER,oldhandler)

enable()

}

/* 测试当前方块是否可以向下落*/

int downok(){

int i,j,k=1,a[4][4]

for(i=0i<16i++)

a[i/4][i%4]=boxstr[boxgs][boxfx][i]

for(i=0i<4i++)

for(j=0j<4j++)

if(a[i][j] &&gril[col+i+1][row+j])

k=0

return(k)

}

/* 测试当前方块是否可以向左行*/

int leftok(){

int i,j,k=1,a[4][4]

for(i=0i<16i++)

a[i/4][i%4]=boxstr[boxgs][boxfx][i]

for(i=0i<4i++)

for(j=0j<4j++)

if(a[i][j] &&gril[col+i][row+j-1])

k=0

return(k)

}

/* 测试当前方块是否可以向右行*/

int rightok(){

int i,j,k=1,a[4][4]

for(i=0i<16i++)

a[i/4][i%4]=boxstr[boxgs][boxfx][i]

for(i=0i<4i++)

for(j=0j<4j++)

if(a[i][j] &&gril[col+i][row+j+1])

k=0

return(k)

}

/* 测试当前方块是否可以变形*/

int upok(){

int i,j,k=1,a[4][4]

for(i=0i<4i++)

for(i=0i<16i++)

a[i/4][i%4]=boxstr[boxgs][boxfx+1][i]

for(i=3i>=0i--)

for(j=3j>=0j--)

if(a[i][j] &&gril[col+i][row+j])

k=0

return(k)

}

/*当前方块落下之后,给屏幕坐标作标记*/

void setgril(){

int i,j,a[4][4]

funbox(0,0,minboxcolor,0)

for(i=0i<16i++)

a[i/4][i%4]=boxstr[boxgs][boxfx][i]

for(i=0i<4i++)

for(j=0j<4j++)

if(a[i][j])

gril[col+i][row+j]=1

col=1row=7

}

/*游戏结束*/

void gameover(){

int i,j

for(i=20i>0i--)

for(j=1j<15j++)

minbox(j*MINBOXSIZE,i*MINBOXSIZE,2,0)

txt(103,203,"Game Over",3,10)

}

/*按键的设置*/

void call_key(int keyx){

switch(keyx){

case VK_DOWN: { /*下方向键,横坐标加一。*/

if(downok()){

col++

funbox(0,0,minboxcolor,0)}

else{

funbox(0,0,minboxcolor,0)

setgril()

nextfunbox(NEXTCOL,NEXTROW,4,4)

boxrad()

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0)

delete()

}

break

}

case VK_UP: { /*上方向键,方向形状旋转90度*/

if(upok())

boxfx++

if(boxfx>3)

boxfx=0

funbox(0,0,minboxcolor,0)

break

}

case VK_LEFT:{ /*左方向键,纵坐标减一*/

if(leftok())

row--

funbox(0,0,minboxcolor,0)

break

}

case VK_RIGHT:{ /*右方向键,纵坐标加一*/

if(rightok())

row++

funbox(0,0,minboxcolor,0)

break

}

case VK_SPACE: /*空格键,直接落到最后可以落到的们置*/

while(downok())

col++

funbox(0,0,minboxcolor,0)

setgril()

nextfunbox(NEXTCOL,NEXTROW,4,4)

boxrad()

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0)

delete()

break

default:

{

txt(423,53,"worng key!",1,4)

txt(428,80,"Plese Enter Anly Key AG!",1,4)

getch()

clscr(420,50,622,97,BGCOLOR)

}

}

}

/*时间中断开始*/(接连关系格式)

void timezd(void){

int key

SetTimer(newhandler)

boxrad()

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0)

for(){

if(bioskey(1)){

key=bioskey(0)

funbox(0,0,BGCOLOR,BGCOLOR)

if(key==VK_ESC)

break

call_key(key)

}

if(TimerCounter>gamedj[dj]){

TimerCounter=0

if(downok()){

funbox(0,0,BGCOLOR,BGCOLOR)

col++

funbox(0,0,minboxcolor,0)

}

else {

if(col==1){

gameover()

getch()

break

}

setgril()

delete()

funbox(0,0,minboxcolor,0)

col=1row=7

funbox(0,0,BGCOLOR,BGCOLOR)

nextfunbox(NEXTCOL,NEXTROW,4,4)

boxrad()

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0)

}

}

}

}

/*主程序开始*/

void main(void){

int i,j

char *nm="00000"

init(VGA,VGAHI)

cls()

printf("d%==ij-1欢迎进入个人最新版俄罗斯方块中文测试版,欢迎大家多多提取建议!!n=t-1作者:*董彦宏*!")

printf("{[i=6i+1i++]

[j=12j+1j--]

* * * ** * * * *}ij")

/*屏幕坐标初始化*/(最大支持1024*768)

for(i=0i<=MAXCOL+1i++)

for(j=0j<=MAXROW+1j++)

gril[i][j]=0

for(i=0i<=MAXCOL+1i++) {

gril[i][0]=1

gril[i][15]=1

}

for(j=1j<=MAXROWj++){

gril[0][j]=1

gril[21][j]=1

}

{vioct[i=1i<=12i++]

{[j=2j<=56J--]

}

}

clscr(0,0,640,480,15)

win(1,1,639,479,4,15)

win(SCCOL+MINBOXSIZE-2,SCROW+MINBOXSIZE-2,SCCOL+15*MINBOXSIZE+2,SCROW+21*MINBOXSIZE+2,BGCOLOR,0)

nextboxgs=random(8)

nextboxfx=random(4)

sprintf(nm,"%d",num)

txt(456,173,"Number:",1,15)

txt(456,193,nm,1,15)

txt(456,243,"Next Box:",1,15)

timezd()

KillTimer()

closegraph()

}

俄罗斯方块C源代码

#include <stdio.h>

#include <windows.h>

#include <conio.h>

#include <time.h>

#define  ZL  4     //坐标增量, 不使游戏窗口靠边

#define WID  36    //游戏窗口的宽度

#define HEI  20    //游戏窗口的高度

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

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

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

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

int flag,next  //当前要 *** 作的方块类型序号,下一个方块类型序号

void gtxy(int m, int n)  //以下声明要用到的自编函数

void gflag( )  //获得下一方块序号

void csh( )  //初始化界面

void start( )  //开始部分

void prfk ( )  //打印方块

void clfk( )  //清除方块

void mkfk( )  //制作方块

void keyD( )  //按键 *** 作

int  ifmov( )  //判断方块能否移动或变体

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

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

int main( )

csh( )

while(1)

   {start( )  //开始部分

     while(1)

     { prfk( )  

         Sleep(speed)  //延时

        clfk( )

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

        keyD( ) 

          y++     //方块向下移动

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

     }

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

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

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

  }

return 0

}

void gtxy(int m, int n)  //控制光标移动

{COORD pos  //定伍册义变量

pos.X = m  //横坐标

pos.Y = n   //纵坐标

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos)

}

void csh( )    //初始化界面

{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=2i<WID-2i+=2) {gtxy(ZL+i,ZL) 让橘顷 printf("═") }  //打印上横框

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

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

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

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

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info)

level=1 score=0 speed=400

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

}

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

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

void start( )  //开始部分

{ 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赋值

}

void prfk ( )  //打印俄罗斯方块

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

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

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

{ for(j=y-2j<= y+1j++) { 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)

}

void clfk( )  //清除俄罗斯方块

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

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

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

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

}

void keyD( )  //按键 *** 作

{ if (kbhit( ))

{ int key

   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=xTc=flag}   //如果可动,执行 *** 作

}

}

int ifmov( )   //判断能否移动

{ if (a[x][y]!=0) { return 0 }  //方块中心处有图案返回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 ) ) ) { return 1 }

}

return 0  //其它情况返回0

}

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

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

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

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

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

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

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

{ k++  //下面将 *** 作删除行

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

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

        for(k=j-1k>ZLk--)

        { for(i=ZL+2i<ZL+WID-2i+=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}

}

系统没有这样的功能,一定要用软件才可以的。

推荐易通文件夹锁软件,安全易用的文件夹加密软件。支持所有windows系统。可以加密文件夹,加密文件,加密磁盘,安全易用。加密后的资料防删除,复制。

第一步:下载安装易通文件夹锁软件

第二步:右毕隐握击你想要加密的文件或文件夹,右键菜单里有易通加密菜单,直接就可以加密。

第三手庆步携和:双击你已加密的文件或文件夹,将d出密码框输入你加密设置的密码,即可解密码。

软件下载参考地址:http://zhidao.baidu.com/question/109992099.htm


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12269386.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存