设为首页收藏本站

仙剑之十里坡

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3418|回复: 2
打印 上一主题 下一主题

七夕小雨教程系列java_swing俄罗斯方块教程[3]_完

 关闭 [复制链接]

28

主题

11

听众

5325

积分

管理员

昨日黄昏

管理员

  • TA的每日心情

    2010-9-25 00:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    精华
    5
    积分
    5325
    历练
    10
    声望
    119
    人气
    141

    润泽万物 匠心独运

    单身中……
    帮我摆脱单身吧
    跳转到指定楼层
    1
    发表于 2011-5-19 21:19:00 |只看该作者 |倒序浏览


    最终完成的三个CLASS

    gameAct.class

    package eLuoSiFangKuai;
    public class gameAct {
    int x;
    int y;
    }

    gameMain.class

    package eLuoSiFangKuai;
    import javax.swing.*;
    public class gameMain extends JFrame{
    public gameMain() {
      super("俄罗斯方块1.0V---七夕小雨作品");
      gameWin g = new gameWin();
      add(g);
      setSize(380,420);
      setLocation(200, 200);
      setVisible(true);
    }
    public static void main(String[] args) {
      new gameMain();
    }
    }

    gameWin.class

    package eLuoSiFangKuai;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.Timer;
    public class gameWin extends JPanel implements ActionListener,KeyListener{
    JButton newGame = new JButton("开始");
    JButton endGame = new JButton("退出");
    int fenShu=0,speed=0,tFenShu=0;
    gameAct[] act = new gameAct[4];
    gameAct[] actTemp = new gameAct[4];
    Random r = new Random();
    boolean start=false;
    int[][] map = new int[10][18];
    Timer t;int temp;
    JDialog dialog = new JDialog();
    JLabel label = new JLabel();
    JButton button = new JButton("ok");
    public gameWin() {
      for (int i = 0; i < act.length; i++) {
       act = new gameAct();
      }
      for (int i = 0; i < act.length; i++) {
       actTemp = new gameAct();
      }
      for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 18; j++) {
        map[j] = 0;
       }
      }
      setLayout(new FlowLayout(FlowLayout.RIGHT));
      add(newGame);
      add(endGame);
      newGame.addActionListener(this);
      endGame.addActionListener(this);
      addKeyListener(this);
      dialog.setLayout(new GridLayout(2,1));
      dialog.add(label);
      dialog.add(button);
      button.addActionListener(this);
      dialog.setSize(200,100);
      dialog.setLocation(200, 200);
      dialog.setVisible(false);
      
    }
    public void paintComponent(Graphics g){
      super.paintComponent(g);
      g.drawRect(9, 10, 200, 360);
      g.drawString("分数"+fenShu, 220, 60);
      g.drawLine(220, 65, 360, 65);
      g.drawString("速度"+speed, 220, 90);
      g.drawLine(220, 95, 360, 95);
      g.drawString("下一个方块", 250, 120);
      g.drawString("俄罗斯方块1.0v", 220, 340);
      g.drawString("七夕小雨", 220, 360);
      ////////////////////////
      if (start) {
       g.setColor(new Color(255,0,0));
       for (int i = 0; i < 4; i++) {
        g.fillRect(10+act.x*20, 10+act.y*20, 20, 20);
       }
       for (int i = 0; i < 10; i++) {
        for (int j = 0; j <18; j++) {
         if (map[j]==1) {
          g.fillRect(10+i*20, 10+j*20, 20, 20);
         }
        }
       }
       g.setColor(new Color(0,0,255));
       for (int i = 0; i < 4; i++) {
        g.fillRect(220+actTemp.x*20, 160+actTemp.y*20, 20, 20);
       }
      }
    }
    private boolean newAct() {
      switch (temp) {
      case 0:
       act[0].x =3;act[0].y=0;
       act[1].x =4;act[1].y=0;
       act[2].x =2;act[2].y=1;
       act[3].x =3;act[3].y=1;
       break;
      case 1:
       act[0].x =1;act[0].y=0;
       act[1].x =2;act[1].y=0;
       act[2].x =3;act[2].y=0;
       act[3].x =4;act[3].y=0;
       break;
      case 2:
       act[0].x =2;act[0].y=0;
       act[1].x =3;act[1].y=0;
       act[2].x =2;act[2].y=1;
       act[3].x =3;act[3].y=1;
       break;
      case 3:
       act[0].x =2;act[0].y=0;
       act[1].x =2;act[1].y=1;
       act[2].x =2;act[2].y=2;
       act[3].x =3;act[3].y=2;
       break;
      case 4:
       act[0].x =3;act[0].y=0;
       act[1].x =3;act[1].y=1;
       act[2].x =3;act[2].y=2;
       act[3].x =2;act[3].y=2;
       break;
      case 5:
       act[0].x =3;act[0].y=0;
       act[1].x =2;act[1].y=1;
       act[2].x =3;act[2].y=1;
       act[3].x =4;act[3].y=1;
       break;
      case 6:
       act[0].x =2;act[0].y=0;
       act[1].x =3;act[1].y=0;
       act[2].x =3;act[2].y=1;
       act[3].x =4;act[3].y=1;
       break;
      }
      for (int i = 0; i < 4; i++) {
       if (maxYes(act.x, act.y)) {
        return false;
       }
      }
      return true;
    }
    public void nextAct(){
      switch (temp) {
      case 0:
       actTemp[0].x =3;actTemp[0].y=0;
       actTemp[1].x =4;actTemp[1].y=0;
       actTemp[2].x =2;actTemp[2].y=1;
       actTemp[3].x =3;actTemp[3].y=1;
       break;
      case 1:
       actTemp[0].x =1;actTemp[0].y=0;
       actTemp[1].x =2;actTemp[1].y=0;
       actTemp[2].x =3;actTemp[2].y=0;
       actTemp[3].x =4;actTemp[3].y=0;
       break;
      case 2:
       actTemp[0].x =2;actTemp[0].y=0;
       actTemp[1].x =3;actTemp[1].y=0;
       actTemp[2].x =2;actTemp[2].y=1;
       actTemp[3].x =3;actTemp[3].y=1;
       break;
      case 3:
       actTemp[0].x =2;actTemp[0].y=0;
       actTemp[1].x =2;actTemp[1].y=1;
       actTemp[2].x =2;actTemp[2].y=2;
       actTemp[3].x =3;actTemp[3].y=2;
       break;
      case 4:
       actTemp[0].x =3;actTemp[0].y=0;
       actTemp[1].x =3;actTemp[1].y=1;
       actTemp[2].x =3;actTemp[2].y=2;
       actTemp[3].x =2;actTemp[3].y=2;
       break;
      case 5:
       actTemp[0].x =3;actTemp[0].y=0;
       actTemp[1].x =2;actTemp[1].y=1;
       actTemp[2].x =3;actTemp[2].y=1;
       actTemp[3].x =4;actTemp[3].y=1;
       break;
      case 6:
       actTemp[0].x =2;actTemp[0].y=0;
       actTemp[1].x =3;actTemp[1].y=0;
       actTemp[2].x =3;actTemp[2].y=1;
       actTemp[3].x =4;actTemp[3].y=1;
       break;
      }
    }
    public void actionPerformed(ActionEvent e) {
      if (e.getSource()==newGame) {
       if (e.getActionCommand().equals("开始")) {
        newGame.setText("重置");
        requestFocus(true);
        start = true;
        temp = r.nextInt(7);
        if (!newAct()) {
         t = new Timer(1000-(100*speed),new myTimer());
         t.start();
         temp = r.nextInt(7);
         nextAct();
         repaint();
        }else {
         //这里是游戏失败的情况;
         return;
        }
       }else {
        start = false;
        fenShu = 0;
        tFenShu=0;
        speed=0;
        for (int i = 0; i < 10; i++) {
         for (int j = 0; j < 18; j++) {
          map[j]=0;
         }
        }
        newGame.setText("开始");
       }
      }
      if (e.getSource()==endGame) {
       System.exit(0);
      }
      if (e.getSource()==button) {
       fenShu = 0;
       tFenShu=0;
       speed=0;
       start =false;
       for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 18; j++) {
         map[j]=0;
        }
       }
       newGame.setText("开始");
       dialog.setVisible(false);
       repaint();
      }
    }
    public void Move(int x, int y) {
      if (minYes(x, y)) {
       for (int i = 0; i < 4; i++) {
        act.x+=x;
        act.y+=y;
       }
      }
      repaint();
    }
    private int delact() {
      int line = 0;
      for (int i = 0; i < 18; i++) {
       int j;
       for (j = 0; j < 10; j++) {
        if (map[j]==0) {
         break;
        }
       }
       if (j>=10) {
        line +=1;
        if (i!=0) {
         for (int j2 =i-1; j2 >0; j2--) {
          for (int k = 0; k < 10; k++) {
           map[k][j2+1] = map[k][j2];
          }
         }
         for (int j2 = 0; j2 < 10; j2++) {
          map[0][j2] = 0;
         }
        }
       }
      }
      repaint();
      return line;
    }
    private void down() {
      if (minYes(0, 1)) {
       for (int i = 0; i < 4; i++) {
        act.y+=1;
       }
       repaint();
      }else {
       t.stop();
       for (int i = 0; i < 4; i++) {
        map[act.x][act.y]=1;
       }
       int line = delact();
       if (line!=0) {
        fenShu = fenShu+10*line*line;
        if (fenShu-tFenShu>=300) {
         tFenShu = fenShu;
         if (speed <=9) {
          speed+=1;
         }
        }
       }
       if (!newAct()) {
        temp = r.nextInt(7);
        nextAct();
        t.start();
       }else {
        t.stop();
        label.setText("游戏结束,您的分数是"+fenShu);
        dialog.setVisible(true);
       }
       repaint();
      }
    }
    public void up(){
      gameAct[] tt = new gameAct[4];
      for (int i = 0; i < tt.length; i++) {
       tt = new gameAct();
       tt.x = act.x;
       tt.y = act.y;
      }
      int cx = (tt[0].x+tt[1].x+tt[2].x+tt[3].x)/4;
      int cy = (tt[0].y+tt[1].y+tt[2].y+tt[3].y)/4;
      for (int i = 0; i < tt.length; i++) {
       tt.x = cx+cy-act.y;
       tt.y = cy-cx+act.x;
      }
      for (int i = 0; i < tt.length; i++) {
       if (!maxYes(tt.x, tt.y)) {
        return;
       }
      }
      for (int i = 0; i < tt.length; i++) {
       act.x = tt.x;
       act.y = tt.y;
      }
      repaint();
    }
    public boolean minYes(int x, int y){
      for (int i = 0; i < 4; i++) {
       if (!maxYes(act.x+x, act.y+y)) {
        return false;
       }
      }
      return true;
    }
    public boolean maxYes(int x, int y){
      if (x<0||x>=10||y<-1||y>=18) {
       return false;
      }
      if (map[x][y]==1) {
       return false;
      }
      return true;
    }
    public void keyPressed(KeyEvent e) {
      if (start) {
       switch (e.getKeyCode()) {
       case KeyEvent.VK_DOWN:
        down();
        break;
       case KeyEvent.VK_UP:
        up();
        break;
       case KeyEvent.VK_LEFT:
        Move(-1, 0);
        break;
       case KeyEvent.VK_RIGHT:
        Move(1, 0);
        break;
       default:
        break;
       }
      }
    }
    public void keyReleased(KeyEvent arg0) { }
    public void keyTyped(KeyEvent arg0) { }
    public class myTimer implements ActionListener{
      public void actionPerformed(ActionEvent e) {
       if (start) {
        down();
       }
      }
    }
    }
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    转播转播0 分享淘帖0 分享分享0 收藏收藏0

    82

    主题

    2

    听众

    1240

    积分

    仗剑行侠

    会员等级: 5

  • TA的每日心情
    无聊
    2018-6-21 14:11
  • 签到天数: 171 天

    [LV.7]常住仙友III

    精华
    0
    积分
    1240
    历练
    0
    声望
    7
    人气
    380

    黑色羽翼 神仙眷侣

    单身中……
    帮我摆脱单身吧
    2
    发表于 2011-5-19 21:56:56 |只看该作者
    一大堆看不懂的字符...
    回复

    使用道具 举报

    489

    主题

    2

    听众

    5468

    积分

    名扬四海

    会员等级: 7

  • TA的每日心情

    昨天 14:45
  • 签到天数: 1855 天

    [LV.Master]伴坛终老

    精华
    0
    积分
    5468
    历练
    0
    声望
    246
    人气
    69

    黑色羽翼 神仙眷侣 转帖之王

    最爱菱纱
    幸福:65℃
    3
    发表于 2011-5-20 17:21:06 |只看该作者
    终于没了(哈哈哈)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    手机版|Archiver|仙剑之十里坡 ( 苏ICP备11022766号 )  

    GMT+8, 2024-11-24 09:00 , Processed in 0.712439 second(s), 42 queries .

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部