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