设为首页收藏本站

仙剑之十里坡

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4010|回复: 6
打印 上一主题 下一主题

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

 关闭 [复制链接]

28

主题

11

听众

5325

积分

管理员

昨日黄昏

管理员

  • TA的每日心情

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

    [LV.2]偶尔看看I

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

    润泽万物 匠心独运

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


    这一讲的三个类
    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;
    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;
    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);
    }
    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;
        newGame.setText("开始");
       }
      }
      if (e.getSource()==endGame) {
       System.exit(0);
      }
    }
    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 void down() {
      if (minYes(0, 1)) {
       for (int i = 0; i < 4; i++) {
        act.y+=1;
       }
       repaint();
      }else {
       for (int i = 0; i < 4; i++) {
        map[act.x][act.y]=1;
       }
       if (!newAct()) {
        temp = r.nextInt(7);
        nextAct();
       }else {
        System.out.println("挂了");
        //挂掉了!= .=
       }
       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:
        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();
       }
      }
    }
    }
    gameAct.class
    package eLuoSiFangKuai;
    public class gameAct {
    int x;
    int y;
    }
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    转播转播0 分享淘帖0 分享分享0 收藏收藏0

    489

    主题

    2

    听众

    5468

    积分

    名扬四海

    会员等级: 7

  • TA的每日心情

    4 天前
  • 签到天数: 1855 天

    [LV.Master]伴坛终老

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

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

    最爱菱纱
    幸福:65℃
    2
    发表于 2011-5-18 20:11:29 |只看该作者
    话说发了这么多,我都不知道发得是什么
    回复

    使用道具 举报

    28

    主题

    11

    听众

    5325

    积分

    管理员

    昨日黄昏

    管理员

  • TA的每日心情

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

    [LV.2]偶尔看看I

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

    润泽万物 匠心独运

    单身中……
    帮我摆脱单身吧
    3
    发表于 2011-5-18 21:43:50 |只看该作者
    说实话,我也没有指望十里坡除了残阳以外的人能看懂了~~我就算发基础教程都不一定能懂,更不用说这种非0基础教程了

    点评

    蕴焚七虞  小雨哥赶紧的时空传3,小虞等着呢~~~~~~~  发表于 2011-5-23 19:12
    回复

    使用道具 举报

    157

    主题

    2

    听众

    5946

    积分

    名扬四海

    挺尸中请勿打扰。。。。。

    会员等级: 7

  • TA的每日心情
    无聊
    2011-8-13 00:03
  • 签到天数: 256 天

    [LV.8]以坛为家I

    精华
    1
    积分
    5946
    历练
    4
    声望
    68
    人气
    68

    出神入化

    单身中……
    帮我摆脱单身吧
    4
    发表于 2011-5-18 22:07:52 |只看该作者
    回复 3# 七夕小雨


        于是就不能发点普及性的么》。。我是个刚学完函数的娃啊- -
    回复

    使用道具 举报

    1082

    主题

    15

    听众

    1万

    积分

    管理员

    魔尊

    管理员

  • TA的每日心情
    无聊
    2024-4-22 00:16
  • 签到天数: 2281 天

    [LV.Master]伴坛终老

    精华
    3
    积分
    18267
    历练
    9
    声望
    342
    人气
    6122

    出神入化 润泽万物 金融巨子 神仙眷侣

    佛珠
    幸福:605℃
    5
    发表于 2011-5-18 23:57:17 |只看该作者
    回复 4# 七千


        又不是知识普及的论坛 想学的话自己去学java 不想学的话不学也无妨 iOS是C-Objective开发的 Android支持JAVA和C++ 所以学好C语言其实很多东西就豁然开朗了 再说编程语言重在编程思想 语法什么的差别也不是很大

    点评

    残阳泪珀  供有需要的人学习 各取所需  发表于 2011-5-19 13:50
    七千  于是不是知识普及把这个发出来干啥- -  发表于 2011-5-19 13:23
    回复

    使用道具 举报

    1

    主题

    1

    听众

    36

    积分

    略有小成

    会员等级: 2

    该用户从未签到

    精华
    0
    积分
    36
    历练
    0
    声望
    2
    人气
    15
    单身中……
    帮我摆脱单身吧
    6
    发表于 2011-5-25 20:23:42 |只看该作者
    编程……汗……只学过QBX,还没学全……
    爱·仙剑
    回复

    使用道具 举报

    5

    主题

    0

    听众

    390

    积分

    论坛元老

    论坛元老

  • TA的每日心情
    无聊
    2013-7-28 21:05
  • 签到天数: 36 天

    [LV.5]常住仙友I

    精华
    0
    积分
    390
    历练
    0
    声望
    4
    人气
    154

    神仙眷侣

    落落苏
    幸福:47℃
    7
    发表于 2011-5-25 20:33:42 |只看该作者
    额。。。只想知道这个编程用来干嘛的?
    回复

    使用道具 举报

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

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

    GMT+8, 2024-11-27 07:45 , Processed in 0.365070 second(s), 64 queries .

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部