Java实现俄罗斯方块小游戏。(附完整源代码)
Posted 百思不得小赵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现俄罗斯方块小游戏。(附完整源代码)相关的知识,希望对你有一定的参考价值。
一、游戏背景
俄罗斯方块是俄罗斯人发明的。这人叫阿列克谢·帕基特诺夫(Алексей Пажитнов 英文:Alexey Pazhitnov)。俄罗斯方块原名是俄语Тетрис(英语是Tetris),这个名字来源于希腊语tetra,意思是“四”,而游戏的作者最喜欢网球(tennis)。于是,他把两个词tetra和tennis合而为一,命名为Tetris,这也就是俄罗斯方块名字的由来。
规则说明:
由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。
二、功能实现
开发工具:idea、jdk8
技术汇总:Java基础知识、数组、面向对象、多线程、IO流、Swing。
整体代码分为三个模块:方格模块,七种图形模块,俄罗斯方块主模块。
小方块类:Cell
public class Cell
// 行
private int row;
// 列
private int col;
private BufferedImage image;
public Cell()
public Cell(int row, int col, BufferedImage image)
this.row = row;
this.col = col;
this.image = image;
public int getRow()
return row;
public void setRow(int row)
this.row = row;
public int getCol()
return col;
public void setCol(int col)
this.col = col;
public BufferedImage getImage()
return image;
public void setImage(BufferedImage image)
this.image = image;
public String toString()
return "Cell" +
"row=" + row +
", col=" + col +
", image=" + image +
;
public boolean equals(Object o)
if (this == o)
return true;
if (!(o instanceof Cell))
return false;
Cell cell = (Cell) o;
return getRow() == cell.getRow() &&
getCol() == cell.getCol() &&
Objects.equals(getImage(), cell.getImage());
public int hashCode()
return Objects.hash(getRow(), getCol(), getImage());
//左移动一格
public void left()
col--;
//右移动一格
public void right()
col++;
//下移动一格
public void down()
row++;
四方格图形的父类:Tetromino
public class Tetromino
public Cell[] cells = new Cell[4];
//旋转的状态
protected State[] states;
//声明旋转次数
protected int count = 10000;
//左移方法
public void moveLeft()
for (Cell cell : cells)
cell.left();
//右移方法
public void moveRight()
for (Cell cell : cells)
cell.right();
//单元格下落
public void moveDrop()
for (Cell cell : cells)
cell.down();
//编写随机生成四方格
public static Tetromino randomOne()
int num = (int) (Math.random() * 7);
Tetromino tetromino = null;
switch (num)
case 0:
tetromino = new I();
break;
case 1:
tetromino = new J();
break;
case 2:
tetromino = new L();
break;
case 3:
tetromino = new O();
break;
case 4:
tetromino = new S();
break;
case 5:
tetromino = new T();
break;
case 6:
tetromino = new Z();
break;
return tetromino;
//顺时针旋转的方法
public void rotateRight()
if (states.length == 0)
return;
//旋转次数+1
count++;
State s = states[count % states.length];
Cell cell = cells[0];
int row = cell.getRow();
int col = cell.getCol();
cells[1].setRow(row + s.row1);
cells[1].setCol(col java如何用图形界面显示二维数组俄罗斯方块