![基于Java语言的打地鼠的小游戏源代码是什么?,第1张 基于Java语言的打地鼠的小游戏源代码是什么?,第1张](/aiimages/%E5%9F%BA%E4%BA%8EJava%E8%AF%AD%E8%A8%80%E7%9A%84%E6%89%93%E5%9C%B0%E9%BC%A0%E7%9A%84%E5%B0%8F%E6%B8%B8%E6%88%8F%E6%BA%90%E4%BB%A3%E7%A0%81%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
public void mouseClicked(MouseEvent e){\x0d\x0aObject source=e.getSource() //获取事件源,即地鼠
标签\x0d\x0aif(source instanceof JLabel){ //如果事件是举尘标签组件\x0d\x0aJLabel mouse=(JLabel)source //正姿禅强制转换为JLabel标签\x0d\x0amouse.setIcon(null) //取消标签图标\x0d\x0a}\x0d\x0a}\x0d\x0a})\x0d\x0athis.getContentPane().add(mouses[i]) //添加显示地鼠的标签到窗体\x0d\x0a}\x0d\x0a\x0d\x0amouses[0].setLocation(253, 300) //设置每个标签的位置\x0d\x0amouses[1].setLocation(333, 250)\x0d\x0amouses[2].setLocation(388, 296)\x0d\x0amouses[3].setLocation(362, 364)\x0d\x0amouses[4].setLocation(189, 353)\x0d\x0amouses[5].setLocation(240, 409)\x0d\x0a\x0d\x0afinal JLabel backLabel=new JLabel() //创建显示背景的标签册差\x0d\x0abackLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight())\x0d\x0athis.setBounds(100,100,img.getIconWidth(),img.getIconHeight())\x0d\x0abackLabel.setIcon(img)//添加背景到标签\x0d\x0athis.getContentPane().add(backLabel) //添加背景标签到窗体\x0d\x0a}\x0d\x0a/**\x0d\x0a* 线程的核心
方法\x0d\x0a*/\x0d\x0a\x0d\x0apublic void run(){\x0d\x0awhile(true){//使用无限循环\x0d\x0atry{\x0d\x0aThread.sleep(3000)//使线程休眠3秒\x0d\x0aint index=(int)(Math.random()*6) //生成随机的地鼠索引\x0d\x0aif(mouses[index].getIcon()==null){ //如果地鼠标签没有设置图片\x0d\x0amouses[index].setIcon(imgMouse) //为该标签添加地鼠图片\x0d\x0a}\x0d\x0a}catch(InterruptedException e){\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a}俄罗斯方块——java源代码提供 import java.awt.*import java.awt.event.*//俄罗斯方块类 public class ERS_Block extends Frame{ public static boolean isPlay=falsepublic static int level=1,score=0public static TextField scoreField,levelFieldpublic static MyTimer timerGameCanvas gameScrpublic 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)//定义按钮play Button play_b = new Button("开始游戏")play_b.setSize(new Dimension(50,200))play_b.addActionListener(new Command(Command.button_play,gameScr))//定义按钮Level UP Button level_up_b = new Button("提高级数")level_up_b.setSize(new Dimension(50,200))level_up_b.addActionListener(new Command(Command.button_levelup,gameScr))//定义按钮Level Down Button level_down_b =new Button("降低级数")level_down_b.setSize(new Dimension(50,200))level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr))//定义按钮Level Pause Button pause_b =new Button("游戏暂停")pause_b.setSize(new Dimension(50,200))pause_b.addActionListener(new Command(Command.button_pause,gameScr))//定义按钮Quit Button 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 = 15columnNum = 10maxAllowRowNum = rowNum - 2b = new Block(this)blockInitRow = rowNum - 1blockInitCol = columnNum/2 - 2scrArr = new int [32][32]} //初始化屏幕,并将屏幕数组清零的方法 void initScr(){ for(int i=0i<rowNumi++) for (int j=0j<columnNumj++) scrArr[j]=0b.reset()repaint()} //重新刷新画布方法 public void paint(Graphics g){ for(int i = 0i <rowNumi++) for(int j = 0j <columnNumj++) drawUnit(i,j,scrArr[j])} //画方块的方法 public void drawUnit(int row,int col,int type){ scrArr[row][col] = typeGraphics g = getGraphics()tch(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)else return(scrArr[row][col])} //返回新块的初始行坐标方法 public int getInitRow(){ return(blockInitRow)//返回新块的初始行坐标 } //返回新块的初始列坐标方法 public int getInitCol(){ return(blockInitCol)//返回新块的初始列坐标 } //满行删除方法 void deleteFullLine(){ int full_line_num = 0int k = 0for (int i=0i<rowNumi++){ boolean isfull = trueL1:for(int j=0j<columnNumj++) if(scrArr[j] == 0){ k++isfull = falsebreak L1} if(isfull) full_line_num++if(k!=0 &&k-1!=i &&!isfull) for(int j = 0j <columnNumj++){ if (scrArr[j] == 0) drawUnit(k-1,j,0)else drawUnit(k-1,j,2)scrArr[k-1][j] = scrArr[j]} } for(int i = k-1 i <rowNumi++){ for(int j = 0j <columnNumj++){ drawUnit(i,j,0)scrArr[j]=0} } ERS_Block.score += full_line_numERS_Block.scoreField.setText(""+ERS_Block.score)} //判断游戏是否结束方法 boolean isGameEnd(){ for (int col = 0 col <columnNumcol ++){ if(scrArr[maxAllowRowNum][col] !=0) return true} return false} public void keyTyped(KeyEvent e){ } public void keyReleased(KeyEvent e){ } //处理键盘输入的方法 public void keyPressed(KeyEvent e){ if(!ERS_Block.isPlay) returntch(e.getKeyCode()){ case KeyEvent.VK_DOWN:b.fallDown()breakcase KeyEvent.VK_LEFT:b.leftMove()breakcase KeyEvent.VK_RIGHT:b.rightMove()breakcase KeyEvent.VK_SPACE:b.leftTurn()break} } } //处理控制类 class Command implements ActionListener{ static final int button_play = 1//给按钮分配编号 static final int button_levelup = 2static final int button_leveldown = 3static final int button_quit = 4static final int button_pause = 5static boolean pause_resume = trueint curButton//当前按钮 GameCanvas scr//控制按钮类的构造方法 Command(int button,GameCanvas scr){ curButton = buttonthis.scr=scr} //按钮执行方法 public void actionPerformed (ActionEvent e){ tch(curButton){ case button_play:if(!ERS_Block.isPlay){ scr.initScr()ERS_Block.isPlay = trueERS_Block.score = 0ERS_Block.scoreField.setText("0")ERS_Block.timer.resume()} scr.requestFocus()breakcase button_levelup:if(ERS_Block.level <10){ ERS_Block.level++ERS_Block.levelField.setText(""+ERS_Block.level)ERS_Block.score = 0ERS_Block.scoreField.setText(""+ERS_Block.score)} scr.requestFocus()breakcase button_leveldown:if(ERS_Block.level >1){ ERS_Block.level--ERS_Block.levelField.setText(""+ERS_Block.level)ERS_Block.score = 0ERS_Block.scoreField.setText(""+ERS_Block.score)} scr.requestFocus()breakcase button_pause:if(pause_resume){ ERS_Block.timer.suspend()pause_resume = false}else{ ERS_Block.timer.resume()pause_resume = true} scr.requestFocus()breakcase 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 = scrblockType = (int)(Math.random() * 1000)%7turnState = (int)(Math.random() * 1000)%4blockState = 1row = scr.getInitRow()col = scr.getInitCol()} //重新初始化块,并显示新块 public void reset(){ blockType = (int)(Math.random() * 1000)%7turnState = (int)(Math.random() * 1000)%4blockState = 1row = scr.getInitRow()col = scr.getInitCol()dispBlock(1)} //实现“块”翻转的方法 public void leftTurn(){ if(assertValid(blockType,(turnState + 1)%4,row,col)){ dispBlock(0)turnState = (turnState + 1)%4dispBlock(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 = 2dispBlock(2)return(false)} } //判断是否正确的方法 boolean assertValid(int t,int s,int row,int col){ int k = 0x8000for(int i = 0i <4i++){ for(int j = 0j <4j++){ if((int)(pattern[t][s]&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 = 0x8000for (int i = 0i <4i++){ for(int j = 0j <4j++){ if(((int)pattern[blockType][turnState]&k) != 0){ scr.drawUnit(row-i,col+j,s)} k=k>>1} } } } //定时线程 class MyTimer extends Thread{ GameCanvas scrpublic 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 = falsesuspend()}else scr.getBlock().reset()} } } } class WinListener extends WindowAdapter{ public void windowClosing (WindowEvent l){ System.exit(0)} } 22
评论列表(0条)