本文实例为大家分享了java实现俄罗斯方块的具体代码,供大家参考,具体内容如下
俄罗斯方块设计思想
俄罗斯方块都从小玩到大吧,什么规则大家都知道了吧,以前感觉那玩意贼好玩,但是就是老赢不了,现在学会了自己写一个天天练!
键盘操作:
左键:左移; 右键:右移;
上键:变换造型 下键:加速下掉(没毛病吧,没有继续整)
任意一行的方块满格,这一行就消除,消除一行方块得10分,目前小主我还没有设置关卡,各位喜欢的宝宝们可以自己设置关卡哦;
那么那些方块的造型到底从哪里来的呢,那就是我们自己设计的,常见的几种造型就是:I型,T型,L型,田字格型等等吧,自己个加呗!
那么到底咋整的咧?其实啊就是一个4*4的数组,当然了你开心设计n*n也可以,你牛皮你说了算!
那么下面举了一个例子,用来告诉你们为啥你们看见的造型可以变换的原因就是这样提前设计好,0为空,1为填充格,这样你就可以在你的游戏里面凹造型了!
算了:直接放图先看代码运行结果吧:
喜欢吗?喜欢就直接做吧,可能代码写的不够好,请各位大神多多包涵,我回头也会多总结,会不断更新代码的;
GamePanel类:游戏界面类,整个方块掉落和显示,游戏的逻辑斯洛都在这个类里面实现;
package tetris;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GamePanel extends JPanel implements KeyListener{
private int mapRow = 21;
private int mapCol = 12;
private int mapGame[][] = new int[mapRow][mapCol];//开辟一个二维数组空间,用来存放我们的地图信息
private Timer timer;
private int score = 0;//记录成绩
Random random = new Random();
private int curShapeType = -1;
private int curShapeState = -1;//设置当前的形状类型和当前的形状状态
private int nextShapeType = -1;
private int nextShapeState = -1;//设置下一次出现的方块组的类型和状态
private int posx = 0;
private int posy = 0;
private final int shapes[][][] = new int[][][]{
//T字形按逆时针的顺序存储
{
{0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0},
{0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0},
{1,1,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0},
{0,1,0,0, 0,1,1,0, 0,1,0,0, 0,0,0,0}
},
//I字形按逆时针的顺序存储
{
{0,0,0,0, 1,1,1,1, 0,0,0,0, 0,0,0,0},
{0,1,0,0, 0,1,0,0, 0,1,0,0, 0,1,0,0},
{0,0,0,0, 1,1,1,1, 0,0,0,0, 0,0,0,0},
{0,1,0,0, 0,1,0,0, 0,1,0,0, 0,1,0,0}
},
//倒Z形按逆时针的顺序存储
{
{0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0},
{1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0},
{0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0},
{1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0}
},
//Z形按逆时针的顺序存储
{
{1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,