java手机游戏的例子

俄罗斯方块——由——java源代码提供

导入Java . awt . *;

导入Java . awt . event . *;

//俄罗斯方块类

公共类ERS_Block扩展框架{

公共静态布尔isPlay = false

public static int level=1,score = 0;

公共静态TextField scoreField、levelField

公共静态MyTimer计时器;

GameCanvas gameScr

public static void main(String[]argus){

ERS_Block ers = new ERS_Block("俄罗斯方块游戏V1.0作者:Vincent ");

window listener win _ listener = new win listener();

ers . addwindowlistener(win _ listener);

}

//俄罗斯方块类的构造方法

ERS_Block(字符串标题){

超级(标题);

setSize(600,480);

set layout(new GridLayout(1,2));

game Cr = new game canvas();

games Cr . addkey listener(games Cr);

timer = new my timer(gameScr);

timer . set daemon(true);

timer . start();

timer . suspend();

添加(gameScr);

Panel rights Cr = new Panel();

rights Cr . set layout(new GridLayout(2,1,0,30));

rights Cr . setsize(120500);

add(rights Cr);

//右侧信息表单的布局

my panel info SCR = new my panel();

info SCR . set layout(new GridLayout(4,1,0,5));

infoScr.setSize(120,300);

rights Cr . add(infos Cr);

//定义标签和初始值

Label scorep =新标签(" score:",Label。左);

标签级别p =新标签("系列:",标签。左);

score field = new TextField(8);

level field = new TextField(8);

score field . set editable(false);

level field . set editable(false);

info SCR . add(scorep);

info SCR . add(score field);

info SCR . add(levelp);

info SCR . add(level field);

scorep.setSize(新维度(20,60));

scoreField.setSize(新维度(20,60));

levelp.setSize(新维度(20,60));

levelField.setSize(新维度(20,60));

score field . settext(" 0 ");

level field . settext(" 1 ");

//右侧控件按钮窗体的布局

my panel control SCR = new my panel();

control SCR . set layout(new GridLayout(5,1,0,5));

rights Cr . add(controls Cr);

//定义按钮播放

Button play_b = new Button("开始游戏");

play_b.setSize(新维度(50,200));

play_b.addActionListener(新命令(Command.button_play,gameScr));

//向上定义按钮级别

Button level_up_b = new Button("完善系列");

level_up_b.setSize(新维度(50,200));

level _ up _ b . addactionlistener(new Command(Command . button _ level up,gameScr));

//向下定义按钮级别

按钮level _ down _ b =新建按钮(“减少系列”);

level_down_b.setSize(新维度(50,200));

level _ down _ b . addactionlistener(new Command(Command . button _ level down,gameScr));

//定义按钮级暂停

按钮pause _ b =新建按钮(“游戏暂停”);

pause_b.setSize(新维度(50,200));

pause _ b . addactionlistener(new Command(Command . button _ pause,gameScr));

//定义按钮退出

Button quit_b = new Button("退出游戏");

quit_b.setSize(新维度(50,200));

quit_b.addActionListener(新命令(Command.button_quit,gameScr));

controls Cr . add(play _ b);

control SCR . add(level _ up _ b);

control SCR . add(level _ down _ b);

control SCR . add(pause _ b);

control SCR . add(quit _ b);

set visible(true);

games Cr . request focus();

}

}

//重写MyPanel类,在面板周围留出空间。

MyPanel类扩展面板{

public Insets getInsets(){

返回新的Insets(30,50,30,50);

}

}

//游戏画布类

GameCanvas类扩展Canvas实现KeyListener{

final int unitSize = 30//小正方形的边长

int rowNum//正方形中的行数

int columnNum//规则网格中的列数

int maxAllowRowNum//允许不剪多少行?

int blockInitRow//新块起始行的坐标。

int blockInitCol//新块的起始列坐标。

int[][]scrar;//屏幕阵列

b座;//对方快速报价

//画布类的构造方法

GameCanvas(){

rowNum = 15;

column num = 10;

maxAllowRowNum = rowNum-2;

b =新块(this);

block initrow = rowNum-1;

blockInitCol = column num/2-2;

scrArr = new int[32][32];

}

//初始化屏幕并清除屏幕数组。

void initScr(){

for(int I = 0;我& ltrowNumi++)

for(int j = 0;j & ltcolumnNumj++)

scrArr[j]= 0;

b . reset();

repaint();

}

//刷新画布方法

公共空白油漆(图形g){

for(int I = 0;我& ltrowNumi++)

for(int j = 0;j & ltcolumnNumj++)

drawUnit(i,j,scrArr[j]);

}

//画正方形的方法

public void drawUnit(int row,int col,int type){

scrArr[row][col]= type;

graphics g = get graphics();

Tch(type){ //表示快速绘制的方法。

案例0:g . set color(color . black);打破;//以背景为颜色进行绘制

案例1:g . set color(color . blue);打破;//画一个下落的正方形。

案例二:g . set color(color . magenta);打破;//画一个已经落后的方法。

}

g.fill3DRect(col*unitSize,getSize()。height-(row+1)*unitSize,unitSize,unitSize,true);

g . dispose();

}

公共块getBlock(){

返回b;//返回对块实例的引用。

}

//返回屏幕数组中(row,col)位置的属性值。

public int getScrArrXY(int row,int col){

if(row & lt;0 | | row & gt= rowNum | | col & lt0 | | col & gt= columnNum)

return(-1);

其他

return(scrArr[row][col]);

}

//返回新块的初始线坐标方法。

public int getInitRow(){

return(blockInitRow);//返回新块的初始行坐标。

}

//返回新块的初始列坐标方法。

public int getInitCol(){

return(blockInitCol);//返回新块的初始列坐标。

}

//整行删除方法

void deleteFullLine(){

int full _ line _ num = 0;

int k = 0;

for(int I = 0;我& ltrowNumi++){

boolean isfull = true

l 1:for(int j = 0;j & ltcolumnNumj++)

if(scrArr[j] == 0){

k++;

isfull = false

破l 1;

}

if(is full)full _ line _ num++;

如果(k!= 0 & amp& ampk-1!= i & amp& amp!isfull)

for(int j = 0;j & ltcolumnNumj++){

if (scrArr[j] == 0)

drawUnit(k-1,j,0);

其他

drawUnit(k-1,j,2);

scrArr[k-1][j]= scrArr[j];

}

}

for(int I = k-1;我& ltrowNumi++){

for(int j = 0;j & ltcolumnNumj++){

drawUnit(i,j,0);

scrArr[j]= 0;

}

}

ERS _ block . score+= full _ line _ num;

ERS _ block . score field . settext("+ERS _ block . score);

}

//判断游戏是否结束的方法

布尔is gamend(){

for(int col = 0;col & ltcolumnNumcol ++){

if(scrArr[maxAllowRowNum][col]!=0)

返回true

}

返回false

}

公共void键入的(KeyEvent e){

}

public void key released(key event e){

}

//处理键盘输入的方法

公共void按键(按键事件e){

如果(!ERS_Block.isPlay)

返回;

tch(e.getKeyCode()){

案例关键事件。VK _ DOWN:b . falldown();打破;

案例关键事件。VK _左:b . LEFT move();打破;

案例关键事件。VK _右:b . RIGHT move();打破;

案例关键事件。VK _空间:b . left turn();打破;

}

}

}

//处理控制类

class命令实现ActionListener{

静态最终int button _ play = 1;//给按钮分配一个数字

static final int button _ level up = 2;

static final int button _ level down = 3;

静态final int button _ quit = 4;

静态final int button _ pause = 5;

静态布尔pause _ resume = true

int curButton//当前按钮

GameCanvas scr

//控制按钮类的构造方法

命令(int按钮,GameCanvas scr){

curButton =按钮;

this.scr = scr

}

//按钮执行方法

public void action performed(action event e){

tch(控制按钮){

案例按钮_播放:如果(!ERS_Block.isPlay){

SCR . init SCR();

ERS _ block . is play = true;

ERS _ block . score = 0;

ERS _ block . score field . settext(" 0 ");

ERS _ block . timer . resume();

}

SCR . request focus();

打破;

case button _ level up:if(ERS _ block . level & lt;10){

ERS _ block . level++;

ERS _ block . level field . settext("+ERS _ block . level);

ERS _ block . score = 0;

ERS _ block . score field . settext("+ERS _ block . score);

}

SCR . request focus();

打破;

case button _ level down:if(ERS _ block . level & gt;1){

ERS _ block . level-;

ERS _ block . level field . settext("+ERS _ block . level);

ERS _ block . score = 0;

ERS _ block . score field . settext("+ERS _ block . score);

}

SCR . request focus();

打破;

case button _ pause:if(pause _ resume){

ERS _ block . timer . suspend();

pause _ resume = false

}否则{

ERS _ block . timer . resume();

pause _ resume = true

}

SCR . request focus();

打破;

case button _ quit:system . exit(0);

}

}

}

//块类

类块{

静态int[][]模式= {

{0x0f00,0x4444,0x0f00,0x4444},//用十六进制的to来表示,这一行表示条形的四种状态。

{0x04e0,0x0464,0x00e4,0x04c4},

{0x4620,0x6c00,0x4620,0x6c00},

{0x2640,0xc600,0x2640,0xc600}

{0x6220,0x1700,0x2230,0x0740},

{0x6440,0x0e20,0x44c0,0x8e00},

{0x0660,0x0660,0x0660,0x0660}

};

int blockType//模块的模式号(0-6)

int turnState//块的翻转状态(0-3)

int blockState//快速下降状态

int row,col//画布上块的坐标

GameCanvas scr

block类的构造方法

Block(GameCanvas scr){

this.scr = scr

block type =(int)(math . random()* 1000)% 7;

turnState =(int)(math . random()* 1000)% 4;

block state = 1;

row = SCR . geti nitrow();

col = SCR . getinitcol();

}

//重新初始化块并显示新块。

公共void重置(){

block type =(int)(math . random()* 1000)% 7;

turnState =(int)(math . random()* 1000)% 4;

block state = 1;

row = SCR . geti nitrow();

col = SCR . getinitcol();

disp block(1);

}

//实现“块”翻转的方法

公共void左转(){

if(assertValid(blockType,(turnState + 1)%4,row,col)){

disp block(0);

turn state =(turn state+1)% 4;

disp block(1);

}

}

//实现“块”左移的方法

public void leftMove(){

if(assertValid(blockType,turnState,row,col-1)){

disp block(0);

col-;

disp block(1);

}

}

//将块向右移动。

public void rightMove(){

if(assertValid(blockType,turnState,row,col+1)){

disp block(0);

col++;

disp block(1);

}

}

//实现块丢弃操作的方法

public boolean fallDown(){

if(blockState == 2)

返回(假);

if(assertValid(blockType,turnState,row-1,col)){

disp block(0);

行-;

disp block(1);

返回(真);

}否则{

block state = 2;

disp block(2);

返回(假);

}

}

//判断正确与否的方法

boolean assertValid(int t,int s,int row,int col){

int k = 0x8000

for(int I = 0;我& lt4;i++){

for(int j = 0;j & lt4;j++){

if((int)(pattern[t][s]& amp;k)!= 0){

int temp = scr.getScrArrXY(row-i,col+j);

if(temp & lt;0 | |温度==2)

返回false

}

k = k & gt& gt1;

}

}

返回true

}

//同步显示的方法

公共同步void dispBlock(int s){

int k = 0x8000

for(int I = 0;我& lt4;i++){

for(int j = 0;j & lt4;j++){

if(((int)pattern[block type][turnState]& amp;k)!= 0){

scr.drawUnit(row-i,col+j,s);

}

k = k & gt& gt1;

}

}

}

}

//定时线程

MyTimer类扩展线程{

GameCanvas scr

公共MyTimer(GameCanvas scr){

this.scr = scr

}

公共无效运行(){

while(true){

尝试{

sleep((10-ERS _ block . level+1)* 100);

}

catch(InterruptedException e){}

如果(!scr.getBlock()。fallDown()){

SCR . delete full line();

if(SCR . isgamend()){

ERS _ block . is play = false;

挂起();

}否则

scr.getBlock()。reset();

}

}

}

}

类WinListener扩展WindowAdapter{

public void window closing(window event l){

system . exit(0);

}

}

参考/s?ie = GB 2312 & amp;bs = JAVA % B0 % E6 % B6 % ED % C2 % DE % CB % B9 % B7 % BD % BF % E9 % 2C % CE % E5 % D7 % D3 % C6 % E5 % 2C % BA % DA % B0 % D7 % C6 % E5 & amp;sr = & ampz = & ampcl = 3 & ampf = 8 & ampwd = JAVA % B6 %埃德% C2 %德% CB % B9 % B7 % BD % BF % E9 % 2C % CE % E5 % D7 % D3 % C6 % E5 % 2C % BA % DA % B0 % D7 % C6 % E5 & amp;ct=0