CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  架构、设计

100分寻求俄罗斯方块得JAVA源代码

楼主purplethunder(紫雷)2003-07-01 14:50:21 在 Java / 架构、设计 提问

小鸟做参考用,最好是MVC模式的。如有高人自己编过的话,麻烦发到小弟的邮箱  
  purplethunder@163.com  
  谢谢 问题点数:20、回复次数:6Top

1 楼binny(骑个破车看夕阳)回复于 2003-07-01 15:02:06 得分 0

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();  
            }  
        }Top

2 楼binny(骑个破车看夕阳)回复于 2003-07-01 15:02:31 得分 0

 
        //重写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[i][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[i][j]);  
                }  
   
                //画方?的方法  
                public   void   drawUnit(int   row,int   col,int   type){  
                        scrArr[row][col]   =   type;  
                        Graphics   g   =   getGraphics();  
                        switch(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[i][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[i][j]   ==   0)  
                                                    drawUnit(k-1,j,0);  
                                                else  
                                                    drawUnit(k-1,j,2);  
                                                scrArr[k-1][j]   =   scrArr[i][j];  
                                        }  
                        }  
                        for(int   i   =   k-1   ;i   <   rowNum;   i++){  
                                for(int   j   =   0;   j   <   columnNum;   j++){  
                                        drawUnit(i,j,0);  
                                        scrArr[i][j]=0;  
                                }  
                        }  
                        ERS_Block.score   +=   full_line_num;  
                        ERS_Block.scoreField.setText(""+ERS_Block.score);  
                }Top

3 楼binny(骑个破车看夕阳)回复于 2003-07-01 15:03:30 得分 10

//判断游?是否?束方法  
                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;  
                        switch(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){  
                        switch(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);  
                        }  
                }  
  }Top

4 楼geyf(其实我也不会)回复于 2003-07-01 16:12:47 得分 0

不全吧?  
  什么Block,MyTimer等类没有啊  
   
  也给我来一份  
  geyf@sohu.comTop

5 楼windspeed(湘湘湘,姐姐姐)回复于 2003-07-02 12:08:22 得分 0

楼主是不是住天马公寓1区3栋的啊   ,科班的吧   HOHO,果然是强!Top

6 楼huzonghui(出去走走)回复于 2003-07-02 12:14:49 得分 10

给你发过去了,记得给俺分!^_^!Top

7 楼windspeed(湘湘湘,姐姐姐)回复于 2003-07-02 12:21:51 得分 0

我们论坛有两个版本,你去down吧  
   
  快要交作业了吧   呵呵  
   
  http://www.shetuan.net/bbs/dispbbs.asp?boardid=9&id=2782&star=1#23054Top

相关问题

  • 求购俄罗斯方块源代码.............
  • 求一个俄罗斯方块游戏的源代码( for DOS)
  • 来看俄罗斯方块源代码//全部不出900行
  • 求一份俄罗斯方块的源代码
  • 谁能送我一份俄罗斯方块的源代码(TC下的)?
  • 我欲写一个俄罗斯方块,寻求帮助!!
  • 请问哪位能提供俄罗斯方块的C源代码,先谢过了!
  • 求用java编写的俄罗斯方块源程序,急!!!
  • 有人知道QQ游戏的俄罗斯方块的原理吗?整个流程的原理,谁有俄罗斯方块的代码?最好JAVA的!
  • 我想用JAVA做一个俄罗斯方块和一个文本编辑器

关键词

  • gamescr
  • ers
  • rightscr
  • block
  • timer
  • mytimer
  • 俄
  • pause
  • 方法
  • resume

得分解答快速导航

  • 帖主:purplethunder
  • binny
  • huzonghui

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo