别踩白块小游戏

写作心路:??

  1. 整个页面只有一个大块,其他元素DOM创建,同时使用flex布局,使用手机自适应模式。
  2. 设置黑白块行列的数目,创建一个二维数组来存放行列。
 setshuzu: function () {
    for (var i = 0; i < this.H; i++) {
          this.Arrlist.push([]);
          var m=this.randomblack() ;
           // console.log(m);
          for (var k = 0; k < this.C; k++) {
              var lie = document.createElement ("div");
              lie.className = "perlie";
              lie.style.lineHeight =(game.viewheight /game.H)+"px";
              if(k ==m&& i<4){
                  lie.style.background ="black";
                  this.blackarr.unshift (lie);
              }?
             else{
                 lie.style.background ="white";
             }
             this.Arrlist [i].push(lie);
             }
        }
     },
  1. 遍历二维数组,使用forEach()遍历;创建元素,添加行,再遍历遍历二维数组里的每个子集合,将子集合里的每个div添加到每一行中;?
setele:function(){
       //foreach
    game.Bigblock .innerHTML ="";
    game.Arrlist.forEach(function(value,index){
      var hang=document.createElement("div");
       hang.className ="perhang";
       value.forEach (function(value1,index1) {
          hang.appendChild(value1);
       });
       game.Bigblock.appendChild(hang);
   })
}
  1. 随机黑块事件,让每一行随机出现一个黑块,将事件添加到设置二维数组时,并且刚开始页面只让前4行出现黑块并且将出现的每个黑块添加到一个blackarr数组中,从数组前面添加,让最下面的黑块为该数组中的第一个元素。
      randomblack:function(){
       return  Math.floor(Math.random() * this.H);
      },
  1. 让二维数组中的上下行元素交换位置(从最后一行遍历,将上一行的传递给下一行,实现黑块的下落),同时重新设置第一行,随机新的黑块出来。
     changeele:function(){
        game.lastblack ();
         for(var i=this.H-1;i>0;i--){
            this.Arrlist [i]=this.Arrlist [i-1];
         }
         game.firstH_set ();
         this. setele();
     },

???

        firstH_set :function(){
            this.Arrlist [0]=[];
            var m=this.randomblack ();
            for (var k = 0; k < this.C; k++) {
                var lie = document.createElement("div");
                lie.className = "perlie";
                lie.style.lineHeight = (game.viewheight / game.H) + "px";
                if (k == m ) {
                    lie.style.background = "black";
                    this.blackarr.push(lie);
                }
                else {
                    lie.style.background = "white";
                }
                this.Arrlist [0].push(lie);
            }
        },

6.最下面的黑块显示开始两个字 ,点击这个黑块,游戏开始,黑块变白,并且从黑块数组blackarr的前面删除这个元素。每点击一个黑块,黑块变为白色,会出现音乐,并且页面上面的分数会增加100,同时黑块下落的速度回逐渐增加。

 firstblackevent:function(){
            if(!game.blackarr.length) return;
            if(!game.isbegin ){
                game.blackarr [0].innerHTML ="开始";
            }
            game.blackarr[0].onclick=function(){
                game.blackarr [0].innerHTML =" ";
                game.isbegin =true;
                if(this.style.background =="black"){
                    console.log(game.music.length);
                    game.aid.src="mp3/"+game.music[Math.floor(Math.random () * game.music.length)];
                    game.aid.play();
                    game.score +=100;
                    game.addscore.innerHTML =game.score;
                    game.timedely -=10;
                    if(  game.timedely<=100){
                         game.timedely =100;
                    }
                }
                this.style.background ="#fff";
                game.blackarr.shift();
                game.firstblackevent ();

            }
        }
  1. 设置计时器让整个块的元素交换起来,每行下落,第一行重新产生,游戏互动起来 window.requestAnimationFrame(game.clickstart );
        clickstart:function(){
           if(game.isbegin ){
                var newtime=new Date().getTime ();
                if(newtime-game.oldtime >=game.timedely){
                    game. changeele();
                    game.oldtime =newtime;
                     newtime =null;
                }
               game.firstblackevent ();
               game.whiteblock ();
            }
             window.requestAnimationFrame(game.clickstart );
        }
  1. 当点击白块时游戏结束,同时这个白块变为红色,同时出现警告音乐。
        whiteblock:function(){
            var that=this;
            for(var i=0;i<that.H;i++){
                for(var k=0;k<that.C;k++){
                      if(that.Arrlist [i][k].style.backgroundColor =="white") {
                        console.log(that.Arrlist [i][k]);
                        that.Arrlist [i][k].onclick=function(){
                         this.style.backgroundColor ="red";
                         that.isbegin =false;
                          game.aid.src="mp3/mm.mp3";
                          game.aid.play();
                        }
                    }

                }
            }
        } ,
  1. 当最后一行有黑块落下时,游戏结束,出现警告提示音乐。??
        lastblack:function(){
            for(var i=0;i<this.Arrlist.length;i++){
                if(this.Arrlist[4][i].style.backgroundColor =="black")
                {
                    game.isbegin =false;
                    this.Arrlist[3][i].style.backgroundColor="red";
               }
            }
        },

尊重劳动成果!!!????

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的Java代码来写别踩白块小游戏。 首先,需要导入Java中的AWT和Swing库。 然后,创建一个JFrame窗口,并添加一个JPanel面板用于绘制游戏区域。 接着,我们需要在JPanel面板中实现游戏逻辑和绘制。具体来说,可以使用一个二维数组来表示游戏区域,其中0表示白块,1表示黑块。在每个时间步骤中,可以将游戏区域向下滚动,并在顶部生成新的一行块。通过监听键盘事件,可以让玩家控制移动的小人,移动的过程中,需要判断小人的位置和当前方块的颜色是否匹配,如果匹配则继续游戏,否则游戏结束。 下面是一个简单的Java代码实现: ```java import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class DonotTapWhiteTiles extends JPanel implements KeyListener { private static final long serialVersionUID = 1L; private static final int ROWS = 5; private static final int COLS = 4; private static final int BLOCK_SIZE = 80; private static final int GAP = 10; private static final int SPEED = 5; private int[][] board; private int score; private boolean gameOver; private int px, py; public DonotTapWhiteTiles() { board = new int[ROWS][COLS]; score = 0; gameOver = false; px = 0; py = 0; addKeyListener(this); setFocusable(true); setPreferredSize(getPreferredSize()); Thread thread = new Thread(new Runnable() { @Override public void run() { while (!gameOver) { try { Thread.sleep(1000 / SPEED); } catch (InterruptedException e) { e.printStackTrace(); } moveDown(); repaint(); } } }); thread.start(); } private void moveDown() { for (int i = ROWS - 1; i >= 1; i--) { for (int j = 0; j < COLS; j++) { board[i][j] = board[i - 1][j]; } } for (int j = 0; j < COLS; j++) { board[0][j] = (int) (Math.random() * 2); } score++; } private void gameOver(Graphics g) { g.setColor(Color.RED); g.drawString("Game Over", getWidth() / 2 - 50, getHeight() / 2); } private void drawBlocks(Graphics g) { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { int x = j * (BLOCK_SIZE + GAP); int y = i * (BLOCK_SIZE + GAP); if (board[i][j] == 0) { g.setColor(Color.WHITE); } else { g.setColor(Color.BLACK); } g.fillRect(x, y, BLOCK_SIZE, BLOCK_SIZE); } } } private void drawPlayer(Graphics g) { g.setColor(Color.RED); g.fillRect(px * (BLOCK_SIZE + GAP), ROWS * (BLOCK_SIZE + GAP), BLOCK_SIZE, BLOCK_SIZE); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); drawBlocks(g); drawPlayer(g); g.drawString("Score: " + score, 10, getHeight() - 10); if (gameOver) { gameOver(g); } } @Override public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if (code == KeyEvent.VK_LEFT) { if (px > 0) { px--; } } else if (code == KeyEvent.VK_RIGHT) { if (px < COLS - 1) { px++; } } if (board[py][px] == 0) { gameOver = true; } else { py++; if (py == ROWS) { py = 0; score++; } } repaint(); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } public static void main(String[] args) { JFrame frame = new JFrame("Don't Tap White Tiles"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new DonotTapWhiteTiles()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } } ``` 在上面的代码中,我们创建了一个名为“Don't Tap White Tiles”的JFrame窗口,并将一个名为“DonotTapWhiteTiles”的JPanel面板添加到其中。在JPanel面板中,我们实现了游戏逻辑和绘制,并通过键盘事件来控制小人的移动。在主函数中,我们创建了一个JFrame窗口并设置其属性,然后将JPanel面板添加到其中,并显示窗口。 您可以通过运行这个程序来玩别踩白块小游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值