首页 > 代码库 > java语言-俄罗斯方块Java源码案例

java语言-俄罗斯方块Java源码案例

只提供参考源码

import java.awt.*;import java.applet.Applet;public class Blocks extends Applet implements Runnable{Dimension d;Font largefont= new Font("Helvetica", Font.BOLD, 28);Font smallfont= new Font("Helvetica", Font.BOLD, 10);Color textcolor1=new Color(96,128,255);Color textcolor2=new Color(255,160,64);FontMetrics fmsmall, fmlarge;Graphics goff;Image ii;Threadthethread;boolean ingame=false;final short xblocks=10;final short yblocks=20;final int blocksize=16;final int width=xblocks*blocksize;final int height=yblocks*blocksize;short[][] screendata;final short maxcolors=6;Color[] blocks;final int barwidth=8;final Color barcolor=new Color(128,255,64);final Color background=new Color(0,0,0);int score;short emptyline;int objectx, objecty;int objectx;short objecttype;short objectcolor;int objectrotation;int objectrotationd=0;short objectptr;short checkptr;final short itemcount=7;final short itemrotlen=8;final short itemlen=itemrotlen*4;short count;final short maxcount=5;short curcount;boolean fast=false;final short screendelay=40;short screencount=40;boolean showtitle=true;int items[]={0,0, -1,0, 0,-1, -1,-1, //四方形,正常状态0,0, -1,0, 0,1, -1,1, //被旋转90度0,0, 1,0, 0,1, 1,1,0,0, 1,0, 0,-1, 1,-1,0,0, 0,-1, 0,-2, 0,-3,0,0, -1,0, -2,0, -3,0,0,0, 0,1, 0,2, 0,3,0,0, 1,0, 2,0, 3,0,0,0, 1,0, 0,-1, -1,-1,0,0, 0,-1, -1,0, -1,1,0,0, -1,0, 0,1, 1,1,0,0, 0,1, 1,0, 1,-1,0,0, -1,0, 0,-1, 1,-1,0,0, 0,1, -1,0, -1,-1,0,0, 1,0, 0,1, -1,1,0,0, 0,-1, 1,0, 1,1,0,0, 1,0, -1,0, 0,-1,0,0, 0,1, 0,-1, -1,0,0,0, 0,1, -1,0, 1,0,0,0, 1,0, 0,-1, 0,1,0,0, 0,-1, 1,-1, 0,1,0,0, -1,0, -1,-1, 1,0,0,0, -1,1, 0,1, 0,-1,0,0, -1,0, 1,0, 1,1,0,0, 0,1, 0,-1, -1,-1,0,0, 1,0, -1,0, -1,1,0,0, 0,-1, 0,1, 1,1,0,0, -1,0, 1,0, 1,-1,};int checks[]={-1,1, 0,1, -1,1, 0,1,-1,2, 0,2, -1,2, 0,2,0,2, 1,2, 0,2, 1,2,0,1, 1,1, 0,1, 1,1,0,1, 0,1, 0,1, 0,1,0,1, -1,1, -2,1, -3,1,0,4, 0,4, 0,4, 0,4,0,1, 1,1, 2,1, 3,1,0,1, -1,0, 1,1, 0,1,0,1, -1,2, 0,1, -1,2,0,2, 1,2, -1,2, 0,2,0,2, 1,1, 0,2, 1,1,-1,1, 0,1, 1,0, 1,0,-1,1, 0,2, 0,2, -1,1,-1,2, 0,2, 1,1, 1,1,0,1, 1,2, 0,1, 1,2,-1,1, 0,1, 1,1, 1,1,-1,1, 0,2, 0,2, -1,1,-1,1, 0,2, 1,1, 1,1,0,2, 1,1, 0,2, 1,1,0,2, 1,0, 1,0, 0,2,-1,1, 0,1, 1,1, 1,1,-1,2, 0,2, 0,2, -1,2,-1,1, 0,1, 1,2, 1,2,-1,0, 0,2, 0,2, -1,0,-1,2, 0,1, 1,1, 1,1,0,2, 1,2, 1,2, 0,2,-1,1, 0,1, 1,1, 1,1,};public string getAppletInfo(){return("Blocks - by Ali");}//初始化appletpublic void init(){short i;screendata=http://www.mamicode.com/new short[xblocks][yblocks];"俄罗斯方块"goff.setColor(textcolor1);goff.drawString(s, barwidth+(width-fmlarge.stringWidth(s))/2-2,height/2-22);goff.setColor(Color.white);goff.drawString(s, barwidth+(width-fmlarge.stringWidth(s))/2,height/2-20);}else{goff.setFont(smallfont);s="请按下′S′键开始游戏";goff.setColor(textcolor1);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2-1,height/2-31);goff.setColor(Color.white);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2,height/2-30);s="使用左右方向键控制运动";goff.setColor(textcolor2);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2-1,height/2-11);goff.setColor(Color.white);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2,height/2-10);s="使用向下的方向键实现旋转";goff.setColor(textcolor2);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2-1,height/2+9);goff.setColor(Color.white);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2,height/2+10);s="使用向下的方向键实现下降";goff.setColor(textcolor2);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2-1,height/2+29);goff.setColor(Color.white);goff.drawString(s,barwidth+(width-fmsmall.stringWidth(s))/2,height/2+30);}screencount--;if(screencount<=0){ screencount=screendelay; showtitle=!showtitle; }}public void drawBars(){goff.setColor(barcolor);goff.fillRect(0,0,barwidth,blocksize*yblocks);goff.fillRect(barwidth+blocksize*xblocks,0,barwidth,blocksize*yblocks);goff.fillRect(0,blocksize*yblocks,xblocks*blocksize+2*barwidth,barwidth);}public boolean drawObject(){short i;boolean bottomreached=false;int x,y,checkx,checky;//清除旧图形for(i=0;i<4;i++){x=objectx+items[objectptr+i*2+objectrotation*itemrotlen];y=objecty+items[objectptr+i*2+objectrotation*itemrotlen+1];checkx=objectx+checks[objectptr+i*2+objectrotation*itemrotlen];checky=objecty+checks[objectptr+i*2+objectrotation*itemrotlen+1];if(y>=0)screendata[x][y]=0;if(screendata[checks][checky]!=0)bottomreached=true;}if(!bottomreached){count--;if(count<=0||fast){objecty++;count=curcount;}checkRotation();objectdx=0;objectrotationd=0;}//绘制新图形for(i=0;i<4;i++){x=objectx+items[objectptr+i*2+objectrotation*itemrotlen];y=objecty+items[objectptr+i*2+objectrotation*itemrotlen+1];if(y>=0)screendata[x][y]=objectcolor;if(y>=(yblocks-1))bottomreached=true;}if (bottomreached){score++;newObject();}return bottomreached;}public void checkRotation(){int dummyx;int dummyrot;int x,y;short i;boolean cando=true;dummyrot=(objectrotation+objectrotationd)%4;dummyx=objectx+objectdx;//确认该部分不会使屏幕旋转for(i=0;i<4;i++){x=dummyx+items[objectptr+i*2+dummyrot*itemrotlen];if(x>=xblocks)dummyx-=(x-xblocks+1);else if(x<0)dummyx-=x;}for(i=0;(i<4&&cando);i++){x=dummyx+items[objectptr+i*2+dummyrot*itemrotlen];y=objecty+items[objectptr+i*2+dummyrot*itemrotlen+1];if(y>=0)cando=cando&&(screendata[x][y]==0);if(y>=yblocks||x<0||x>=xblocks)cando=false;}if(cando){objectrotation=dummyrot;objectx=dummyx;}}public void drawBlocks(){short x,y;for(x=0;x<xblocks;x++){for(y=0;y<yblocks;y++){goff.setColor(blocks[screendata[x][y]]);goff.drawRect(x*blocksize+barwidth,y*blocksize,blocksize-1,blocksize-1);goff.fillRect(x*blocksize+barwidth+3,y*blocksize+3,blocksize-6,blocksize-6);}}}public void checkFull(){short x,y;boolean found=false;for(y=yblocks-1;(y>=0&&!found);y--){found=true;for(x=0;x<xblocks;x++){if(screendata[x][y]==0)found=false;}if(found){score+=10;//当用户的得分很多时,增加游戏速度if(score>800)curcount=1;else if(score>600)curcount=2;else if(score>400)curcount=3;else if(score>200)curcount=4;for(x=0;x<xblocks;x++){screendata[x][y]=0;}emptyline=y;}}}public void scrollDown(){short x,y;for(y=emptyline;y>0;y--){for(x=0;x<xblocks;x++){screendata[x][y]=screendata[x][y-1];}}for(x=0;x<xblocks;x++){screendata[x][0]=0;}emptyline=-1;}public void showScore(){String s;goff.setFont(smallfont);goff.setColor(Color.white);s="得分: "+score;goff.drawString(s,width/2-40,(yblocks+1)*blocksize+10);}public void run(){long starttime;Graphics g;Thread.currentThread().setPriorit(Thread.MAX_PRIORITY);g=getGraphics();while(true){starttime=System.currentTimeMillis();try{paint(g);starttime+=60;Thread.sleep(Math.max(0,starttime-System.currentTimeMillis()));}catch(InterruptedException e){break;}}}public void start(){if(thethread==null) {thethread=new Thread(this);thethread.start();}}public void stop(){if (thethread!=null) {thethread.stop();thethread=null;}}}

  <ignore_js_op>

3.jpg

<ignore_js_op>

2.jpg (15.48 KB, 下载次数: 0)

 

2.jpg
详细说明:http://java.662p.com/thread-47-1-1.html

java语言-俄罗斯方块Java源码案例