俄罗斯方块小游戏(讨论小游戏的算法(俄罗斯方块)!)
本文目录
讨论小游戏的算法(俄罗斯方块)!
import java.awt.*;import java.awt.event.*;//俄罗斯方块类public class ERS_Block extends Frame{public static boolean isPlay=false;public static int level=1,score=0;public static TextField scoreField,levelField;public static MyTimer timer;GameCanvas gameScr;public static void main(String argus){ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");WindowListener win_listener = new WinListener();ers.addWindowListener(win_listener);}//俄罗斯方块类的构造方法ERS_Block(String title){super(title);setSize(600,480);setLayout(new GridLayout(1,2));gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);timer = new MyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);Panel rightScr = new Panel();rightScr.setLayout(new GridLayout(2,1,0,30));rightScr.setSize(120,500);add(rightScr);//右边信息窗体的布局MyPanel infoScr = new MyPanel();infoScr.setLayout(new GridLayout(4,1,0,5));infoScr.setSize(120,300);rightScr.add(infoScr);//定义标签和初始值Label scorep = new Label("分数:",Label.LEFT);Label levelp = new Label("级数:",Label.LEFT);scoreField = new TextField(8);levelField = new TextField(8);scoreField.setEditable(false);levelField.setEditable(false);infoScr.add(scorep);infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);scorep.setSize(new Dimension(20,60));scoreField.setSize(new Dimension(20,60));levelp.setSize(new Dimension(20,60));levelField.setSize(new Dimension(20,60));scoreField.setText("0");levelField.setText("1");//右边控制按钮窗体的布局MyPanel controlScr = new MyPanel();controlScr.setLayout(new GridLayout(5,1,0,5));rightScr.add(controlScr);//定义按钮playButton play_b = new Button("开始游戏");play_b.setSize(new Dimension(50,200));play_b.addActionListener(new Command(Command.button_play,gameScr));//定义按钮Level UPButton level_up_b = new Button("提高级数");level_up_b.setSize(new Dimension(50,200));level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));//定义按钮Level DownButton level_down_b =new Button("降低级数");level_down_b.setSize(new Dimension(50,200));level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));//定义按钮Level PauseButton pause_b =new Button("游戏暂停");pause_b.setSize(new Dimension(50,200));pause_b.addActionListener(new Command(Command.button_pause,gameScr));//定义按钮QuitButton quit_b = new Button("退出游戏");quit_b.setSize(new Dimension(50,200));quit_b.addActionListener(new Command(Command.button_quit,gameScr));controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();}}//重写MyPanel类,使Panel的四周留空间class MyPanel extends Panel{public Insets getInsets(){return new Insets(30,50,30,50);}}//游戏画布类class GameCanvas extends Canvas implements KeyListener{final int unitSize = 30; //小方块边长int rowNum; //正方格的行数int columnNum; //正方格的列数int maxAllowRowNum; //允许有多少行未削int blockInitRow; //新出现块的起始行坐标int blockInitCol; //新出现块的起始列坐标int scrArr; //屏幕数组Block b; //对方快的引用//画布类的构造方法GameCanvas(){rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum - 2;b = new Block(this);blockInitRow = rowNum - 1;blockInitCol = columnNum/2 - 2;scrArr = new int ;}//初始化屏幕,并将屏幕数组清零的方法void initScr(){for(int i=0;i《rowNum;i++)for (int j=0; j《columnNum;j++){ scrArr=0; }b.reset();repaint();}//重新刷新画布方法public void paint(Graphics g){for(int i = 0; i 《 rowNum; i++)for(int j = 0; j 《 columnNum; j++)drawUnit(i,j,scrArr);}//画方块的方法public void drawUnit(int row,int col,int type){scrArr = type;Graphics g = getGraphics();switch(type){ //表示画方快的方法case 0: g.setColor(Color.black);break; //以背景为颜色画case 1: g.setColor(Color.blue);break; //画正在下落的方块case 2: g.setColor(Color.magenta);break; //画已经落下的方法}g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);g.dispose();}public Block getBlock(){return b; //返回block实例的引用}//返回屏幕数组中(row,col)位置的属性值public int getScrArrXY(int row,int col){if (row 《 0 || row 》= rowNum || col 《 0 || col 》= columnNum)return(-1);elsereturn(scrArr);}//返回新块的初始行坐标方法public int getInitRow(){return(blockInitRow); //返回新块的初始行坐标}//返回新块的初始列坐标方法public int getInitCol(){return(blockInitCol); //返回新块的初始列坐标}//满行删除方法void deleteFullLine(){int full_line_num = 0;int k = 0;for (int i=0;i《rowNum;i++){boolean isfull = true;L1:for(int j=0;j《columnNum;j++)if(scrArr == 0){k++;isfull = false;break L1;}if(isfull) full_line_num++;if(k!=0 && k-1!=i && !isfull)for(int j = 0; j 《 columnNum; j++){if (scrArr == 0)drawUnit(k-1,j,0);elsedrawUnit(k-1,j,2);scrArr;}}for(int i = k-1 ;i 《 rowNum; i++){for(int j = 0; j 《 columnNum; j++){drawUnit(i,j,0);scrArr=0;}}ERS_Block.score += full_line_num;ERS_Block.scoreField.setText(""+ERS_Block.score);}//判断游戏是否结束方法boolean isGameEnd(){for (int col = 0 ; col 《columnNum; col ++){if(scrArr !=0)return true;}return false;}public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}//处理键盘输入的方法public void keyPressed(KeyEvent e){if(!ERS_Block.isPlay)return;switch(e.getKeyCode()){case KeyEvent.VK_DOWN:b.fallDown();break;case KeyEvent.VK_LEFT:b.leftMove();break;case KeyEvent.VK_RIGHT:b.rightMove();break;case KeyEvent.VK_SPACE:b.leftTurn();break;}}}//处理控制类class Command implements ActionListener{static final int button_play = 1; //给按钮分配编号static final int button_levelup = 2;static final int button_leveldown = 3;static final int button_quit = 4;static final int button_pause = 5;static boolean pause_resume = true;int curButton; //当前按钮GameCanvas scr;//控制按钮类的构造方法Command(int button,GameCanvas scr){curButton = button;this.scr=scr;}//按钮执行方法public void actionPerformed (ActionEvent e){switch(curButton){case button_play:if(!ERS_Block.isPlay){scr.initScr();ERS_Block.isPlay = true;ERS_Block.score = 0;ERS_Block.scoreField.setText("0");ERS_Block.timer.resume();}scr.requestFocus();break;case button_levelup:if(ERS_Block.level 《 10){ERS_Block.level++;ERS_Block.levelField.setText(""+ERS_Block.level);ERS_Block.score = 0;ERS_Block.scoreField.setText(""+ERS_Block.score);}scr.requestFocus();break;case button_leveldown:if(ERS_Block.level 》 1){ERS_Block.level--;ERS_Block.levelField.setText(""+ERS_Block.level);ERS_Block.score = 0;ERS_Block.scoreField.setText(""+ERS_Block.score);}scr.requestFocus();break;case button_pause:if(pause_resume){ERS_Block.timer.suspend();pause_resume = false;}else{ERS_Block.timer.resume();pause_resume = true;}scr.requestFocus();break;case button_quit:System.exit(0);}}}//方块类class Block {static int pattern = {{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态{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(GameCanvas scr){this.scr = scr;blockType = (int)(Math.random() * 1000)%7;turnState = (int)(Math.random() * 1000)%4;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();}//重新初始化块,并显示新块public void reset(){blockType = (int)(Math.random() * 1000)%7;turnState = (int)(Math.random() * 1000)%4;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();dispBlock(1);}//实现“块”翻转的方法public void leftTurn(){if(assertValid(blockType,(turnState + 1)%4,row,col)){dispBlock(0);turnState = (turnState + 1)%4;dispBlock(1);}}//实现“块”的左移的方法public void leftMove(){if(assertValid(blockType,turnState,row,col-1)){dispBlock(0);col--;dispBlock(1);}}//实现块的右移public void rightMove(){if(assertValid(blockType,turnState,row,col+1)){dispBlock(0);col++;dispBlock(1);}}//实现块落下的操作的方法public boolean fallDown(){if(blockState == 2)return(false);if(assertValid(blockType,turnState,row-1,col)){dispBlock(0);row--;dispBlock(1);return(true);}else{blockState = 2;dispBlock(2);return(false);}}//判断是否正确的方法boolean assertValid(int t,int s,int row,int col){int k = 0x8000;for(int i = 0; i 《 4; i++){for(int j = 0; j 《 4; j++){if((int)(pattern&k) != 0){int temp = scr.getScrArrXY(row-i,col+j);if (temp《0||temp==2)return false;}k = k 》》 1;}}return true;}//同步显示的方法public synchronized void dispBlock(int s){int k = 0x8000;for (int i = 0; i 《 4; i++){for(int j = 0; j 《 4; j++){if(((int)pattern&k) != 0){scr.drawUnit(row-i,col+j,s);}k=k》》1;}}}}//定时线程class MyTimer extends Thread{GameCanvas scr;public MyTimer(GameCanvas scr){this.scr = scr;}public void run(){while(true){try{sleep((10-ERS_Block.level + 1)*100);}catch(InterruptedException e){}if(!scr.getBlock().fallDown()){scr.deleteFullLine();if(scr.isGameEnd()){ERS_Block.isPlay = false;suspend();}elsescr.getBlock().reset();}}}}class WinListener extends WindowAdapter{public void windowClosing (WindowEvent l){System.exit(0);}}
有什么好玩的俄罗斯方块类的小游戏(能下载到MP5里的)
3D俄罗斯方块http://www.2144.cc/html/94/13148/最新俄罗斯方块http://www.2144.cc/html/94/5785/超级方块http://www.2144.cc/html/94/5767/水果方块http://www.2144.cc/html/94/5780/建筑俄罗斯http://www.2144.cc/html/94/16179/图形消砖块http://www.2144.cc/html/94/5742/
俄罗斯方块消消消好玩吗 俄罗斯方块消消消玩法简介
期待已久的手游俄罗斯方块消消消即将登陆九游,这款手机游戏吸引了大批玩家的关注,有很多粉丝都在问九游小编俄罗斯方块消消消好玩吗?俄罗斯方块消消消值不值得玩?现在就为大家来简单分析下,看看这款游戏的玩法特点和游戏剧情介绍。1、俄罗斯方块消消消简要评析:《俄罗斯方块消消消》是在"俄罗斯方块"玩法基础上加以创新,是一款非常具有创意的休闲益智类消除游戏。经典火爆俄罗斯方块游戏,闪亮荧光登场!用前沿的视觉享受,重温难忘的童年回忆!经典模式经典"俄罗斯方块"玩法,使用虚拟按键控制俄罗斯方块的变形与下落,消除的行数越多,得分越高。俄罗斯方块小游戏,百变方块,经典消除.拖动模式将屏幕下方的三个方块拖入宫格中,一行或一列铺满即可消除。2、俄罗斯方块消消消图片欣赏:
俄罗斯方块可谓是风靡全球,这款简单却有趣的小游戏怎么得到高分
想要在俄罗斯方块这块游戏中得高分首先就要做到“快、准、狠”。俄罗斯方块是一个很经典的游戏了,在手机、电脑、各种手游还没那么普遍的时候,俄罗斯方块陪伴了我们很多人的童年。现在的我们偶尔也会拿出手机,再玩一玩曾经最喜欢的游戏。
事实上,俄罗斯方块的规则十分简单,我们只需要根据特定的规则放置不同形状的图形。当然,在放置过程中,我们不能让图形超过屏幕的三分之二。如果我们长时间处于这种状态,可能会对我们造成一定的威胁,这是非常不利的。 因此,玩家必须知道如何使用“特效”使图形始终处于稳定状态。
在游戏的过程中我们要尽可能的做到"快准狠"。快就是要快速判断,在游戏中,我们可以看到下一个图形是什么形状。在下一个方块出现之前,你就要想象它应该放到哪个位置,这样堆积起来才不会惊慌失措;准指的是准度,准度非常重要,一格之差就可能破坏掉所有布局;狠指的是有魄力,不要只看到眼前的一行两行,提前做好规划,争取一次就消去多行,这样分数才高。
此外,我们还要做到“稳”,稳中取胜。不能一味的追求速度,因为速度会对游戏的稳定性产生一定的影响。如果你在速度上提上来了,却经常出错,那么你会损失的更多。 另一方面,这个游戏也考研了玩家的创造力和想象力, 就像搭积木,它要求我们用我们的头脑来使图形搭建的牢固而有力。
本文相关文章:
mikumikudance下载(什么样的电脑才可以制作出《方块学园》这样的动画)
2024年3月10日 02:15
rusty lake paradise(《逃离方块》和锈湖是一个系列吗)
2024年2月27日 08:15
超级宠物大战(小怪物可以用方块儿搭建房子还有各种食物跟他使用这是什么游戏)
2023年12月23日 19:05
手机游戏地心游记(以前在按键手机上玩的一个小游戏,就是一个小人拿剑敲打方块能吃到钻石的,好像叫地心游记,谁有这个下载)
2023年11月21日 03:26
更多文章:
hd4000核显2g(2G独显+HD4000双显卡是什么意思比原来单独2G独显要好)
2023年10月22日 23:45
联想g405 20239(电脑型号 联想 G405 20239 笔记本电脑可以设置只使用独显吗配置下面)
2024年7月21日 05:34
联想y560一键拯救系统(联想y560 重装win7系统 可 e盘 d盘的东西还在 怎么彻底重装 我是用 一健拯救系统)
2024年5月25日 05:42
南昌回收笔记本(请问 南昌地区 98年左右的台式旧电脑回收多少钱一台啊)
2024年7月23日 06:32
松下cfmx3(推荐几款配置好一点 性价比好的 超极本 再问一下surface pro 3怎么样)
2024年10月20日 05:50
惠普笔记本要不要注册(网上买的惠普笔记本的序列号要不要在惠普网站激活保修呢)
2024年6月5日 16:32
联想售后服务网点查询盐城(谁知道江苏盐城联想手机维修点的地址拜托了各位 谢谢)
2024年10月17日 03:50
三星笔记本r440重装系统(你好!我是三星R440的笔记本,我想用U盘装系统,麻烦你教我一下)
2024年7月16日 21:35
联想ideapad710s配置(联想IdeaPad710S系列与联想小新Air 13.3英寸的参考数据分别有哪些)
2024年6月14日 06:34
acer电脑型号4736zg(宏碁4736ZG,2G内存装WIN7会卡吗)
2024年10月15日 19:15
苏州惠普笔记本售后维修服务点(苏州惠普笔记本的售后维修在哪里的)
2024年6月13日 01:06
东芝笔记本bios密码(东芝笔记本satellitej60如何消除BIOS密码)
2023年5月15日 00:45