可按Ctrl+D收藏 蚂蚁资源网

蚂蚁资源网

安卓俄罗斯方块源码(java写俄罗斯方块什么水平)

  • 时间:2021-02-12 06:29 编辑:余章倩 来源:蚂蚁资源 阅读:86
  • 扫一扫,手机访问
摘要:大家好,今天给大家介绍关于安卓俄罗斯方块源码(java写俄罗斯方块什么水平)的相关内容,详细讲解求俄罗斯方块的手机游戏源代码,求用JAVA编写俄罗斯方块游戏的源代码,俄罗斯方块的代码等,希望可以帮助到您。
求俄罗斯方块的手机游戏源代码,是一个俄罗斯广场,但不知道它是一个移动游戏#include #include #include #include #include #include #include #include <=19;m++)  for(n=0;n<=19;n++)  board[m][n]=0; /* 初始游戏版 */  setcolor(10); /* 开机的画面 */  settextstyle(0,0,3);  outtextxy(10,150,"WELCOME TO RUSSIS");  outtextxy(10,250,"READY GO");  setcolor(14);  settextstyle  (0,0,4);  outtextxy(10,350,"^_^");  /*  circle(400,350,60);  ellipse(370,340,60,120,25,25);  ellipse(430,340,60,120,25,25);  ellipse(400,350,225,315,30,30);*/  getch();  settextstyle(0,0,1);  cleardevice();  setcolor(LIGHTRED); /* 画出游戏所在的范围图  */  setlinestyle(0,0,3);  setfillstyle(1,14);  rectangle(157,419,533,429);  floodfill(300,424,LIGHTRED);  setcolor(LIGHTRED);  setlinestyle(0,0,3);  setfillstyle(1,14);  rectangle(147,95,157,429);  floodfill(152,200,LIGHTRED);  setcolor(LIGHTRED);  setlinestyle(0,0,3);  setfillstyle(1,14);  rectangle(323,95,333,429);  floodfill(330,320,LIGHTRED);  setcolor(LIGHTRED);  setlinestyle(0,0,1);  setfillstyle(1,BLUE);  rectangle(450,50,500,70);  floodfill(455,55,LIGHTRED);  setcolor(10);  for(m=0;m<=10;m=m+2)  ellipse(240,94,0,180,84+m,84+m);  setcolor(14);  setfillstyle(1,0);  circle(440,330,60);  floodfill(440,330,14);  outtextxy(420,80,"* you can change the game");  /* 对游戏的说明 */  outtextxy(440,90,"-speed and the gradth by"); /*  上为变形 左右 为 调整  下为快下 ESC为退出 */  outtextxy(440,100," using 'up'and'down'.");  outtextxy(420,110,"* when you are plying the");  outtextxy(440,120,"game,you can use these pu");  outtextxy(440,130,"-tturns.");  outtextxy(420,140,"* if you want to go into t");  outtextxy(440,150,"-he game,please 'enter'.");  outtextxy(420,160,"* you can chang shapes ");  outtextxy(440,170," using UP");  outtextxy(420,180,"* RIGHT and LEFT can" );  outtextxy(440,190," move shapes");  outtextxy(10,40,"GAMESPEED:");  outtextxy(10,100,"GRADTH:");  printf("\n\n\n 1");  printf("\n\n\n\n 0");  /* setcolor(LIGHTRED);  setlinestyle(0,0,1);  setfillstyle(1,10);  rectangle(10,65,110,85);  floodfill(15,75,LIGHTRED); */  outtextxy(450,40,"SCORES:");  outtextxy(10,190,"**The speed will");  outtextxy(10,200,"increas if score");  outtextxy(10,210,"increas 3");  for(p=0;p<=100;p++) /* 对速度的调整 */  { key=bioskey(0);  if(key==ENTER)  break;  if(key==UP)  {  if(l==9)  l=9;  if(l<9)  l++;  }  if(key==DOWN)  {  if(l==1)  l=l;  if(l> #include <=100;q++) /* 对高度的调整 */  {  key=bioskey(0);  if(key==ENTER)  break;  if(key==UP)  {  if(le==5)  le=le;  if(le<5)  le++;  }  if(key==DOWN)  {  if(le==0)  le=le;  if(le> #include <=le;m++) /* 具体的对高度的调整 */  {  b=random(7)+1;  for(n=1;n<=10;n++)  {  if(random(2))  {  board[n-1][20-m]=1;  draw_little_block(MAPXOFT+n,MAPYOFT+21-m,1,b);  }  }  }  while(1)  {  while(1)  {  i=x0,j=y0;  style1=random(19);  setcolor(14); /* 画出下一个方  块 */  draw_block(MAPXOFT1,MAPYOFT1,style1,1);  for(j=y0;j<=20;j++)  {  while(1)  {  if(bioskey(1)) /* 方块的  调整 */  {  key=bioskey(0);  change(&i,&j,key);  }  if(!check_block  (i,j+1,style)) /* 判断方块能不能下降 */  break;  if(j==20)  break;  if(speed==1)  {  draw_block  (i,j,style,0); /* 方块的下降 */  j++;  draw_block  (i,j,style,1);  delay(10000);  }  if(speed!=1)  {  m++;  delay  (10000);  if(m> #include <=6;m+=2) /* 对有方块的位置给予1  的数值 */  board[i+shapes[style].xy[m]-1]  [j+shapes[style].xy[m+1]-1]=1;  if(board[ i][4]==1)  {  setcolor(14);  settextstyle(0,0,2);  outtextxy(10,450,"CAREFUL -_-");  delay(100000000);  delay(100000000);  setcolor(0);  outtextxy(10,450,"CAREFUL -_-");  settextstyle(0,0,1);  setcolor(LIGHTRED);  }  /* setcolor(LIGHTRED);  setlinestyle(0,0,1);  setfillstyle(1,10);  rectangle(10,65,110,85);  floodfill(15,75,LIGHTRED);*/  if(l==1) /* 显示当前游戏等级 */  {  setcolor(LIGHTRED);  setlinestyle(0,0,1); /* 容易的速度 */  setfillstyle(1,10);  rectangle(10,65,110,85);  floodfill(15,75,LIGHTRED);  outtextxy(7,70," easy speed");  }  if(l==4)  {  setcolor(BLACK);  outtextxy(7,70," easy speed");  setcolor(LIGHTRED); /* 中等难度 */  setlinestyle(0,0,1);  setfillstyle(1,10);  rectangle(10,65,110,85);  floodfill(15,75,LIGHTRED);  outtextxy(7,70," normal speed");  }  if(l==7)  {  setcolor(BLACK);  outtextxy(7,70," normal speed");  setcolor(LIGHTRED);  setlinestyle(0,0,1); /* 困难的难度 */  setfillstyle(1,10);  rectangle(10,65,110,85);  floodfill(15,75,LIGHTRED);  outtextxy(7,70," hard speed");  }  kill_line(j);  if(j==20)  break;  if(!check_block(i,j+1,style))  break;  }  draw_block(MAPXOFT1,MAPYOFT1,style1,0);  /* 对下1个方块显示位置进行覆盖 */  style=style1; /* 使的方块和显示的方块一样  */  if(j==1) /* 关机的画面 */  {  setcolor(14);  settextstyle(0,0,2);  outtextxy(170,200,"GAME OVER");  outtextxy(170,240,"THANK YOU");  sleep(3);  exit(0);  }  }  }  }  getch();  }  int change(int *i,int *j,int key) /* 方块的具体的变化(  移动 变形 下降) */  {  if(key==UP&&check_block(*i,*j,shapes[style].next)) /*  变形 */  {  draw_block(*i,*j,style,0);  style=shapes[style].next;  draw_block(*i,*j,style,1);  }  else if(key==LEFT&&check_block(*i-1,*j,style)) /* 移动  */  {  draw_block(*i,*j,style,0);  (*i)--;  draw_block(*i,*j,style,1);  }  else if(key==RIGHT&&check_block(*i+1,*j,style))  {  draw_block(*i,*j,style,0);  (*i)++;  draw_block(*i,*j,style,1);  }  else if(key==DOWN&&check_block(*i,*j+1,style)) /* 下降  */  {  draw_block(*i,*j,style,0);  (*j)++;  draw_block(*i,*j,style,1);  speed=1;  }  else if(key==ESC) /* 退出 */  exit(0);  }  void draw_block(int x,int y,int style,int way) /* 画出方块  的位置 */  {  int x1=x+MAPXOFT,y1=y+MAPYOFT;  int i;  if(way==1)  {  setcolor(WHITE);  }  else  {  setcolor(BLACK);  }  for(i=0;i<=6;i+=2)  {  draw_little_block(x1+shapes[style].xy[  i],y1+shapes[style].xy[i+1],way,style);  }  }  void draw_little_block(int x,int y,int z,int style) /* 画  出方块的每一个小方块的形状(方块的色彩) */  { int m,n;  if(z==1) /* 对色彩的调整 */  {  if(0<=style&&style<=3)  n=2;  if(4<=style&&style<=7)  n=3;  if(8<=style&&style<=11)  n=4;  if(12<=style&&style<=13)  n=5;  if(14<=style&&style<=15)  n=6;  if(16<=style&&style<=17)  n=7;  if(style==18)  n=8;  m=1;  }  if(z==0)  {  m=0,n=0;  }  setcolor(m);  setfillstyle(1,n);  rectangle(x*16,y*16,x*16+16,y*16+16);  floodfill(x*16+2,y*16+2,m);  }  void kill_line(int y) /* 消行 */  {  int i,t=1,j,k,color=random(7)+1;  for(;y># (int x,int y,int style,int方法; void kill_line(int x,int y,int z,int style); int check_block(int x,int y,int style); int更改int * i,int * j,int键); int style1,style,score,speed,l; int董事会[10] [20]; char str [100];结构形状{int xy [8],下一个;结构形状形状[19] = / * 19块(前8个点指示4小方块的相对位置9点指示类型)* / {{0,-2,0,-1,0,0,1,0 ,1},{-1,0,0,0,1,-1,1,0,2},{0,-2,1,-2,1,-1,1,0,3} { -1,-1,-1,0,0,-1,1,-1,0},{0,-2,0,-1,0,0,1,-2,5},{-1 ,-1,0,-1,1,-1,1,0,6},{0,0,1,-2,1,-1,1,0,7},{-1,-1,-1,0,0,0,0,1,0,4},{-1,0,0,-1,0,0,0 ,1,0,9},{0,-2,0,-1,0,0,1,-1,10},{-1,-1,0,-1,1,-1,0, 0,11},{0,-1,1,-2,1,-1,1,0,8} {-1,0,0,-1,0,0,1,-1,13} ,{0,-2,0,-1,1,-1,1,0,12},{-1,-1,0,-1,0,0,1,0,15},{0, -1,0,0,1,-2,1,-1,14},{0,-3,0,-2,0,-1,0,0,17},{-1,0,0,0 ,0,1,0,2,0,16},{0,-1,0,0,1,,-1,1,0,18}}; #define mapxoft 9 / *第1部分位置* / #define mapyoft 5 #define mapyoft1 18 / *在一个方形位置* / #define地图0x4b00 #define右0x4d00 #define下来0x5000 #define向上0x4800 #define esc 0x011b #define enter 0x1c0d int main(){int gdriver,gmode,i,j,key,x0 = 5,y0 = 1,m,n,c,key1,p,q,le = 0,b; l = 1,得分= 0; gdriver =检测; EnitGraph(&gdriver,和Gmode,“d:\\ turboc2”);随机(); for(m = 0; m <=4;y--,t++) /* 对4行进行验证 */  {  for(i=1;i<=10;i++)  if(!board[i-1][y-1]) /* 严整1行的数组是不是全  为1 */  break;  if(i==11)  {  setcolor(LIGHTRED); /* 对积分底色的画法  */  setlinestyle(0,0,1);  setfillstyle(1,BLUE);  rectangle(450,50,500,70);  floodfill(455,55,LIGHTRED);  score++; /* 每消去1行 可以得1分 */  setcolor(14);  itoa(score,str,10);  outtextxy(460,55,str);  if(score!=0&&score%3==0)  l++; /* 每次分到一定位置是 速度进  行提高(目前是3行加1次 可以调整) */  setcolor(14); /* 每次消去是进行庆祝模式 */  settextstyle(0,0,4);  outtextxy(10,310,"COOL");  outtextxy(10,270,"^_^");  delay(100000000);  delay(100000000);  delay(100000000);  setcolor(BLACK);  settextstyle(0,0,4);  outtextxy(10,310,"COOL");  outtextxy(10,270,"^_^");  settextstyle(0,0,1);  if(score%3==0&&score!=0)  {  setcolor(14);  settextstyle(0,0,2);  outtextxy(10,435,"CONGRATULATION ON YOU ^_^");  sleep(2);  setcolor(BLACK);  settextstyle(0,0,2);  outtextxy(10,435,"CONGRATULATION ON YOU ^_^ ");  settextstyle(0,0,1);  }  for(k=1;k<=10;k++) /* 对满了行进行消去  */  {  setcolor(BLACK);  draw_little_block  (k+MAPXOFT,y+MAPYOFT,0,2);  }  for(j=y-1;j> 1)l - ;} gotoxy(2,4); printf(“%d”,l);} for(q = 0; q <=10;k++)  {  board[k-1][j]=board[k-1][j-1];  if(board[k-1][j])  {  setcolor(BLACK);  draw_little_block  (k+MAPXOFT,j+MAPYOFT,0,2);  setcolor(WHITE);  draw_little_block  (k+MAPXOFT,j+1+MAPYOFT,1,color);  }  }  delay(100000000000);  y++;  }  }  }  int check_block(int x,int y,int style) /* 验证能不能往下1  个位置累方块 */  {  int x1=x+MAPXOFT,y1=y+MAPYOFT;  int x2,y2,i;  for(i=0;i<=6;i+=2)  {  x2=x1+shapes[style].xy[ i];  y2=y1+shapes[style].xy[i+1];  if(x2> 0)Le - ;} gotoxy(2,8); printf(“%d”,le);键= Bioskey(0); if(key ==输入){style =随机(19); for(m = 1; m = 3 *(10-L)){m = 0; draw_block(i,j,style,0); / *减少* / J ++; draw_block(i,j,style,1);}}}速度= 0; for(m = 0; m = 1 && t = 1; j - )/ *消除顶部的顶部(并调整颜色)* / for(k = 1; k = 10 && x2 <20 && y2 <26 &&(y2 <6 ||电路板[x2-10] [y2-6] == 0))))))))))继续;否则休息;}如果(i == 8)返回1;否则返回0; getch();
求用JAVA编写俄罗斯方块游戏的源代码,俄罗斯广场 - Java源代码提供导入java.awt。 *;导入java.awt.Event。 *; //俄罗斯公共类ers_block扩展框架= false;公共静态int = 1,得分= 0;公共静态文本菲尔德分类菲尔德,莱尔福尔德;公共静态Mytimer计时器; GameCanvas Gamescr;公共静态void main(String [] Argus){ers_block ers = new ers_block(“tetris v1.0作者:文森”); windowlistener win_listener = new winlistener(); ers.addwindowlistener(win_listener);} //俄语方形结构ers_block(字符串标题){super(title);鉴定(600,480); setLayout(新网格劳登(1,2)); GamesCr = New GameCanvas(); Gamescr);时间=新的mytimer(时间); timer.setdaemon(真实); timer.start(); timer.suspend();添加(Gamescr);面板rivecr =新面板(); setscr.setLayout(新网格布局(2,1,0,30)); sifirect.stesize(120,500);添加(rivercr); //正确的信息表单布局mypanel infoscr = new mypanel(); Inforkr.SetLayout(新网格列排出(4,1,0,5)); Infoscr .stesize(120,300); sifirecr.add(Infoscr); //定义标签和初始值标签得分P =新标签(“得分:”,label.left; label leadp =新标签(“系列:”,标签。左); scountfield = new textfield(8); levelfield =新文本菲尔德(8); scietfield.seteDable(false); levelfield.seteDable(false); InfoScr.add(记分); InfoScr.add(ScietField); InfoScr.add(levelp); Infork.add(Levelfield);得分.setsize(新尺寸(20,60)); scietfield.stesize(新维度(20,60)); levelp.setsize(新维度(20,60)); levelfield.setsize; scietfield.settext(“0”); levelfield。 Setext(“1”); //右cOntrol按钮形式布局MyPanel ControlSCR = New MyPanel(); ControlSCR。 setLayout(新网格列阵(5,1,0,5)); sifirecr.add(ControlSCR); //定义按钮播放按钮播放_B =新按钮(“开始游戏”); play_b.setsize(新维度(50,200)); play_b.addactionListener(命令)。 Button_play,Gamescr)); //定义按钮级别按钮级别_up_b =新按钮(“系列增加”); level_up_b.setsize(新维度(50,200)); level_up_b.addactionListener(new command(command.button_levelup,gamescr)); //定义按钮级向下按钮level_down_b = new按钮(“减少进展”); level_down_b.setsize(新维度(50,200)); level_down_b.addactionListener(new命令(command.button_leveldown,gamescr)); //定义按钮级别暂停按钮PAUSE_B = NEW按钮(“游戏暂停”);PAUSE_B.SETSIZE(新维度(50,200)); pause_b.addactionListener(new命令(command.button_pause,gamescr)); //定义按钮退出按钮quit_b = new按钮(“退出游戏”); quit_b.setsize(新维度(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);可变(真实); gamescr.requestfocus(); //再适用MyPanel类,制作面板的四个环保空间类MyPanel扩展面板{公共Insets getInsets(){返回新插入(30,50,30,50);} //游戏画布Class GameCanvas扩展了Canvas实现了Keylistener {Final Int Units = 30; //小侧长int rownum; // int clountnnum行; / / 这列int maxlowallownum; //允许数行不清楚int blockinitrow; //新出现阻止起始线坐标int blockinitcol; //新块int [] [] scrarr的起始列; //屏幕阵列块B; //其他方快速参考//画布的结构,gamecanvas(){rownum = 15; clountnum = 10; maxallowrownum = rownum - 2; b =新块(这个); blockinitrow = rownum - 1; blockinitcol = columnnnu / 2 - 2; scrarr = new int [32] [32];} //初始化屏幕,清除屏幕阵列void inintscr(){for(int i = 0; i = rownum || col < 0 || col > = columnnnum)返回(-1);否则返回(scrarr [行]);} //返回新块公共int getInitrow(){return(blockinitrow)的初始行坐标方法; //返回新的块初始线coordinATE} //返回新块公共int getInitcol(){return(blockinitcol)的初始坐标方法数; //返回新块初始列坐标} //全行删除方法void deletefullline(){int full_line_num = 0; int k = 0; for(int i = 0; i 1){ers_block.lveld.settttettettettettettext(“+ ers_block.lavel); ers_block.score = 0; ers_block.scorefield.settext”“+ ers_block.score); scr.requestfocus ();休息; case butt_pause:if(pause_resume){ers_block.timer.suspend(); pause_resume = false; else {ers_block.timer.resume(); pause_resume = true;} scr.requestfocus();休息;休息button_quit:system.exit(0);}}}}} // square类块} // square类块{static int [] []图案= {{0x0f00,0x4444,0x0f00,0x4444},//使用十六到expres.SED,该银行是指长条带{0x04E0,0x0464,0x00e4,0x04c4},{0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740 },{0x6440,0x0e20,0,0x44c0,0x8e00},{0x0660,0x0660,0x0660,0x0660}}; int blocktype; //块模式编号(0-6)int窗静音; //块翻转状态(0-3)int blockstate; //快速删除状态int行,col; //在画布上阻止坐标GameCanvas SCR; ///块配置方法块(GameCanvas SCR){this.scr = scr; blocktype =(int)(math.random()* 1000)%7; TurnState =(int)()* 1000)%4; blockstate = 1; row = scr.getinitrow(); col = scr.getinitcol();} //重新初始化块,并显示新块公共voidets(){blocktype =(int)(math.random)* 1000)%7; mathstate =(int)(math.random()* 1000)%4; blockstate = 1; row = scr.getinitrow(); color = scr.getinitcol(); dispblock(1);} //实现“块”翻转方法公共void左栏(if(retertvalid(旋钮+ 1)%4,行,col){displock(0);圈静=(旋转阀+ 1)%4; displock(1);}} //实现“块”公共void leftmove(){if(bottentype,旋钮,行,col-1){displock(0); col-; dispblock(1);}} //实现公共void rightMove(){if(blocktype,reterstate,行,col + 1)){displock(0); col ++; dispblock(1);}} //实现块公共布尔allowdown()的操作{if(blockstate == 2)return(false); if(bottentype,reterate,tow-1,colblock(0);行 - ; dispblock(1); return(true} else {blockstate = 2; displock(2); return(false);}} //判断正确的方法B.OOLEAN ASSERTVALID(INT T,INT S,INT ROT,INT CO){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;}}}返回true;} //同步显示方法公共同步void displock(int s){int k = 0x8000; for(int i = 0;我< 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;}}}}}}}}}}}}}}} //时序线程mytimer扩展线程{gamecanvas scr; public mytimer(gameCanvas scr){this.scr = scr;} public void run(){while {treep((10-ers_block.lovel + 1)* 100);} catch(InterruptedExcection e){} if(!sc.getblock()。falldown()){scr.deletefullline(); if(scr.isgameend()){ers_block.isplay = false; suspend();} else scr.getBlock()。reset(); reset();}}} class winlistener扩展窗幕{public void windowslosiing(windowEvent l){system.exit(0);}} 22
俄罗斯方块的代码,编写的俄罗斯广场源代码,有点愚蠢......包括 #include #include #include #include #dclude #dclude #dflude left 0x4b #define右0x4d #define下来0x50 #define更改0x20 #define esc 0x1b #define for 0x1c #define defaultx 5 #define decaysy 1 #dfdef __cplusplus #define __cppargs ... #else #define __cppargs #endif静态无符号计数器= 0;静态无符号形状[7] [4] [4] [4] = {{{0,1,1,10},{0,1,1,0},{0,0,0,0},{0 ,0,0,0}},{0,1,1,0},{0,0,0,0},{0,0,0,0,0},{0,0,0,0}} ,{{0,1,1,0},{0,0,0,0},{0,0,0,0,0}},{{0,1,1,1,1 ,0},{0,1,1,0},{0,0,0,0},{0,0,0,0,0}},},},{{0 0,0,0,0,0},{ 1,1,1,1},{0,0,0,0,1,0},{0,0,1,0},{0,0,1,0}, {0,0,0,0},{1,1,1,1,1},{0,0,0,0},{0,0,0,0,1,0},{0,0,1,0},{0,0,0} 1,0}},},{{0,1,0,0},{1,1,1,0},{0,0 ,0,0},{0,0,0,0,0,0},{0,1,1,0},{0,1,0,0,0},{0 ,0,0,0},{1,1,1,0},{0,1,0}},{{0,1,0,0,0},{1,1,0,0},{0 ,1,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},{1,1,0,0},{0,0,0,0}},{{1,0,0,0,0} ,{1,1,0,0},{0,1,0,0},{0,0,0,0}},{{0,0,0,0},{0,1,1,1, 0},{1,1,0,0},{0,0,0,0}},},{{0,1,0,0},{1,1,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},{1,1,0,0},{1,0,0,0},{0,0,0}},{{0,0,0,0},{0,1, 1,10},{0,0,0,0,0}},},{{1,0,0,0,0,0},{1,0,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}}, {{1,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},{1,0,0,0},{1,1, 1,0},{0,0,0}},{1,0,0,0},{1,0,0,0,0},{0,0,0,0, 0}},{0,0,0,0},{1,1,1,0},{0,0,1,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,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,0,1,1}, {1,1,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 ,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,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,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,1,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,0,1,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,0,0, 1,1},{1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0, 0,0,0,1,1,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,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十二圈[11] = {4,6,12,13,11,10,2,3,9,1,8}; Char Zodiacsoft [18] [14] = {{0,0,0,0,0,0,0,96,0,0,0,0,248,0,0, 124,0},{255,248,0,0,3,248,0,0,192,0},{0,112,0,0,0,97,128 0,0,97,128,0,0,0,97,128,0,0,0,97,128,0,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,0,96 0,0,10,12,0,0,1,128,48},{3,128,10,12,0,15,15,249,255},{ 7,0,252,31,245,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,99,3,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,4,14,49,129,128,48},{255249,252,63,225,135,252,255,28,28,63, 129,128,48},{255,248,240,15,97,131,36,10,48},{0,0,0,0,0,0,0,0,7,224,0,1, 128,0}; unsigned long totalmark = 0; unsigned int erased = 0,etimes = 0;速度= 0; int cer = 0; int numoflev [5] = {0,0,0,0,0}; int timedlay [10] = {21,18,17,15,13,​​11,9,7,5,3}; char newshape [2];无符号秘收[4]; void中断(* oldhandler)__cppargs); void中断处理程序(__ cppargs){++计数器; oldhandler(); void缺点()} void缺点(){// setLineStyle} void绘图绘图(int x,int y,int a){int i = 7; setcolor(((((((Digitalshape [a] >> i)&1)* 7 + 4); // printf(“%d”,(digitalshape [a] >> i)&1);我--- ;线(x,y + 1,x,y + 15);线(x + 1,y + 2,x + 1,y + 14);线(x + 2,y + 3,x + 2,y + 13);雕刻(((Digitalshape)a] >> i)&1)* 7 + 4); i - ;线(x,y + 17,x,y + 31);线(x + 1,y + 18,x + 1,y + 30);线(x + 2,y + 19,x + 2,y + 29); setcolor((digitalshape [a] >> i)&1)* 7 + 4) ; I - ;线(x,y + 17,x,y + 31);线(x + 1,y + 18,x + 1,y + 30);线(x + 2,y + 19,x + 2,y + 29); SetColor((Digitalshape [A] >> I)&1)* 7 + 4); i - 线(x + 1,y,x + 16,y);线(x + 2,y + 1,x + 15,y + 1);线(x + 3,y + 2,x + 14,y)+2); SetColor((Digitalshape [A] >> I)&1)* 7 + 4);一世 - ;线(x + 2,y + 15,x + 15,y + 15);线(x + 1,y + 16,x + 16,y + 16);线(x + 2,y + 17,x + 15,y + 17); SetColor(((Digitalshape [A] >> I)&1)* 7 + 4);一世 -;线(x + 3,y + 30,x + 14,y + 30);线(x + 2,y + 31,x + 15,y + 31);线(x + 1,y + 32,x + 16,y + 32); SetColor(((Digitalshape [A] >> I)&1)* 7 + 4);一世-;线(x + 15,y + 3,x + 15,y + 13);线(x + 16,y + 2,x + 16,y + 14);线(x + 17,y + 1,x + 17,y + 15); SetColor(Digitalshape [A] >> I)&1)* 7 + 4);线(x + 15,y + 19,x + 15,y + 29);线(x + 16,y + 18,x + 16,y + 30);线(x + 17,y + 17,x + 17,y + 31); voidartclear(){for(int i = 480; i> = 0; i-= 2){setcolor 3);线(0,I-6,639,I-6);雕刻(9);线(0,I-4,639,I-4); SetColor(1);线(0,I-2,639,I-2); setcolor(getbkcolor());线(0,i,639 i);延迟(1);}(i = 1; i <480; i + = 2){setcolor(3);线(0,i + 6,639,i + 6);雕刻(9);线(线)0,i + 4,639,i + 4); SetColor(1);线(0,i + 2,639,i + 2); setcolor(getbkcolor());线(0,i,639,i);延迟(1);}}}} void end(){for(int j = 0; j <4; j ++){for(int i = j; i <480; i + = 4){setcolor(3);线(0,i + 8,639,i + 8);雕刻(9);线(0,i + 4,639,i + 4); SetColor(1);线(0,i,639,i); setcolor(getbkcolor());第0行,I,639,i);延迟(1);框架(黄色); Outtextxy(260,200,“[游戏); gotoxy(14,16); printf(”这个免费软件是由daniel.qu zodiacsoft 2000编写的); gotoxy(12,17); printf(“请e-邮寄到swami@yeah.net或访问我的主页“); gotoxy(12,18); printf(“http:///grocery.2699.com如果有qu.estion。”); gotoxy(14,20); Printf(“我很快就会提供新的东西,请稍候......”); gotoxy(14,22); Printf(“我们认为这些真理是不言而喻的,即所有代码”); gotoxy(12,23); printf(“是免费创建的。”); getch(); clrscr();特写镜头();退出(0); void showtitle(){int gdriver = detect,gmode,errorcode,i,j,k; EnitGraph(&gdriver,&gwe,“); errorcode = graphResult();如果(erroorcode!= grok){printf(”图形错误:%s

责任编辑(余章倩

以上就是关于**安卓俄罗斯方块源码,java写俄罗斯方块什么水平**的全部内容,了解更多请关注蚂蚁资源网。
  • 全部评论(3)
  • 源码资源网
  • 俄罗斯方块如何编写及代码,网上很多呀,有很多javascript写的网页俄罗斯方块游戏,可以直接查看网页源码,偷懒的话修改成c++的就成了。但也不要太懒了,如果你是学生的话。。。。。。
  • 2021-02-12 06:29:37
  • hwlsz
  • #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 /* 每当玩家打到一万分等级加一级*//* 按键码*/#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/* 定义俄罗斯方块的方向(我定义他为4种)*/#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 60int 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};/* 游戏等级*//* 以下我用了一个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=0;i<16;i++)boxz[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)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=0;i<16;i++)boxz[i/4][i%4]=boxstr[nextboxgs][nextboxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(boxz[i][j]==1)minbox((j+a)*MINBOXSIZE,(i+b)*MINBOXSIZE,color,bdcolor);}/*时间中断定义*/#define TIMER 0x1cint 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=a;i>1;i--)for(j=1;j<15;j++){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=1;i<21;i++){zero=0;for(j=1;j<15;j++)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=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)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=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)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=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)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=0;i<4;i++)for(i=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx+1][i];for(i=3;i>=0;i--)for(j=3;j>=0;j--)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=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][j])gril[col+i][row+j]=1;col=1;row=7;}/*游戏结束*/void gameover(){int i,j;for(i=20;i>0;i--)for(j=1;j<15;j++)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=1;row=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();/*屏幕坐标初始化*/for(i=0;i<=MAXCOL+1;i++)for(j=0;j<=MAXROW+1;j++)gril[i][j]=0;for(i=0;i<=MAXCOL+1;i++) {gril[i][0]=1;gril[i][15]=1;}for(j=1;j<=MAXROW;j++){gril[0][j]=1;gril[21][j]=1;}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();}
  • 2021-02-12 06:29:37
  • 你大爷
  • 手机游戏---俄罗斯方块http://www.onlinedown.net/soft/40673.htmhttp://games.sina.com.cn/m/c/2004-10-21/1069.shtmlhttp://www.gamezero.cn/game8878.html俄罗斯方块——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); } }
  • 2021-03-06 01:50:06
最新发布的资讯信息
【简历/资料|内地女明星】 殷茹基本资料( YR个人简历介绍)(2020-12-06 15:19)
【简历/资料|内地女明星】 曹菁基本资料( CJ个人简历介绍)(2020-12-06 15:18)
【简历/资料|内地女明星】 王安妮基本资料( WAN个人简历介绍)(2020-12-06 15:18)
【简历/资料|内地女明星】 白琼基本资料( BQ个人简历介绍)(2020-12-06 15:17)
【简历/资料|内地女明星】 王世霞基本资料( WSX个人简历介绍)(2020-12-06 15:17)
【简历/资料|内地女明星】 宋煜基本资料( SY个人简历介绍)(2020-12-06 15:16)
【简历/资料|内地女明星】 钱增基本资料( QZ个人简历介绍)(2020-12-06 15:16)
【简历/资料|内地女明星】 胡晓黎基本资料( HXL个人简历介绍)(2020-12-06 15:15)
【简历/资料|内地女明星】 李佳慧基本资料( LJH个人简历介绍)(2020-12-06 15:15)
【简历/资料|内地女明星】 张洛嘉基本资料( ZLJ个人简历介绍)(2020-12-06 15:14)
联系客服
网站客服 联系客服
手机版

扫一扫进手机版
返回顶部