当前位置: 技术问答>java相关
求助:谁能告诉我俄罗斯方块的算法和编制思路?谢谢
来源: 互联网 发布时间:2015-04-20
本文导语: 如题!!!!! | import java.awt.*; import java.awt.event.*; import java.applet.*; /* TRTRIS GAME WRITE BY DELFAN EMAIL : webmaster@delfan.com URL : http://www.delfan.com 经典"俄罗斯方块...
如题!!!!!
|
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
/*
TRTRIS GAME
WRITE BY DELFAN
EMAIL : webmaster@delfan.com
URL : http://www.delfan.com
经典"俄罗斯方块"游戏
作者 : DELFAN
EMail : webmaster@delfan.com
主页 : http://www.delfan.com
版本信息:
2002.01.13 基本完成
请任何时候都保留以上信息.谢谢!
*/
public class tetris extends Applet implements Runnable
{
Thread thread;
private Image offImg; // 缓冲图象
private Graphics offG; // 缓冲
final int BaseX = 20;
final int BaseY = 20;
final int BlockSize = 20; // 每个块的大小
//
// 定义游戏中出现的信息
//
final String INFO_READY = "S键 开始游戏";
final String INFO_PAUSE = "P键 继续游戏";
final String INFO_GAMEOVER = "游戏结束 任意键继续";
byte SHAPE[][][][] = // [造型索引][旋转索引][4][坐标]
{
{ // 造型一
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}}, // 旋转一 [][]....
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}}, // 旋转二 [][]....
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}}, // 旋转三 ........
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}} // 旋转四 ........
},
{ // 造型二
{{-1, 0},{ 0, 0},{ 0, 1},{ 1, 1}}, // 旋转一 []
{{ 0,-1},{ 0, 0},{-1, 0},{-1, 1}}, // 旋转二 []() []()
{{-1, 0},{ 0, 0},{ 0, 1},{ 1, 1}}, // 旋转三 [][] []
{{ 0,-1},{ 0, 0},{-1, 0},{-1, 1}} // 旋转四
},
{ // 造型三
{{ 1, 0},{ 0, 0},{ 0, 1},{-1, 1}}, // 旋转一 []
{{ 0,-1},{ 0, 0},{ 1, 0},{ 1, 1}}, // 旋转二 ()[] ()[]
{{ 1, 0},{ 0, 0},{ 0, 1},{-1, 1}}, // 旋转三 [][] []
{{ 0,-1},{ 0, 0},{ 1, 0},{ 1, 1}} // 旋转四
},
{ // 造型四
{{ 0, 0},{ 1, 0},{ 2, 0},{ 0, 1}}, // 旋转一 [] []
{{ 0,-2},{ 0,-1},{ 0, 0},{ 1, 0}}, // 旋转二 ()[][] []() [][]() []
{{-2, 0},{-1, 0},{ 0, 0},{ 0,-1}}, // 旋转三 [] [] ()[]
{{-1, 0},{ 0, 0},{ 0, 1},{ 0, 2}} // 旋转四 []
},
{ // 造型五
{{-2, 0},{-1, 0},{ 0, 0},{ 0, 1}}, // 旋转一 []
{{ 0, 0},{ 1, 0},{ 0, 1},{ 0, 2}}, // 旋转二 [][]() [] [] ()[]
{{ 0,-1},{ 0, 0},{ 1, 0},{ 2, 0}}, // 旋转三 [] []() ()[][] []
{{ 0,-2},{ 0,-1},{ 0, 0},{-1, 0}} // 旋转四 []
},
{ // 造型六
{{-1, 0},{ 0, 0},{ 1, 0},{ 0, 1}}, // 旋转一
{{ 0,-1},{ 0, 0},{ 0, 1},{ 1, 0}}, // 旋转二 [] [] []
{{-1, 0},{ 0, 0},{ 1, 0},{ 0,-1}}, // 旋转三 []()[] ()[] []()[] []()
{{-1, 0},{ 0, 0},{ 0,-1},{ 0, 1}} // 旋转四 [] [] []
},
{ // 造型六
{{ 0,-1},{ 0, 0},{ 0, 1},{ 0, 2}}, // 旋转一 []
{{-1, 0},{ 0, 0},{ 1, 0},{ 2, 0}}, // 旋转二 () []()[][]
{{ 0,-1},{ 0, 0},{ 0, 1},{ 0, 2}}, // 旋转三 []
{{-1, 0},{ 0, 0},{ 1, 0},{ 2, 0}} // 旋转四 []
}
};
//
// 定义游戏中使用的变量
//
final int[] Speeds = {60,50,40,30,20,15,10,5,3,1}; // 速度值定义
byte[][] Ground = new byte[10][20]; // 在 10 X 20 的场地游戏,预留顶部放置方块的空间一格
byte[][] NextShape = new byte[4][2]; // 存放下块造型
int CurrentX; // 当前X左边
int CurrentY; // 当前Y坐标
int CurrentShapeIndex; // 当前造型索引
int CurrentTurnIndex; // 当前旋转索引
int CurrentColorIndex; // 当前造型色彩索引
int NextShapeIndex; // 下块出现的造型的索引
int GameSpeed = 0; // 游戏速度
int SpeedVar = 0; // 延时计数
int FlashSpeed = 60; // 信息提示闪烁速度
int FlashVar = 0; // 闪烁延时计数
int ClearTotalLine = 0; // 消掉的总行数
Color[] Colors = {Color.black,Color.red,Color.green,Color.blue,Color.magenta,Color.yellow,Color.orange,Color.pink};
//
// 定义游戏中出现的状态
//
final int READY = 0;
final int GAMING = 1;
final int PAUSE = 2;
final int GAMEOVER = 3;
private int CurrentMode = READY ; // 游戏状态变量
String InfoStr = new String(INFO_READY);
public void init()
{
offImg = createImage(getSize().width, getSize().height); // 创建缓冲图象大小
offG = offImg.getGraphics();
setBackground(Color.black);
}
public void MakeNextShape()
{
NextShapeIndex = (int)(Math.random()*70) /10;
NextShape = SHAPE[NextShapeIndex][0];
}
public void ClearGround() // 清除场地
{
for(int i=0; i
import java.awt.event.*;
import java.applet.*;
/*
TRTRIS GAME
WRITE BY DELFAN
EMAIL : webmaster@delfan.com
URL : http://www.delfan.com
经典"俄罗斯方块"游戏
作者 : DELFAN
EMail : webmaster@delfan.com
主页 : http://www.delfan.com
版本信息:
2002.01.13 基本完成
请任何时候都保留以上信息.谢谢!
*/
public class tetris extends Applet implements Runnable
{
Thread thread;
private Image offImg; // 缓冲图象
private Graphics offG; // 缓冲
final int BaseX = 20;
final int BaseY = 20;
final int BlockSize = 20; // 每个块的大小
//
// 定义游戏中出现的信息
//
final String INFO_READY = "S键 开始游戏";
final String INFO_PAUSE = "P键 继续游戏";
final String INFO_GAMEOVER = "游戏结束 任意键继续";
byte SHAPE[][][][] = // [造型索引][旋转索引][4][坐标]
{
{ // 造型一
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}}, // 旋转一 [][]....
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}}, // 旋转二 [][]....
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}}, // 旋转三 ........
{{ 0, 0},{ 1, 0},{ 0, 1},{ 1, 1}} // 旋转四 ........
},
{ // 造型二
{{-1, 0},{ 0, 0},{ 0, 1},{ 1, 1}}, // 旋转一 []
{{ 0,-1},{ 0, 0},{-1, 0},{-1, 1}}, // 旋转二 []() []()
{{-1, 0},{ 0, 0},{ 0, 1},{ 1, 1}}, // 旋转三 [][] []
{{ 0,-1},{ 0, 0},{-1, 0},{-1, 1}} // 旋转四
},
{ // 造型三
{{ 1, 0},{ 0, 0},{ 0, 1},{-1, 1}}, // 旋转一 []
{{ 0,-1},{ 0, 0},{ 1, 0},{ 1, 1}}, // 旋转二 ()[] ()[]
{{ 1, 0},{ 0, 0},{ 0, 1},{-1, 1}}, // 旋转三 [][] []
{{ 0,-1},{ 0, 0},{ 1, 0},{ 1, 1}} // 旋转四
},
{ // 造型四
{{ 0, 0},{ 1, 0},{ 2, 0},{ 0, 1}}, // 旋转一 [] []
{{ 0,-2},{ 0,-1},{ 0, 0},{ 1, 0}}, // 旋转二 ()[][] []() [][]() []
{{-2, 0},{-1, 0},{ 0, 0},{ 0,-1}}, // 旋转三 [] [] ()[]
{{-1, 0},{ 0, 0},{ 0, 1},{ 0, 2}} // 旋转四 []
},
{ // 造型五
{{-2, 0},{-1, 0},{ 0, 0},{ 0, 1}}, // 旋转一 []
{{ 0, 0},{ 1, 0},{ 0, 1},{ 0, 2}}, // 旋转二 [][]() [] [] ()[]
{{ 0,-1},{ 0, 0},{ 1, 0},{ 2, 0}}, // 旋转三 [] []() ()[][] []
{{ 0,-2},{ 0,-1},{ 0, 0},{-1, 0}} // 旋转四 []
},
{ // 造型六
{{-1, 0},{ 0, 0},{ 1, 0},{ 0, 1}}, // 旋转一
{{ 0,-1},{ 0, 0},{ 0, 1},{ 1, 0}}, // 旋转二 [] [] []
{{-1, 0},{ 0, 0},{ 1, 0},{ 0,-1}}, // 旋转三 []()[] ()[] []()[] []()
{{-1, 0},{ 0, 0},{ 0,-1},{ 0, 1}} // 旋转四 [] [] []
},
{ // 造型六
{{ 0,-1},{ 0, 0},{ 0, 1},{ 0, 2}}, // 旋转一 []
{{-1, 0},{ 0, 0},{ 1, 0},{ 2, 0}}, // 旋转二 () []()[][]
{{ 0,-1},{ 0, 0},{ 0, 1},{ 0, 2}}, // 旋转三 []
{{-1, 0},{ 0, 0},{ 1, 0},{ 2, 0}} // 旋转四 []
}
};
//
// 定义游戏中使用的变量
//
final int[] Speeds = {60,50,40,30,20,15,10,5,3,1}; // 速度值定义
byte[][] Ground = new byte[10][20]; // 在 10 X 20 的场地游戏,预留顶部放置方块的空间一格
byte[][] NextShape = new byte[4][2]; // 存放下块造型
int CurrentX; // 当前X左边
int CurrentY; // 当前Y坐标
int CurrentShapeIndex; // 当前造型索引
int CurrentTurnIndex; // 当前旋转索引
int CurrentColorIndex; // 当前造型色彩索引
int NextShapeIndex; // 下块出现的造型的索引
int GameSpeed = 0; // 游戏速度
int SpeedVar = 0; // 延时计数
int FlashSpeed = 60; // 信息提示闪烁速度
int FlashVar = 0; // 闪烁延时计数
int ClearTotalLine = 0; // 消掉的总行数
Color[] Colors = {Color.black,Color.red,Color.green,Color.blue,Color.magenta,Color.yellow,Color.orange,Color.pink};
//
// 定义游戏中出现的状态
//
final int READY = 0;
final int GAMING = 1;
final int PAUSE = 2;
final int GAMEOVER = 3;
private int CurrentMode = READY ; // 游戏状态变量
String InfoStr = new String(INFO_READY);
public void init()
{
offImg = createImage(getSize().width, getSize().height); // 创建缓冲图象大小
offG = offImg.getGraphics();
setBackground(Color.black);
}
public void MakeNextShape()
{
NextShapeIndex = (int)(Math.random()*70) /10;
NextShape = SHAPE[NextShapeIndex][0];
}
public void ClearGround() // 清除场地
{
for(int i=0; i