GameAreaPanel.java~85~
上传用户:liming9091
上传日期:2014-10-27
资源大小:3376k
文件大小:3k
源码类别:

Java编程

开发平台:

Java

  1. package russiagame;
  2. /**
  3.  * <p>Title: </p>
  4.  * <p>Description: </p>
  5.  * <p>Copyright: Copyright (c) 2003</p>
  6.  * <p>Company: </p>
  7.  * @author not attributable
  8.  * @version 1.0
  9.  */
  10. import javax.swing.*;
  11. import java.awt.*;
  12. import java.awt.event.*;
  13. public class GameAreaPanel
  14.     extends Panel {
  15.   private Timer timer; //记时器,用于控制下落时间间隔
  16.   private int nTime = 1000; //速度,创建记时器是使用
  17.   private Root root; //要落下的方块的引用,即根类
  18.   private GameTable gTable; //创建一个游戏桌
  19.   private int nWhich; //标志创建哪一个要下落的方块
  20.   private int tempnWhich; //标志下一个要创建的方块,即提前显示下落块
  21.   private int nScore = 0; //每消一行加10分,用来记录总分数
  22.   private boolean canMove = false; //标志是否响应键盘
  23.   private Image myImage0, myImage1; //加载两个图片,用来覆盖背景和组成方块
  24.   private boolean isRun = true; //标志是开始还是暂停,一钮两用
  25.   public GameAreaPanel(GameTable gTable) {
  26.     myImage0 = getToolkit().getImage("b0.jpg");
  27.     myImage1 = getToolkit().getImage("b1.jpg");
  28.     gTable.myTable = new int[gTable.x][gTable.y];
  29.     for (int i = 0; i < gTable.x; i++)
  30.       for (int j = 0; j < gTable.y; j++)
  31.         gTable.myTable[i][j] = 0;
  32.   }
  33.   public void Init() {
  34.     timer.stop();
  35.     for (int i = 0; i < gTable.x; i++) //重新给游戏桌置0标志
  36.       for (int j = 0; j < gTable.y; j++) {
  37.         gTable.myTable[i][j] = 0;
  38.       }
  39.     repaint();
  40.     nScore = 0;
  41.     switch (nWhich) { //产生新的方块
  42.       case 1:
  43.         root = new One();
  44.         break;
  45.       case 2:
  46.         root = new Two();
  47.         break;
  48.       case 3:
  49.         root = new Three();
  50.         break;
  51.       case 4:
  52.         root = new Four();
  53.         break;
  54.       case 5:
  55.         root = new Five();
  56.         break;
  57.       case 6:
  58.         root = new Six();
  59.         break;
  60.       case 7:
  61.         root = new Seven();
  62.         break;
  63.       case 8:
  64.         root = new Eight();
  65.         break;
  66.       default:
  67.         break;
  68.     }
  69.     tempnWhich = ( ( (int) Math.round(Math.random() * 12345)) % 8) + 1;
  70.     nWhich = tempnWhich;
  71.     root.begin();
  72.     repaint();
  73.     canMove = false;
  74.   }
  75.   public void paint(Graphics g) {
  76.     for (int i = 0; i < gTable.x; i++) //根据桌子上的标记决定是否画方块
  77.       for (int j = 0; j < gTable.y; j++) {
  78.         if (gTable.myTable[i][j] == 1) { //有,画蓝方块
  79.           g.drawImage(myImage1, 0 + i * (15 + 2) + 2, 0 + j * (15 + 2) + 2, this);
  80.         }
  81.         else if (gTable.myTable[i][j] == 0) { //无,画白方块
  82.           g.drawImage(myImage0, 0 + i * (15 + 2) + 2, 0 + j * (15 + 2) + 2, this);
  83.         }
  84.       }
  85. //      nextTo(g);//画下一个提前显示的方块
  86.   }
  87.   public void actionPerformed(ActionEvent e) {
  88.     if (isRun) { //是开始
  89.       timer.start();
  90.       isRun = !isRun;
  91.       canMove = true; //可以响应键盘
  92.     }
  93.     else { //是暂停
  94.       timer.stop();
  95.       isRun = !isRun;
  96.       canMove = false; //不可以响应键盘
  97.     }
  98.   }
  99.   public void UpdateGraph(GameTable gameTable)
  100.   {
  101.     gTable = gameTable;
  102.     this.repaint();
  103.   }
  104.   public void update(Graphics g) {
  105.     paint(g); //防止闪烁
  106.   }
  107. }