如何在 Applet 中为俄罗斯方块游戏设置图像 [英] How to settle an an image in Applet for tetris game

查看:22
本文介绍了如何在 Applet 中为俄罗斯方块游戏设置图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用小程序开发俄罗斯方块游戏.我生成了随机形状并使其移动.但我不知道如何让它沉淀在底部.一旦到达屏幕的尽头,我的形状就会消失.请在这方面帮助我.这是我的代码.

I developing tetris game using applets. I have generated random shapes and making it move. But i don't know how to make it settle at the bottom. My shapes are vanishing once it reaches the end of the screen. Please help me on this regard. Here goes my code.

import java.applet.Applet;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;



public class TetrisGame
{
    public static void main (String argsp[])
    {
        JFrame frame = new JFrame("Tetris");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final AppletClass applet = new AppletClass();
        frame.getContentPane().add(applet);
        applet.init();
        Thread t = new Thread(new Runnable()
        {

            @Override
            public void run() 
            {
                while(true)
                {
                    try 
                    {
                        Thread.sleep(1000);
                        applet.repaint();
                    }
                    catch (InterruptedException e) 
                    {
                        e.printStackTrace();
                    }               
                }
            }

        });
        t.start();

        frame.setBounds(10,10,410,610);
        frame.setVisible(true);
    }
}

class AppletClass extends Applet implements KeyListener
{

    private static final long serialVersionUID = 1L;
    static int xpos = 190;
    static int ypos =0;
    static int random1;
    static int reached_end=1;


    public void init()
    {
             System.out.println("aaa");
        setFocusable(true);
        requestFocus();
        addKeyListener(this);

    }
    public void paint (Graphics g)
    {

        generateRandomShapes(g);
    }

    public void generateRandomShapes (Graphics g)
    {

        int i=0;
        int x[] = new int[4];
        int y[] = new int[4];

        if(reached_end==1)
        {
            random1=(int)Math.floor(Math.random()*100);
            ypos=0;
        }

        x[0]=xpos;
        ypos =ypos+30;
        y[0]=ypos;

        if(ypos>420)
        {
            reached_end=1;
            ypos=0;
        }
        else
            reached_end=0;





        switch(random1%7)
        {
                case 0:
                    //straight line
                    for(i = 0;i<3;i++)
                    {
                        x[i+1]=x[i];
                        y[i+1]=y[i]+30;
                    }
                    break;
                case 1:
                    //L shape
                    for(i = 0;i<2;i++)
                    {
                        x[i+1]=x[i];
                        y[i+1]=y[i]+30;
                    }
                    x[i+1]=x[i]+30;
                    y[i+1]=y[i];
                    break;
                case 2:
                    //reverse L shape
                    for(i = 0;i<2;i++)
                    {
                        x[i+1]=x[i];
                        y[i+1]=y[i]+30;
                    }
                    x[i+1]=x[i]-30;
                    y[i+1]=y[i];
                    break;
                case 3:
                    //square shape
                    i=0;
                        x[i+1]=x[i];
                        y[i+1]=y[i]+30;
                    i++;
                        x[i+1]=x[i]+30;
                        y[i+1]=y[i];
                    i++;
                        x[i+1]=x[i];
                        y[i+1]=y[i]-30;
                    break;
                case 4:
                    //Inverse T shape
                    x[i+1]=x[i]-30;
                    y[i+1]=y[i]+30;
                    for(i = 1;i<3;i++)
                    {
                        x[i+1]=x[i]+30;
                        y[i+1]=y[i];
                    }
                    break;
                case 5:
                    //S shape
                    x[i+1]=x[i]-30;
                    y[i+1]=y[i]+30;
                    i++;
                    x[i+1]=x[i]+30;
                    y[i+1]=y[i];
                    i++;
                    x[i+1]=x[i]+30;
                    y[i+1]=y[i]-30;
                    break;
                case 6:
                    //Z shape
                    x[i+1]=x[i]+30;
                    y[i+1]=y[i];
                    i++;
                    x[i+1]=x[i];
                    y[i+1]=y[i]+30;
                    i++;
                    x[i+1]=x[i]+30;
                    y[i+1]=y[i];
                    break;

        }
        g.setColor(Color.BLACK);
        for(i=0;i<4;i++)
        {
            g.fillRect(x[i], y[i], 30, 30);
        }


    }

    public void keyReleased(KeyEvent e){;}
     public void keyTyped(KeyEvent e){;}

    public void keyPressed(KeyEvent e) 
    {
        System.out.println("Kkk "+e.getKeyCode());
        if(e.getKeyCode() == KeyEvent.VK_LEFT)
     {
        if(xpos>=30)
        {
            xpos=xpos-30;
        }
        System.out.println("xpos is :" + xpos);
     }
     if(e.getKeyCode() == KeyEvent.VK_RIGHT)
     { 
         xpos=xpos+30;
     }

     if(e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_SPACE)
     {
         ypos=420;
     }
 }
}

TIA

推荐答案

您的代码只绘制一个块.您必须存储所有生成块的坐标并在每个游戏帧重新绘制它们.

Your code only draws a single block. You must store the coordinates of all generated block and redraw them at every game frame.

这篇关于如何在 Applet 中为俄罗斯方块游戏设置图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆