用java写一份俄罗斯方块的代码
import java.awt.Color;
import java.awt.Graphics;
import java.util.*;
/**
* Tetris 俄罗斯方块游戏
*/
public class Tetris {
// 方块数组,每个元素代表一个小方块,1表示有方块,0表示没有
private int[][] blockArray = new int[20][10];
// 方块的颜色数组,存储每个小方块的颜色
private Color[][] colorArray = new Color[20][10];
// 当前正在下落的方块对象
private Block currentBlock = null;
// 生成随机数对象
private Random random = new Random();
/** 俄罗斯方块构造函数 */
public Tetris() { // 创建Tetris对象时创建一个新的Block对象作为当前正在下落的Block对象。 // 这里只是创造了一个Block,并不会显示出来。 currentBlock = new Block(); } /** 画图函数 */ public void draw(Graphics g) { for (int i=0; i<20; i++) { for (int j=0; j<10; j++) { if (blockArray[i][j] == 1) { g.setColor(colorArray[i][j]); g.fillRect(j*30, i*30, 30, 30); } } } if (currentBlock != null) { currentBlock.drawMe(g); } } /** 方向键处理函数 */ public void keyPressed(int keyCode) { switch (keyCode) { case 37: currentBlock.moveLeft(); break; case 38: currentBlock.turnRight(); break; case 39: currentBlock.moveRight(); break; case 40: dropDown(); break;} repaintGamePanel() ; } /** 向下加速处理函数 */ public void keyReleased(int keyCode) {} /** 重画游戏界面函数 */ public void repaintGamePanel() {} /** 方向键处理函数 */ public void dropDown(){ while (!currentBlcokIsAtBottom()) moveCurrentBlcokOneStepDown() ; cleanFullLineAndMoveAboveLinesDown() ; createNewCurrentBlcok() ; repaintGamePanel() ;} /** 判断当前正在运动的block是否到底部了*/ private boolean currentBlcokIsAtBottom(){ return true/false;} /** 让当前block往低端运动一格*/ private void moveCurrentBlcokOneStepDown(){ ...} /** 消去已完全占满的行并将上端所有行往低端迁移一格*/ private void cleanFullLineAndMoveAboveLinesDown(){ ...} /*** 创造新block作当前block*/ private void createNewCurrentBlcok(){ ...} /*** Block内部定义 ***/ class Block{ // 定义7中变化情况 int [][] shapeTable = {{...},{...},...}; // block中心位子 int centerX, centerY ; // block当前变化情况 int shapeIndex=0 ; // block所有小方格位子以及其颜色 ArrayList <Point> pointList = new ArrayList<Point> (); ArrayList <Color> colorList = new ArrayList<Color> (); /*** 构造函数 ***/ public Block (){ centerX=4 ;centerY=0 ;shapeIndex=randomShapeIndex () ;createPointsByShapeIndex () ;createColorsByShapeIndex ();} /*** 释放旋转 ***/ public turnRight(){ shapeIndex=(shapeIndex+1 ) % 7 ;;createPointsByShapeIndex () ;;createColorsByShapeIndex ();} /*** 移动 ***/ pubic moveLeft (){ centerX-- ;;if (! isValidPosition ())centerX++ ;;else createPointsByShapeIndex () ;;createColorsByShape
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!